Donc j'essaie de gratter les titres de here. Pour toutes les 10 années.Python - augmenter la vitesse du code Pandas.append
years
est une liste ici qui contient
/resources/archive/us/2007.html
/resources/archive/us/2008.html
/resources/archive/us/2009.html
/resources/archive/us/2010.html
/resources/archive/us/2011.html
/resources/archive/us/2012.html
/resources/archive/us/2013.html
/resources/archive/us/2014.html
/resources/archive/us/2015.html
/resources/archive/us/2016.html
Alors, que mon code fait ici, est-il ouvre chaque page de l'année, rassemble tous les liens de date et ouvre alors chacun individuellement et prend toutes les .text
et ajoute chaque titre et la date correspondante comme une ligne à la dataframe headlines
headlines = pd.DataFrame(columns=["date", "headline"])
for y in years:
yurl = "http://www.reuters.com"+str(y)
response=requests.get(yurl,headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36', })
bs= BeautifulSoup(response.content.decode('ascii', 'ignore'),'lxml')
days =[]
links = bs.findAll('h5')
for mon in links:
for day in mon.next_sibling.next_sibling:
days.append(day)
days = [e for e in days if str(e) not in ('\n')]
for ind in days:
hlday = ind['href']
date = re.findall('(?!\/)[0-9].+(?=\.)', hlday)[0]
date = date[4:6] + '-' + date[6:] + '-' + date[:4]
print(date.split('-')[2])
yurl = "http://www.reuters.com"+str(hlday)
response=requests.get(yurl,headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36', })
if response.status_code == 404 or response.content == b'':
print('')
else:
bs= BeautifulSoup(response.content.decode('ascii', 'ignore'),'lxml')
lines = bs.findAll('div', {'class':'headlineMed'})
for h in lines:
headlines = headlines.append([{"date":date, "headline":h.text}], ignore_index = True)
Il faut toujours courir, donc plutôt que de courir la boucle, j'ai juste couru cette année pour l'/resources/archive/us/2008.html
Cela fait 3 heures et c'est encore en cours.
Depuis que je suis nouveau à Python, je ne comprends pas, ce que je fais mal, ou comment je peux faire mieux.
Se pourrait-il que le pandas.append
prenne une éternité parce qu'il doit lire et écrire une plus grande dataframe chaque fois qu'il est exécuté?
Ne pas appeler ajouter des centaines de fois. Au lieu de cela, maintenez une liste qui a 100 images de données distinctes, puis appelez finalement 'pd.concat'. –