Python クローラーが例外処理をスキップする

Python クローラーが例外処理をスキップする

最近、いくつかの写真をクロールするためにクローラーを使用する必要がありますが、次のようなエラーが頻繁に発生します。

requests.exceptions.ConnectionError: HTTPConnectionPool(host='www.xxxxxx.com', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0334D290>: Failed to establish a new connection: [WinError 10060]
//或者下面这个报错
urllib.error.HTTPError: HTTP Error 403: Forbidden

アプローチ

実は、ネットワーク接続が不安定だったり、Webサイトに攻撃と誤認されて強制的に接続を切断されたりして、クローラープログラムが動かなくなってしまうことがあるのですが、例外処理を使って動かし続ける方法として、以下は私自身が実践した方法です。エラーが発生した後:

import requests
import time
import json
from tqdm import tqdm

url = 'https://www.xxxx.com' #需求爬取的url

for item in tqdm(items): # items是需要爬取的list,tqdm是一个简易进度条,不想看进度条可以直接for item in items:
	From_data = {
    
    'text': item} # 传入requests的数据
	while True: # 相当于一直请求,直到成功后break
		try:
			response = requests.post(url, data=From_data) # 如果这个请求失败,那么并不会运行break,将运行except中的代码
			break # 能运行到这一步说明请求成功,可以跳出循环了
		except:
			time.sleep(1) # 暂停1秒,之后回到while True继续请求
			print('---------sleep----------')
	content = json.loads(response.text)# 跳出循环后对得到的数据处理

要約すると、 while True と例外を使用すると、実行が継続されず、成功するまで継続的なリクエストのサイクルが形成され、同時にエラー レポートが消費され、プログラムが中断されず、1 秒間スリープする必要がなくなります。毎秒秒、理論的にはより速くスピードアップします。

独自のクローラーに同様の変更を加えることができます。一般的な構造は次のとおりです。リクエストとデータ処理を独自のものに置き換えるだけです。

for item in items: 
	while True:
		try:
			response = requests.post(url, data=From_data) #请求
			break 
		except:
			time.sleep(1) 
			print('---------sleep----------')
	content = json.loads(response.text)# 对得到的数据处理

おすすめ

転載: blog.csdn.net/qq_45551930/article/details/119512630