gpt4 book ai didi

python - 如何将 url 值传递给 Scrapy 爬取中的所有后续项目?

转载 作者:行者123 更新时间:2023-11-28 19:24:41 24 4
gpt4 key购买 nike

我正在创建一个 CrawlSpider 来抓取产品网站。从第 1 页,我提取了 www.domain.com/color(简化)形式的类别 url。在类别页面上,我跟随第一个链接到产品详细信息页面,解析产品详细信息页面并通过 Next 链接爬到下一个。因此,每个颜色类别都有一个唯一的抓取路径。

困难在于颜色变量不在产品详细信息页面上。我可以通过解析链接从类别页面中提取它,如下所示:

def parse_item(self, response):
l = XPathItemLoader(item=Greenhouse(), response=response)
l.default_output_processor = Join()
l.add_value('color', response.url.split("/")[-1])
return l.load_item()

但是,对于从特定颜色类别页面开始爬取的产品,我想将此颜色值添加到从产品详细信息页面解析的项目中。产品网址是通过下一个链接抓取的,因此在第一个链接后引用类别页面丢失。 Scrapy 文档中有关于 request.meta 的内容,它可以在解析器之间传递数据,但我不确定这是否适用于此。任何帮助将不胜感激。

我的规则是:

Rule(SgmlLinkExtractor(restrict_xpaths=('//table[@id="ctl18_ctlFacetList_dlFacetList"]/tr[2]/td',)),),
Rule(SgmlLinkExtractor(restrict_xpaths=('//table[@id="ctl18_dlProductList"]/tr[1]/td[@class="ProductListItem"][1]',)),callback='parse_item', follow=True,),
Rule(SgmlLinkExtractor(restrict_xpaths=('//a[@id="ctl18_ctl00_lbNext"]',)),callback='parse_item', follow=True, ),

最佳答案

您可以使用 process_request你的规则论点:

class MySPider(CrawlSpider):
...
rules = [...
Rule(SgmlLinkExtractor(), process_request='add_color'),
]

def add_color(self, request):
meta = dict(color=request.url.split("/")[-1])
return request.replace(meta=meta)

关于python - 如何将 url 值传递给 Scrapy 爬取中的所有后续项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16071273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com