【发布时间】:2016-04-06 02:20:35
【问题描述】:
我有一个基本的scrapy脚本,它执行以下操作:
- 访问网站
-
使用规则获取所有页面:
rules = ( Rule(LinkExtractor(allow=(), restrict_xpaths=('//*[@id="pagination_top"]/a',)), callback="parse_page", follow= True), ) -
在每个页面中,获取到产品页面的所有链接:
def parse_page(self, response): for href in response.css("#prod_category > ul > li > a::attr('href')"): url = response.urljoin(href.extract()) yield scrapy.Request(url, callback=self.parse_dir_contents) -
并访问每个产品页面以获取有关产品的详细信息。然后我从另一个链接获取更多详细信息
def parse_dir_contents(self, response): # select xpath here print '________________________BEGIN PRODUCT________________________' item = detailedItem() item['title'] = sites.xpath('//*[@id="product-name"]/text()').extract() # get url_2 from this page request = scrapy.Request(url_2, callback=self.parse_detailed_contents) request.meta['item'] = item yield request -
最后是获取产品详细信息的函数
我认为最后一个 parse_detailed_contents 是我遇到问题的地方
def parse_detailed_contents(self, response): item = response.meta['item'] sel = Selector(response) sites = sel.xpath('//*[@id="prod-details"]') print '________________________GETTING DETAILS________________________' item['prod_details'] = sites.xpath('//*[@id="prod-details"]/div/text()').extract() return item
问题是我的脚本为第一个链接返回 item['prod_details'] 但没有为后续链接返回任何项目。
那是因为 url_2 被传递给所有产品吗?
有人可以帮忙吗?提前非常感谢!
【问题讨论】:
-
您在运行爬虫时是否在控制台日志中发现任何错误?
-
谢谢@jithin 没有错误...脚本为每个产品打印“BEGIN PRODUCT”,但仅为第一个产品打印“GETTING DETAILS”。所有后续产品页面仅返回“BEGIN PRODUCT”
标签: python scrapy yield-return