我的 scrapy 脚本似乎没有调用 parse_item 方法
My scrapy script doesn't seem to be calling the parse_item method
我是 scrapy 的新手,我的第一个练习是在下午 6 点的网站上抓取某个页面:
- 获取初始页面每个产品的url
- 输入 link 并抓取产品信息(参考、描述、价格等)
- 返回初始页面并转到下一个产品等
我似乎从初始页面获取了产品 URLS,然后似乎无法调用 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
您的 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 不受此类过滤器的约束。
我是 scrapy 的新手,我的第一个练习是在下午 6 点的网站上抓取某个页面:
- 获取初始页面每个产品的url
- 输入 link 并抓取产品信息(参考、描述、价格等)
- 返回初始页面并转到下一个产品等
我似乎从初始页面获取了产品 URLS,然后似乎无法调用 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
您的 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 不受此类过滤器的约束。