我是新手,我的第一步是在下午6点网站上刮擦某个页面:
似乎我从初始页面获得了产品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
答案 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不受此类过滤器的限制。