gpt4 book ai didi

python - 无法强制脚本重试五次,除非中间出现 200 状态

转载 作者:行者123 更新时间:2023-12-04 00:54:25 26 4
gpt4 key购买 nike

我使用 scrapy 创建了一个脚本,它能够递归地重试列表中的某些链接,即使这些链接无效并获得 404 响应。我在 meta 中使用了 dont_filter=True'handle_httpstatus_list': [404] 来实现当前行为。我现在要做的是让脚本执行相同的操作 5 次,除非中间有 200 status。我在 meta 中包含了 "max_retry_times":5 考虑到它最多会重试五次,但它只是无限重试。

到目前为止我已经尝试过:

import scrapy
from bs4 import BeautifulSoup
from scrapy.crawler import CrawlerProcess

class StackoverflowSpider(scrapy.Spider):
name = "stackoverflow"
start_urls = [
"https://stackoverflow.com/questions/taggedweb-scraping",
"https://stackoverflow.com/questions/taggedweb-scraping"
]

def start_requests(self):
for start_url in self.start_urls:
yield scrapy.Request(start_url,callback=self.parse,meta={"start_url":start_url,'handle_httpstatus_list': [404],"max_retry_times":5},dont_filter=True)

def parse(self,response):
if response.meta.get("start_url"):
start_url = response.meta.get("start_url")

soup = BeautifulSoup(response.text,'lxml')
if soup.select(".summary .question-hyperlink"):
for item in soup.select(".summary .question-hyperlink"):
title_link = response.urljoin(item.get("href"))
print(title_link)

else:
print("++++++++++"*20) # to be sure about the recursion
yield scrapy.Request(start_url,meta={"start_url":start_url,'handle_httpstatus_list': [404],"max_retry_times":5},dont_filter=True,callback=self.parse)

if __name__ == "__main__":
c = CrawlerProcess({
'USER_AGENT':'Mozilla/5.0',
})
c.crawl(StackoverflowSpider)
c.start()

如何让脚本最多重试五次?

注意:列表中有多个相同的 url。我不想删除重复的链接。我想让 scrapy 使用所有的 url。

最佳答案

我可以提出以下方向:
1.将 404 代码添加到 RETRY_HTTP_CODES设置,因为它默认不包含响应代码 404

is capable of retrying a link recursively even when the link is invalid and get 404 response

class StackoverflowSpider(scrapy.Spider):
name = "stackoverflow"
custom_settings = {
'RETRY_HTTP_CODES' : [500, 502, 503, 504, 522, 524, 408, 429 , 404],
'RETRY_TIMES': 5 # usage of "max_retry_times" meta key is also valid
}
....
  1. 使用 dont_filter=True - scrapy 应用程序将访问以前访问过的页面。
    从您的代码中删除 dont_filter=True 应该可以解决无限循环问题

but it just retries infinitely.

关于python - 无法强制脚本重试五次,除非中间出现 200 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63721852/

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