gpt4 book ai didi

python - 多页 scrapy 代码的最佳实践

转载 作者:行者123 更新时间:2023-12-01 03:54:53 28 4
gpt4 key购买 nike

我正在开始使用 scrapy。我的 items.py 包含:

class ParkerItem(scrapy.Item):
account = scrapy.Field()
m = scrapy.Field()

然后我使用以下命令生成网站请求:

   for i in range(max_id):

yield Request('first_url', method="post", headers= headers, body=payload, callback=self.parse_get_account)


def parse_get_account(self, response):

j = json.loads(response.body_as_unicode())
if j['d'][0] != "":
item = ParkerItem()
item['account'] = j['d'][0]
return self.parse_second_request(item)
print("back here"+str(item))
print "hello"

如果帐号存在,我将其存储在 item 中并调用 parse_second_request

def parse_second_request(self, item):

yield Request(method="GET", url=(url + '?' + urllib.urlencode(querystring)), headers=headers, callback=self.parse_third_request,meta={'item': item})

这会调用 parse_third_request (它实际上解析第二个)

def parse_third_request(self, response):

item = response.meta['item'] # {'account': u'11'}
m = response.selector.xpath('/table//td[3]/text()').extract()
item["m"] = m[0]

print("hi"+str(item))
return item

这段代码有效,项目被传递到管道进行存储,但看起来它们的功能很多,只需要抓取 2 个页面。有没有办法使用最佳实践来简化代码?

最佳答案

您可以避免使用 def parse_second_request(self, item): 方法:

def parse_get_account(self, response):
j = json.loads(response.body_as_unicode())
if j['d'][0] != "":
item = ParkerItem()
item['account'] = j['d'][0]
return Request(method="GET", url=(url + '?' + urllib.urlencode(querystring)), headers=headers, callback=self.parse_third_request, meta={'item': item})

除此之外,由于您的项目字段是由来自不同页面的数据填充的,因此您的做法是正确的。

关于python - 多页 scrapy 代码的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645616/

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