我正在尝试刮擦亚马逊网站上的产品,在完成正常的刮擦过程之后,我试图为程序添加一些“复杂性”。
我的想法是从.txt文件中接收某些关键字。通过这些关键字,我使用搜索栏来获取与它们匹配的产品并抓取数据。效果很好。
问题是,根据鞋子(例如,笔记本电脑和鞋子)的关键字,解析器需要以不同的方式工作,因为鞋子的尺寸,颜色等不同,因此我需要从“鞋子”产品中抓取的数据是不同的而不是我从“笔记本电脑”产品中获得的数据。那就是我的位置。
在该站点的人们的一些帮助下,我能够根据Spider从.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 [scrapy.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 = Laptop>(引荐来源:https://www.amazon.com/s?field-keywords=Laptop)
解析器的设置是否有问题,还是更深层次的问题?
答案 0 :(得分:1)
去parse_laptop函数吗? 如果成功了,您会得到什么?空{}还是什么都没有?或任何错误?