【发布时间】:2021-01-31 17:58:08
【问题描述】:
有人可以帮我吗?
我有这段代码,但是当我使用get() 时,它只会捕获每个页面的第一个产品,并且 JSON 文件会以我想要的方式出现。当我使用getall() 时,它需要我需要的所有产品,但 JSON 文件不同。
例如,我有 50 个页面,每页 50 个产品,总共 2500 个产品。在get() 方法中只需要 50 个,在getall() 方法中需要全部,但是带有一个奇怪的 JSON 文件。
我想要与 get() 方法相同的 JSON 输出,但像 getall() 方法一样捕获所有产品
我将附上 JSON 文件的代码和打印件
# -*- coding: utf-8 -*-
import scrapy
from scrapy.exceptions import CloseSpider
class ProdutosSpider(scrapy.Spider):
name = 'produtos'
allowed_domains = ['www.allpartsnet.com.br']
start_urls = [
"https://www.allpartsnet.com.br/buscapagina?fq=B%3a1228&O=OrderByNameASC&PS=50&sl=5d58b484-137e-4091-92ca-29d2e0c70f85&cc=1&sm=0&PageNumber=0"]
page = 0
def parse(self, response):
if len(response.xpath("//*[@class='QD prateleira row qd-xs n1colunas']")) == 0:
raise CloseSpider('No more products to scrape...')
for produtos in response.xpath("//*[@class='QD prateleira row qd-xs n1colunas']"):
yield {
'nome': produtos.xpath("//*[@class='shelf-product-name ']/a/@title").getall(),
'url': produtos.xpath("//*[@class='shelf-product-name ']/a/@href").getall(),
'valor': produtos.xpath("//*[@class='old-price']/text()").getall(),
'valor_desc': produtos.xpath("//*[@class='best-price']/text()").getall()
}
self.page += 1
yield scrapy.Request(
url=f'https://www.allpartsnet.com.br/buscapagina?fq=B%3a1228&O=OrderByNameASC&PS=50&sl=5d58b484-137e-4091-92ca-29d2e0c70f85&cc=1&sm=0&PageNumber={self.page}',
callback=self.parse
)
get()
https://i.imgur.com/9GzFoJn.png
ALT+SHIFT+F
https://i.imgur.com/GyvfqNB.png
getall()
https://i.imgur.com/JJsEEey.png
ALT+SHIFT+F
【问题讨论】:
标签: python json parsing web-scraping scrapy