Scrapy: кажется, не может очистить все <li>на всех относительных страницах - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь перебрать всех глав государств (COS) на сайте ЦРУ. Там должно быть около 5800 cos. Тем не менее, мой l oop, похоже, не получает всю страну. Буду признателен за любую помощь.

Я сделал это с BS4, и он работал отлично. Но так как все, похоже, поддерживают пропаганду и уважение к веб-сайтам (например, поиск robots.txt), я подумал, что должен повторить мой сценарий bs4 с помощью scrapy.

Цель: очистить все записи всех стран, включая дату изменения. Стартовая страница: https://www.cia.gov/library/publications/world-leaders-1/

Пример страницы: https://www.cia.gov/library/publications/world-leaders-1/AF.html

Здесь я нахожусь:

class spdrCIA_cos(scrapy.Spider):
    name = "cos"
    allowed_domains = ['www.cia.gov']
    start_urls = ['https://www.cia.gov/library/publications/resources/world-leaders-1/']

    def parse(self, response):
        hrefs = response.xpath("//div[@id='cosAlphaList']/ul/li/a/@href").getall()
        for href in hrefs:
            nextpage = response.urljoin(href)
            yield scrapy.Request(nextpage, callback=self.parse_cos)

    def parse_cos(self, response):
        # IMPORT COLUMN HEADERS FROM 'ITEMS.PY'
        items = cosScrapeItem()
        cos_list = response.xpath("//li[contains(@id,'cosid')]").getall()
        for cos in cos_list:
            raw_dateMod = response.xpath(".//span[@id='lastUpdateDate']/text()").extract_first().strip()
            items["dateMod"] = datetime.strptime(raw_dateMod, "%d %b %Y").strftime("%Y/%m/%d")
            items["dateAdd"] = date.today().strftime("%Y/%m/%d")
            items["Country"] = response.xpath(".//td[@class='countryName']/span/text()").extract_first()
            yield items

Несмотря на то, что у меня пока нет кода для очистки названий и имен, у меня уже есть какая-то проблема с перетаскиванием всех стран.

...