Scrapy crawl 不抓取任何 url

时间:2021-06-19 18:13:17

标签: scrapy web-crawler

这是我的第一个蜘蛛代码。当我在我的 cmd 中执行此代码时。日志显示 URL 甚至没有被抓取,并且其中没有 DEBUG 消息。 无法在任何地方找到解决此问题的任何方法.. 我不明白出了什么问题。有人可以帮我解决这个问题吗。

我的代码:

class Event {
  final String eventName;
  final DateTime eventStartTime;
  final String eventDuration;
  final DateTime eventDate;
  final String eventDescription;
  final String agentId;
  final String agencyId;

日志:

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes_spider"

    def start_request(self):

        urls = ["http://quotes.toscrape.com/page/1/",
                "http://quotes.toscrape.com/page/2/",
                "http://quotes.toscrape.com/page/3/"
                ]
    
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'quotes-%s.html'% page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)

1 个答案:

答案 0 :(得分:1)

注意:因为我没有 50 的声誉可以发表评论,所以我在这里回答。

问题在于函数命名,你的函数应该是 def start_requests(self) 而不是 def start_request(self)

要执行的第一个请求是通过调用 start_requests() 方法获得的,该方法(默认情况下)为 URL 生成请求。但是,在您的情况下,它永远不会进入该功能,因为永远不会对这些 URL 发出请求。

小改动后的代码

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes_spider"

    def start_requests(self):

        urls = ["http://quotes.toscrape.com/page/1/",
                "http://quotes.toscrape.com/page/2/",
                "http://quotes.toscrape.com/page/3/"
                ]
    
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = 'quotes-%s.html'% page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('Saved file %s' % filename)