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
