繁体   English   中英

Scrapy Spider Crawl 0页面

[英]Scrapy Spider Crawl 0 pages

我正在尝试使用Scrapy从网站上提取json数据,但是我遇到了一些问题,例如当我运行我的Spider时,没有出现任何错误,并说它爬行了0页。 我还使用命令将输出存储到json文件中以查看输出。

以下代码是我的蜘蛛:

import scrapy

class WineSpider(scrapy.Spider):
name = "SpidyWine"
i = 0
url = 'https://maiscarrinho.com/api/search?q=vinho&pageNumber=%s&pageSize=10'
start_urls = [url % 1]

def parse(self, response):
data = json.loads(response.body)
for item in data['results']:
    yield {
        'Image': item.get('image')
    }
if data['Image']:
    i = i + 1
    yield scrapy.Request(self.url % i, callback=self.parse)

我的物品类别:

import scrapy

class MaiscarrinhoItem(scrapy.Item):

 image = scrapy.Field()
 price = scrapy.Field()
 supermarket = scrapy.Field()
 promotion = scrapy.Field()
 wineName = scrapy.Field()
 brand = scrapy.Field()

现在,我只是使用Spider中的Image字段使事情变得更容易。 另外,当我在蜘蛛中编写if语句时,我的想法是使用JSON api具有“ Image”的意思是“无限处理”,这意味着该页面具有内容。

控制台输出

提前致谢

除了一个很小的错误之外,您所做的一切都正确。

包含图像的字段名称是Image而不是image

尝试:

yield {
    'Image': item.get('Image')
}

settings.py文件中的ITEM_PIPELINES也可能有问题

使用python请求

甚至可以轻松地工作:

很好地回答了我的问题,并在一段时间后深入研究了我的代码……我意识到这与标识错误和某些语法错误有关。

另一个要点是管道,我忘了将姓氏更改为管道的真实名称,因此不再使用'Maiscarrinho.pipelines.SomePipeline': 300现在使用'Maiscarrinho.pipelines.MaiscarrinhoPipeline': 300

波纹管代码像我想要的那样提取图像,但是有一个问题。 由于页面具有无限滚动功能,因此我有条件评估是否有一个名为'Image的元素,但由于某种原因,我没有得到所需的结果。 它应该提取40页,每页包含10张图像。

import scrapy
import json

class WineSpider(scrapy.Spider):
name = "SpidyWine"

url = 'https://maiscarrinho.com/api/search?q=vinho&pageNumber=%s&pageSize=10'
start_urls = [url % 1]
i = 1
def parse(self, response):
    data = json.loads(response.body.decode('utf-8'))
    for item in data['results']:
        yield {
            'Image': item.get('Image')
        }
        if item.get('Image'):
            WineSpider.i += 1
            yield scrapy.Request(self.url % WineSpider.i, callback=self.parse)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM