Я пишу программу для очистки заголовка статьи, даты и основного текста из каждой статьи в архиве этого сайта и экспорта в файл CSV. Веб-сайт, кажется, блокирует меня в какой-то момент, и я получаю эту ошибку: HTTPError: Служба недоступна.
Я считаю, что это потому, что я пытаюсь зайти на их сайт слишком много раз за короткий промежуток времени. Я хочу, чтобы мой код мог прочитать, где произошла ошибка, и узнать, где она остановилась.
Я пытался добавить задержки для задержки через 2 секунды после просмотра 10 статей. Я также пробовал случайные задержки после каждых десяти статей. Я мог бы добавить более длительные задержки, но я бы хотел, чтобы код мог работать там, где он чувствовал себя надежным.
from bs4 import BeautifulSoup
from urllib.request import urlopen
import csv
from time import sleep
from random import randint
csvfile = "C:/Users/k/Dropbox/granularitygrowth/Politico/pol.csv"
with open(csvfile, mode='w', newline='', encoding='utf-8') as pol:
csvwriter = csv.writer(pol, delimiter='~', quoting=csv.QUOTE_MINIMAL)
csvwriter.writerow(["Date", "Title", "Article"])
#for each page on Politico archive
for p in range(0,412):
url = urlopen("https://www.politico.com/newsletters/playbook/archive/%d" % p)
content = url.read()
#Parse article links from page
soup = BeautifulSoup(content,"lxml")
articleLinks = soup.findAll('article', attrs={'class':'story-frag format-l'})
#Each article link on page
for article in articleLinks:
link = article.find('a', attrs={'target':'_top'}).get('href')
#Open and read each article link
articleURL = urlopen(link)
articleContent = articleURL.read()
#Parse body text from article page
soupArticle = BeautifulSoup(articleContent, "lxml")
#Limits to div class = story-text tag (where article text is)
articleText = soupArticle.findAll('div', attrs={'class':'story-text'})
for div in articleText:
#Find date
footer = div.find('footer', attrs={'class':'meta'})
date = footer.find('time').get('datetime')
print(date)
#Find title
headerSection = div.find('header')
title = headerSection.find('h1').text
print(title)
#Find body text
textContent = ""
bodyText = div.findAll('p')
for p in bodyText:
p_string = str(p.text)
textContent += p_string + ' '
print(textContent)
#Adds data to csv file
csvwriter.writerow([date, title, textContent])
time.sleep(randint(3,8))
Я ожидаю, что в моем коде все еще будет эта ошибка, но затем продолжу с того места, где он остановился, и продолжу печатать и экспортировать данные в CSV-файл.