如何使用 Python 请求来伪造浏览器访问并生成用户代理?

我想从 这个网站的内容。

如果我使用像 Firefox 或 Chrome 这样的浏览器,我可以得到我想要的真正的网页,但是如果我使用 Python 请求包(或者 wget命令)来得到它,它会返回一个完全不同的 HTML 页面。

我以为网站的开发者已经为此做了一些模块。

提问

如何使用 python 请求或命令 wget 伪造浏览器访问?

312478 次浏览

提供 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)

仅供参考,下面是不同浏览器的 User-Agent 字符串列表:


顺便说一句,有一个非常有用的第三方软件包,名为 假用户代理,它提供了一个很好的用户代理抽象层:

假用户代理

最新的简单的用户代理虚假与现实世界的数据库

演示:

>>> 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'

尝试这样做,使用火狐作为假的 用户代理(此外,这是一个很好的启动脚本网页抓取与使用 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"

我用的是 假的用户代理

使用方法:

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]>

答案的根源在于,提问者需要一个 JavaScript 解释器来得到他们想要的东西。我发现,我能够得到所有的信息,我想在一个网站 json 之前,由 JavaScript 解释。这节省了我大量的时间在什么将解析 HTML 希望每个网页是在相同的格式。

因此,当您使用请求从网站获得响应时,请仔细查看 html/text,因为您可能会发现页脚中的 javascript JSON 已经准备好被解析。

我有一个类似的问题,但我不能使用 fake_useragent模块内的 UserAgent类。我在码头集装箱里运行代码

import requests
import ujson
import random


response = requests.get('https://fake-useragent.herokuapp.com/browsers/0.1.11')
agents_dictionary = ujson.loads(response.text)
random_browser_number = str(random.randint(0, len(agents_dictionary['randomize'])))
random_browser = agents_dictionary['randomize'][random_browser_number]
user_agents_list = agents_dictionary['browsers'][random_browser]
user_agent = user_agents_list[random.randint(0, len(user_agents_list)-1)]

我的目标是模块中使用的端点。这个解决方案仍然给了我一个随机用户代理,但是端点上的数据结构可能会发生变化。

回答我

您需要创建一个带有正确格式化的 User agent String 的头,它服务器用于通信客户机-服务器。

您可以检查自己的用户代理 给你

例子

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0

第三方软件包 User _ agent 0.1.9

我发现这个模块使用起来非常简单,在一行代码中它随机生成一个 User agent 字符串。

from user_agent import generate_user_agent, generate_navigator
from pprint import pprint


print(generate_user_agent())
# 'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.3; Win64; x64)'


print(generate_user_agent(os=('mac', 'linux')))
# 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:36.0) Gecko/20100101 Firefox/36.0'


pprint(generate_navigator())


# {'app_code_name': 'Mozilla',
#  'app_name': 'Netscape',
#  'appversion': '5.0',
#  'name': 'firefox',
#  'os': 'linux',
#  'oscpu': 'Linux i686 on x86_64',
#  'platform': 'Linux i686 on x86_64',
#  'user_agent': 'Mozilla/5.0 (X11; Ubuntu; Linux i686 on x86_64; rv:41.0) Gecko/20100101 Firefox/41.0',
#  'version': '41.0'}


pprint(generate_navigator_js())


# {'appCodeName': 'Mozilla',
#  'appName': 'Netscape',
#  'appVersion': '38.0',
#  'platform': 'MacIntel',
#  'userAgent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:38.0) Gecko/20100101 Firefox/38.0'}

这就是我如何使用一个随机的用户代理从近1000个假的用户代理列表

from random_user_agent.user_agent import UserAgent
from random_user_agent.params import SoftwareName, OperatingSystem
software_names = [SoftwareName.ANDROID.value]
operating_systems = [OperatingSystem.WINDOWS.value, OperatingSystem.LINUX.value, OperatingSystem.MAC.value]


user_agent_rotator = UserAgent(software_names=software_names, operating_systems=operating_systems, limit=1000)


# Get list of user agents.
user_agents = user_agent_rotator.get_user_agents()


user_agent_random = user_agent_rotator.get_random_user_agent()

例子

print(user_agent_random)

Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML,like Gecko) Chrome/87.0.4280.88 Safari/537.36

更多详情请访问此 链接

我使用 Pyuser _ agent。这个包使用获取用户代理

import pyuser_agent
import requests


ua = pyuser_agent.UA()


headers = {
"User-Agent" : ua.random
}
print(headers)


uri = "https://github.com/THAVASIGTI/"
res = requests.request("GET",uri,headers=headers)
print(res)

通话完毕

{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN) AppleWebKit/533+ (KHTML, like Gecko)'}
<Response [200]>

用户代理是可以的,但是他想获取一个 JavaScript 站点。我们可以使用 selenium,但是设置和维护非常麻烦,所以获取一个 JavaScript 渲染页面的最佳方法是 request _ html 模块。它是已知请求模块的超集。安装使用 pip

pip install requests-html

并获取呈现的 JavaScript 页面使用

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://python.org/')

希望能有所帮助。它使用木偶渲染 javascript,也下载 chrome,但你不必担心一切都发生在引擎盖下。你会得到最终的结果。