Python爬虫之防止被识别

对于暴露api接口的网站,只需直接解析json数据即可。为了防止被服务器识别,可模拟浏览器,并随机改变ua,代码如下:

def request_data(url):
	try:
		# 关闭不必要连接
		requests.DEFAULT_RETRIES = 5
		s = requests.session()
		s.keep_alive = False
		# proxy = {"http": "xxfb.mwr.cn:8080"}
		user_agent_list = [
			"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
			"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",
			"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36",
			"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36",
			"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36",
			"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36",
			"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
			"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15"
		]
		
		headers = {
			User-Agent: ,
			Content-Type: application/json;charset=UTF-8,
			Request Method: GET,
			Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
		}
		headers[User-Agent] = random.choice(user_agent_list)
		req = requests.get(url, headers=headers, verify=False)
except requests.exceptions.RequestException as e:
	print(e)
except ReadTimeout:
	print(timeOut)
except HTTPError:
	print(httpeError)
except RequestException:
	print(reqerror)
# 获取请求状态码 200为正常
if (req.status_code == 200):
	# print(req.status_code)
	# 获取相应内容
	print(API请求成功...)
	req_jason = req.json()  # 获取数据
else:
	print(url+" API请求请求失败!")
return req_jason
经验分享 程序员 微信小程序 职场和发展