Скрап ползает, но нет выхода - PullRequest
1 голос
/ 19 октября 2019

Я очищаю несколько страниц без ошибок, но сканер не выдает никаких выходных данных. Функция parse_article работает нормально (я проверял это отдельно), но вместе с функцией parse она больше не создает никакого вывода. Есть идеи?

Я запустил сканер из командной строки: scrapy crawl all_articles_from_one_page -o test_file.csv

import scrapy
from scrapping_538.items import Scrapping538Item
from scrapy.loader import ItemLoader
from scrapy.loader.processors import MapCompose
import datetime
import socket


class BasicSpider(scrapy.Spider):
    name = 'all_articles_from_one_page'
    allowed_domains = ['web']
    start_urls = ('http://fivethirtyeight.com/features/',)

    def parse(self, response):
        # iterate through articles
        article_divs = response.xpath('//*[@id="primary"]//div[contains(@id, "post")]')
        for article in article_divs:
            print('\n**********************************************')
            article_link = article.xpath('.//h2/a/@href').extract()[0] 
            print('------article link: ' + str(article_link))
            yield scrapy.Request(article_link, callback=self.parse_article)

    def parse_article(self, response):
        il = ItemLoader(item=Scrapping538Item(), response=response)
        il.add_css('title', 'h1.article-title::text')
        il.add_css('date', 'time.datetime::text')
        il.add_css('author', '.author::text')
        il.add_css('filed_under', '.term::text')
        il.add_css('article_text', '.entry-content *::text')

        il.add_value('url', response.url)
        il.add_value('project', self.settings.get('BOT_NAME'))
        il.add_value('spider', self.name)
        il.add_value('server', socket.gethostname())
        il.add_value('date_import', datetime.datetime.now())

        return il.load_item()

1 Ответ

2 голосов
/ 20 октября 2019

Измените allowed_domains на:

allowed_domains = ['fivethirtyeight.com']

Scrapy отфильтрует любой запрос к домену, не указанному в этом свойстве. Включите в него fivethirtyeight.com.

(https://docs.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider.allowed_domains)

allow_domains

Необязательный список строк, содержащих домены, которыми является этот паукразрешено сканировать. Запросы для URL-адресов, не принадлежащих доменным именам, указанным в этом списке (или их поддоменам), не будут выполняться, если включен OffsiteMiddleware.

Допустим, ваш целевой URL-адрес https://www.example.com/1.html,затем добавьте 'example.com' в список.

...