如何随机获取带有最新浏览器版本的用户代理?

6

fake_useragent包可以随机生成用户代理:

from fake_useragent import UserAgent

ua = UserAgent()
user_agent = ua.random

有时生成的用户代理会使用过时的浏览器版本,而一些网站不接受此类代理。是否有办法只生成最新版本的浏览器用户代理?


你可以直接编辑缓存文件。 - Mad Physicist
ua.data['browsers'] 中删除特定的用户代理,这样做是否可行? - Jarad
2
标记为重复的是错误的,因为它是一个不同的问题。 - Felix
1个回答

4
你可以进行以下操作:
from fake_useragent import UserAgent
import random
import re

def grp(pat, txt):
    r = re.search(pat, txt)
    return r.group(0) if r else '&'

ua = UserAgent()
browsers = {
    'chrome': r'Chrome/[^ ]+',
    'safari': r'AppleWebKit/[^ ]+',
    'opera': r'Opera\s.+$',
    'firefox': r'Firefox/.+$',
    'internetexplorer': r'Trident/[^;]+',
}

for k, v in browsers.items():
    print(sorted(ua.data_browsers[k], key=lambda a: grp(v, a))[-1])

脚本的输出为:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A
Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1
Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0;  rv:11.0) like Gecko

请注意,grp函数是从这个答案中公然盗用的。
如果您只想选择一个浏览器,就像您所要求的那样,这将在遵守项目自述文件中列出的概率的同时随机选择。
browser = random.choice(ua.data_randomize)
print(sorted(ua.data_browsers[browser], key=lambda a: grp(browsers[browser], a))[-1])

这个方法只能生成5个用户代理。是否可能生成更多? - Mykola Zotko
你可以将我帖子中的最后两行代码封装在一个函数中,然后多次调用它。 - Felix
我询问关于唯一用户代理。您的脚本将始终生成上述5个唯一用户代理之一,无论您调用多少次该函数都不会改变。 - Mykola Zotko
1
你问道:“有没有办法只生成最新的浏览器版本用户代理?” 当然,这会针对每个浏览器产生最新的浏览器版本。我希望这可以解释为什么不可能有多个浏览器版本是最新版本的原因,因为只有一个单一版本才能是最新版本。如果您想知道其他内容,也许您应该重新表达问题。 - Felix
我认为应该有更多。例如在Windows、Mac和Linux上可以运行Chrome、Safari和Firefox,至少可以获得9个用户代理。但是看起来fake_useragent模块的用户代理数量有限,其中大部分浏览器版本已经过时。 - Mykola Zotko
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接