Skip to content
Snippets Groups Projects
Commit 7b6f7d72 authored by Ville Komulainen's avatar Ville Komulainen
Browse files

Dokumentointia, main metodi

parent 10e4227a
Branches
No related tags found
No related merge requests found
Pipeline #51094 passed
from scraper import scrape_xml_yle
from scraper import scrape_il, scrape_xml_yle, to_json
import sys
def main():
#artikkelit = scrape_xml_yle()
print(len(scrape_xml_yle()))
ehto = True
while(ehto):
sivusto = str(input('Syötä yle tai iltalehti: ').lower())
if sivusto == 'yle':
yle_artikkelit = scrape_xml_yle()
nimi = input('Anna nimi tiedostolle johon json data tallenetaan: ')
try:
with open(nimi+'.json', 'xb') as f:
f.write(to_json(yle_artikkelit))
ehto = False
break
except FileExistsError:
print("Nimi on jo käytössä")
if sivusto == 'iltalehti':
il_artikkelit = scrape_il()
nimi = input('Anna nimi tiedostolle johon json data tallenetaan: ')
try:
with open(nimi+'.json', 'xb') as f:
f.write(to_json(il_artikkelit))
ehto = False
break
except FileExistsError:
print("Nimi on jo käytössä")
else:
print("Väärä syöte")
if __name__ == "__main__":
......
from bs4 import BeautifulSoup
import requests
import json
"""
Käytetään requests kirjastoa tekemään HTTP get pyyntö Url:iin.
Beautifulsoup kirjastoa käytetään parsettamaan xml sivu.
Sivusta etsitään yksittäiset uutiset, josta otetaan ylös otsikko, julkaisupäivämäärä sekä teksti.
Artikkelit tallennetaan dict tiedostoon, jotka kootaan listaan
"""
def scrape_xml_yle():
url = 'https://feeds.yle.fi/uutiset/v1/recent.rss?publisherIds=YLE_UUTISET'
artikkelit_lista = []
......@@ -15,7 +20,7 @@ def scrape_xml_yle():
otsikko = art.find('title').text
pubDate = art.find('pubDate').text
teksti = art.find('content:encoded').text
t_soup = BeautifulSoup(teksti,features='xml').get_text()
t_soup = BeautifulSoup(teksti,features='xml').get_text() # teksti on <p> tagien sisällä, joten parsetetaan uudestaan jolloin jää vain teksti
artikkeli = {
'otsikko': otsikko,
......@@ -26,9 +31,14 @@ def scrape_xml_yle():
except:
print("Epäonnistunut imurointi")
print('scrapattu')
print(f'Scrapattu {len(artikkelit_lista)} uutista yleltä, pvm: {list(artikkelit_lista[0].values())[1]}')
return artikkelit_lista
"""
Muuten samanlainen, kuten ylen metodi,
mutta iltalehden rss syötteestä joudutaan kaivamaan teksti
menemalla linkin kautta itse uutiseen.
"""
def scrape_il():
url = 'https://www.iltalehti.fi/rss/uutiset.xml'
sivu = requests.get(url)
......@@ -63,9 +73,10 @@ def scrape_il():
artikkeli_lista.append(artikkeli)
except:
print("Jotain väärin")
print("Kuinka monta artikkelia",len(artikkeli_lista))
print(f'Scrapattu {len(artikkeli_lista)} uutista yleltä, pvm: {list(artikkeli_lista[0].values())[1]}')
return artikkeli_lista
def to_json(file):
data = json.dumps(file,ensure_ascii=False,indent=1).encode('utf8')
print("Data enkoodattu json-utf8 muotoon, decode() muuttaa ihmisluettavaksi")
......
import unittest
from main.src.scraper import scrape_xml_yle
from main.src.scraper import scrape_xml_yle, to_json
from main.src.scraper import scrape_il
from main.src.scraper import to_json
def test_ylescraper():
class TestMethods(unittest.TestCase):
def test_ylescraper(self):
artikkelit = scrape_xml_yle()
#Varmista,että artikkeleja on imuroitu
assert len(artikkelit) > 0
......@@ -10,9 +12,9 @@ def test_ylescraper():
assert type(artikkelit) == list
#Katso, että kaikkiin on tallentunut kaikki tiedot: Otsikko, julkaisupvm, teksti
for art in artikkelit:
assert len(art) == 3
self.assertTrue(len(art) == 3)
def test_ilscraper():
def test_ilscraperself(self):
artikkelit = scrape_il()
assert len(artikkelit) > 0
......@@ -20,5 +22,18 @@ def test_ilscraper():
assert type(artikkelit) == list
for art in artikkelit:
assert len(art) == 3
self.assertTrue(len(art) == 3)
def test_json(self):
import json
file = scrape_xml_yle()
data = to_json(file)
self.assertIsInstance(data,bytes)
loaded = json.loads(data)
self.assertEqual(file,loaded) #Katsotaan, että jsoniksi muuttaminen ja siitä palauttaminen ei muuta dataa
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment