gpt4 book ai didi

python - Scrapy 返回的结果比预期多

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:22 25 4
gpt4 key购买 nike

这是问题的延续:Extract from dynamic JSON response with Scrapy

我有一个 Scrapy 蜘蛛,可以从 JSON 响应中提取值。它运行良好,提取了正确的值,但不知何故它进入循环并返回比预期更多的结果(重复结果)。

例如,对于 test.txt 文件中提供的 17 个值,它会返回 289 结果,这意味着比预期多17 倍

蜘蛛内容如下:

import scrapy
import json
from whois.items import WhoisItem

class whoislistSpider(scrapy.Spider):
name = "whois_list"
start_urls = []
f = open('test.txt', 'r')
global lines
lines = f.read().splitlines()
f.close()
def __init__(self):
for line in lines:
self.start_urls.append('http://www.example.com/api/domain/check/%s/com' % line)

def parse(self, response):
for line in lines:
jsonresponse = json.loads(response.body_as_unicode())
item = WhoisItem()
domain_name = list(jsonresponse['domains'].keys())[0]
item["avail"] = jsonresponse["domains"][domain_name]["avail"]
item["domain"] = domain_name
yield item

items.py 内容如下

import scrapy

class WhoisItem(scrapy.Item):
avail = scrapy.Field()
domain = scrapy.Field()

下面的 pipelines.py

class WhoisPipeline(object):
def process_item(self, item, spider):
return item

预先感谢您的所有回复。

最佳答案

parse函数应该是这样的:

def parse(self, response):
jsonresponse = json.loads(response.body_as_unicode())
item = WhoisItem()
domain_name = list(jsonresponse['domains'].keys())[0]
item["avail"] = jsonresponse["domains"][domain_name]["avail"]
item["domain"] = domain_name
yield item

请注意,我删除了 for 循环。

发生了什么:对于每个响应,您都会循环并解析它 17 次。 (因此产生17*17的记录)

关于python - Scrapy 返回的结果比预期多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38315087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com