如何使用Python请求来伪造浏览器访问?
我想从下面的网站获取内容。 如果我使用Firefox或Chrome浏览器,我可以得到我想要的真实网页,但如果使用Python请求包(或wget
命令)来获取它,它将返回一个完全不同的HTML页面。 我以为网站的开发者为此做了一些阻断,所以问题是:
如何通过使用python请求或命令wget来伪造浏览器访问?
http://www.ichangtou.com/#company:data_000008.html
提供一个User-Agent
标题 :
import requests url = 'http://www.ichangtou.com/#company:data_000008.html' headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} response = requests.get(url, headers=headers) print(response.content)
仅供参考,以下是不同浏览器的用户代理string列表:
- 所有浏览器的列表
另外还有一个非常有用的第三方软件包叫做fake-useragent ,它提供了一个比用户代理更好的抽象层:
假的UserAgent
现实世界的数据库中最新的简单的useragent faker
演示:
>>> from fake_useragent import UserAgent >>> ua = UserAgent() >>> ua.chrome u'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36' >>> ua.random u'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36'
如果这个问题仍然有效
我用假的UserAgent
如何使用:
from fake_useragent import UserAgent import requests ua = UserAgent() print(ua.chrome) header = {'User-Agent':str(ua.chrome)} print(header) url = "https://www.hybrid-analysis.com/recent-submissions?filter=file&sort=^timestamp" htmlContent = requests.get(url, headers=header) print(htmlContent)
输出:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17 {'User-Agent': 'Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'} <Response [200]>
尝试这样做,使用Firefox作为假的用户代理 (此外,这是一个很好的启动脚本,使用Cookie进行网页抓取):
#!/usr/bin/env python2 # -*- coding: utf8 -*- # vim:ts=4:sw=4 import cookielib, urllib2, sys def doIt(uri): cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) page = opener.open(uri) page.addheaders = [('User-agent', 'Mozilla/5.0')] print page.read() for i in sys.argv[1:]: doIt(i)
用法:
python script.py "http://www.ichangtou.com/#company:data_000008.html"