【问题标题】:Chaining requests with scrapy使用 scrapy 链接请求
【发布时间】:2015-01-03 03:00:15
【问题描述】:

现在我可以看到scrapy同时下载所有页面,但我需要链接peopleextract_person方法,这样当我在方法people中获取人员url列表时,我会关注所有这些并且刮掉我需要的所有信息,然后才继续使用另一个页面的人员网址。我该怎么做?

def people(self, response):
    sel = Selector(response)
    urls = sel.xpath(XPATHS.URLS).extract()
    for url in urls:
        yield Request(
            url=BASE_URL+url,
            callback=self.extract_person,
        )

def extract_person(self, response):
    sel = Selector(response)
    name = sel.xpath(XPATHS.NAME).extract()[0]
    person = PersonItem(name=name)
    yield student

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    您可以控制请求的priority

    priority (int) – 此请求的优先级(默认为 0)。优先级 调度程序使用它来定义用于处理请求的顺序。 具有更高优先级值的请求将更早执行。消极的 允许值以指示相对较低的优先级。

    将人员请求的优先级设置为 1 会让 Scrapy 知道首先处理它们:

    for url in student_urls:
        yield Request(
            url=BASE_URL+url,
            callback=self.extract_person,
            priority=1
        )
    

    【讨论】:

    • 正如我在日志中看到的,它仍然几乎相同。在extract_person之前还有很多people方法执行。
    • @DmitryMikhaylov 是的,由于start_urls 的内部处理方式,他们可能已经在队列中。尝试this solution - 覆盖start_requests() 方法并从中返回一个url 列表。谢谢。如果有帮助,请告诉我。
    • 是的,但不是优先影响它们在队列中的处理方式。我也无法让优先关键字在我的爬虫中正常工作。
    猜你喜欢
    • 1970-01-01
    • 2021-01-06
    • 2019-07-26
    • 2022-01-22
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多