代码之家  ›  专栏  ›  技术社区  ›  Tjorriemorrie

Scrapy不遵循给定的请求

  •  1
  • Tjorriemorrie  · 技术社区  · 7 年前
    # -*- coding: utf-8 -*-
    import logging
    
    import scrapy
    from scrapy.shell import inspect_response
    
    
    class SuvlistingsSpider(scrapy.Spider):
        name = 'SuvListings'
        allowed_domains = ['https://www.gumtree.com.au']
        start_urls = [
            'https://www.gumtree.com.au/s-cars-vans-utes/sydney/carbodytype-suv/forsaleby-ownr/c18320l3003435/',
        ]
    
        def parse(self, response):
            self.log('Received response for listings page', level=logging.INFO)
    
            main = response.css('.panel-body.panel-body--flat-panel-shadow.user-ad-collection__list-wrapper')[-1]
            for a in main.css('a'):
                req = response.follow(a, callback=self.parse_item)
                yield req
    
        def parse_item(self, response):
            0/0
            yield {
                'price': response.xpath('normalize-space(//div[@id="ad-price"]/div/span[1])').extract(),
            }
    

    上述代码不会触发异常。我在Pycharm的debug中运行它。它是一个锚选择器,如scrapy站点上的教程所述,但没有任何东西会被刮掉。这里怎么了?

    1 回复  |  直到 7 年前
        1
  •  3
  •   John Smith    7 年前

    allowed_domains 必须仅指定一个没有方案的域(www.gumtree.com.au)。否则,scrapy会阻止所有认为其域与允许域不匹配的“异地”请求。