Spider进入页面后不会解析数据



我正在尝试在亚马逊的网站上抓取产品,在实现正常的抓取过程后,我试图给程序增加一些"复杂性"。

我的想法是从.txt中接收某些关键字。有了这些关键词,我使用搜索栏来获取与它们匹配的产品并抓取数据。效果很好。

问题是,根据关键词,例如Laptop和Shoes,解析器需要以不同的方式工作,因为鞋子有不同的尺寸、颜色等,所以我需要从"鞋子"产品中抓取的数据与我需要从一个"Laptop"产品中获取的数据不同。这就是我现在的处境。

在这个网站的一些人的帮助下,我能够根据蜘蛛从.txt中得到的单词来调用不同的解析器。代码看起来像这样。

def start_requests(self):
txtfile = open('productosABuscar.txt', 'r')
keywords = txtfile.readlines()
txtfile.close()
for keyword in keywords:
yield Request(self.search_url.format(keyword))
def parse_item(self,response):
#Here i get the keyword for comparisson later
category = re.sub('Back to search results for |"','', response.xpath('normalize-space(//span[contains(@class, "a-list-item")]//a/text())').extract_first()) 
#Here i get the product url for the next parser
productURL = response.request.url
if category == 'Laptop':
yield response.follow(productUrl, callback = self.parse_laptop)
def parse_laptop(self, response):
laptop_item = LaptopItem()
#Parsing things
yield laptop_item

这应该可以正常工作,但是,当我从Anaconda控制台运行spider时,没有任何数据被抓取。奇怪的是,蜘蛛实际上正在访问亚马逊页面上的每一个"笔记本电脑"项目,但却没有从中抓取数据

在控制台中,我可以看到蜘蛛正在访问的每个链接,其中包含语句,例如

2018-12-27 10:02:36〔scratch.core.engine〕调试:爬行(200)https://www.amazon.com/Acer-Aspire-i3-8130U-Memory-E5-576-392H/dp/B079TGL2BZ/ref=sr_1_3/ref=sr_1_acs_bss_3_4?ie=UTF8&qid=1545915651&sr=8-3-acs&keywords=笔记本电脑>(参考:https://www.amazon.com/s?field-keywords=笔记本电脑)

解析器的排列是否有问题,或者这是一个更深层次的问题?

它是否转到parse_laptop函数?如果它消失了,你会得到什么?空{}还是什么都没有?或者有什么错误?

最新更新