我的草率脚本似乎没有调用parse_item方法

时间:2018-07-05 13:11:34

标签: python-3.x scrapy scrapy-spider

我是新手,我的第一步是在下午6点网站上刮擦某个页面:

  1. 在初始页上获取每种产品的网址
  2. 输入链接并刮取产品信息(参考,描述,价格等)。
  3. 返回初始页面并转到下一个产品,等等。

似乎我从初始页面获得了产品URL,然后似乎无法调用parse_item方法。我试图阅读并发现类似的问题,但是也许因为我是新手,所以我无法理解为什么它不起作用。我试过使用Rule方法,并且结果相同。 有人能帮帮我吗?我已经尝试解决此问题3天了。谢谢。

这是我的脚本的副本:

# -*- coding: utf-8 -*-
import scrapy
from scrapy import Spider
from scrapy.spiders import Spider
from esourcing.items import EsourcingItem
from scrapy.http import Request
import re


class SixpmSpider(scrapy.Spider):
    name = 'sixpmsouq'
    allowed_domains = ['web']
    start_urls = ('https://www.6pm.com/a2-by-aerosoles-women- 
shoes/CK_XAVoC0iPAAQHiAgQBCxgykgMLWzcwIFRPIDEwMF0.zso?
s=recentSalesStyle/desc/',)


    def parse(self, response):
        html = response.body

        for href in response.xpath('//*[@itemprop="url"]/@href'):
            url = "http://www.6pm.com"+ href.extract()
            yield scrapy.Request(url, callback=self.parse_item)


    def parse_item(self, response):
        item = EsourcingItem()
        item['reference'] = response.xpath('//*[text()="SKU: #"]/text() [2]').extract()
        yield item

1 个答案:

答案 0 :(得分:0)

您的allowed_domains属性似乎正在过滤掉您在self.parse中生成的请求。

如果您查看蜘蛛日志,则会看到一条消息,提示OffsiteMiddleware过滤了您的请求,如下所示:

DEBUG: Filtered offsite request to 'www.6pm.com': <GET ....>

通过将以下属性更改为['6pm.com']

进行修复
class SixpmSpider(scrapy.Spider):
    name = 'sixpmsouq'
    allowed_domains = ['6pm.com']

如果您想知道第一个请求(来自start_urls的原因为何成功,那是因为来自start_urls(或start_requests)的URL不受此类过滤器的限制。