【问题标题】:(Scrapy) Generate Request / Generate & execute Request / Execute Request(Scrapy) 生成请求/生成并执行请求/执行请求
【发布时间】:2019-10-04 09:07:41
【问题描述】:

我正在https://www.accordbox.com/blog/how-crawl-infinite-scrolling-pages-using-python/学习scrapy示例

关于那里的Scrapy解决方案代码的yield Request,我很困惑。

共有三个yield 请求。有时Request 只是生成,有时它被生成并执行,有时它只是被执行。

你能告诉我它们之间有什么区别吗?

谢谢!

def parse_list_page(self, response):
    next_link = response.xpath(
        "//a[@class='page-link next-page']/@href").extract_first()
    if next_link:
        url = response.url
        next_link = url[:url.find('?')] + next_link

        ################################
        # Generate and Execute Request
        ################################

        yield Request(                           
            url=next_link,
            callback=self.parse_list_page
        )

    for req in self.extract_product(response):
        ################################
        #Just Execute Request
        ################################
        yield req       

def extract_product(self, response):
    links = response.xpath("//div[@class='col-lg-8']//div[@class='card']/a/@href").extract()
    for url in links:
        result = parse.urlparse(response.url)
        base_url = parse.urlunparse(
            (result.scheme, result.netloc, "", "", "", "")
        )
        url = parse.urljoin(base_url, url)

        ################################
        #Just Generate Request
        ################################

        yield Request (
            url=url,
            callback=self.parse_product_page
        )

def parse_product_page(self, response):
    logging.info("processing " + response.url)
    yield None

【问题讨论】:

  • 您能否修复链接,以便我们可以看到您正在使用的示例。请求之间没有任何区别,只是蜘蛛的控制流。
  • 对不起。我修复了链接。比你。

标签: python scrapy request yield


【解决方案1】:

您可能会发现figure here 对回答您的问题很有用。

parse_list_page 方法中的yields 将请求返回给“引擎”(图中的步骤 7)。 extract_product 中的 yield 正在返回到 parse_list_pageparse_list_page 然后立即将它们交还给引擎。

请注意,extract_product 中的所有代码也可以只进入parse_list_page 以创建一个方法。有两种方法可以很好地分离逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2018-01-20
    相关资源
    最近更新 更多