【问题标题】:Scrapy is crawling, but no outputScrapy 正在爬行,但没有输出
【发布时间】:2019-10-19 17:49:28
【问题描述】:

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

【问题讨论】:

    标签: python web-scraping scrapy web-crawler


    【解决方案1】:

    将您的 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' 添加到列表中。

    【讨论】:

    • 我的上帝……真丢脸。我没有注意到这一点。非常感谢,就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2022-01-17
    • 2021-11-04
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多