首页 > 解决方案 > Scrapy 正在爬行,但没有输出

问题描述

我正在抓取几页而没有错误,但爬虫没有生成任何输出。该函数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()

标签: pythonweb-scrapingscrapyweb-crawler

解决方案


将您更改allowed_domains为:

allowed_domains = ['fivethirtyeight.com']

Scrapy 将过滤任何对该属性未列出的域的请求。包括fivethirtyeight.com它。

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

allowed_domains

包含允许此蜘蛛抓取的域的可选字符串列表。OffsiteMiddleware如果启用,则不会遵循对不属于此列表中指定的域名(或其子域)的 URL 的请求。

假设您的目标网址是https://www.example.com/1.html,然后添加'example.com'到列表中。


推荐阅读