Spider进入页面后不解析数据

时间:2018-12-27 13:21:37

标签: python-3.x web-scraping scrapy

我正在尝试刮擦亚马逊网站上的产品,在完成正常的刮擦过程之后,我试图为程序添加一些“复杂性”。

我的想法是从.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

解析器的设置是否有问题,还是更深层次的问题?

1 个答案:

答案 0 :(得分:1)

去parse_laptop函数吗? 如果成功了,您会得到什么?空{}还是什么都没有?或任何错误?