Основная проблема заключается в том, что формат даты, используемый в архивных URL-адресах Le Monde, равен day-month-year
, а не day/month/year
. Чтобы исправить это изменение:
all_url.append(one_url + "{date.day:02}/{date.month:02}/{date.year}".format(date=mydate) + '/')
до
all_url.append(one_url + "{date.day:02}-{date.month:02}-{date.year}".format(date=mydate) + '/')
Ощущение, что программа зависла, просто из-за отсутствия обратной связи. @ Ответ Заида показывает, как решить эту проблему элегантным образом.
Если вам нужен более быстрый подход к выполнению набора HTTP-запросов, вам следует рассмотреть возможность использования чего-то асинхронного. Я предлагаю использовать Scrapy
, который является платформой, созданной для такого рода задач (утилизация в сети).
Я сделал простого паука для извлечения всех заголовков, содержащих 'autism'
в архиве (с начала 2018 года и до сегодняшнего дня):
import re
from datetime import date
from datetime import timedelta
import scrapy
BASE_URL = 'https://www.lemonde.fr/archives-du-monde/'
def date_range(start, stop):
for d in range((stop - start).days):
yield start + timedelta(days=d)
class LeMonde(scrapy.Spider):
name = 'LeMonde'
def start_requests(self):
for day in date_range(date(2018, 1, 1), date.today()):
url = BASE_URL + '{d.day:02}-{d.month:02}-{d.year}'.format(d=day) + '/'
yield scrapy.Request(url)
def parse(self, response):
for headline in response.xpath('//h3/a/text()').getall():
headline = headline.strip()
if 'autism' in headline.lower():
yield { 'headline': headline }
Мне удалось удалить заголовки за 47 секунд, используя приведенный выше код. Если вы заинтересованы, вы можете запустить его с:
scrapy runspider spider_file.py -o headlines.csv
это создаст CSV-файл (headlines.csv
), содержащий заголовки.