正常下载:
pip install Faker
正常使用:
from faker import Faker
f = Faker(locale='zh_CN')
headers={'User-Agent': f.chrome()}
问题:
首先,手机端的ua 和 pc端的ua是有区别的;
如果请求小程序或App,随机到的却是PC端的ua,而且对方做了验证的话,大概率请求失败。
那为什么不能指定入参,来获取特定平台ua呢?
1.定位faker包位置
import faker
print(faker.__path__)
# 输出:['/Users/mk/opt/miniconda3/lib/python3.8/site-packages/faker']
2.定位源码
3.修改__inint__.py文件
vim /Users/mk/opt/miniconda3/lib/python3.8/site-packages/faker/providers/user_agent/__init__.py
4.用下面的代码替换Chrome函数
很简单,就是加了一个 is_pc=True 入参,默认返回PC端ua;
如修改为 is_pc 为 False 参,则返回手机端ua。
def chrome(self, version_from=13, version_to=63, build_from=800, build_to=899, is_pc=True):
saf = '{}.{}'.format(self.generator.random.randint(531, 536), self.generator.random.randint(0, 2))
bld = self.lexify(self.numerify('##?###'), string.ascii_uppercase)
tmplt = '({0}) AppleWebKit/{1} (KHTML, like Gecko) Chrome/{2}.0.{3}.0 Safari/{4}'
tmplt_ios = '({0}) AppleWebKit/{1} (KHTML, like Gecko) CriOS/{2}.0.{3}.0 Mobile/{4} Safari/{1}'
if is_pc:
platforms = (
tmplt.format(self.linux_platform_token(),
saf,
self.generator.random.randint(version_from, version_to),
self.generator.random.randint(build_from, build_to),
saf),
tmplt.format(self.windows_platform_token(),
saf,
self.generator.random.randint(version_from, version_to),
self.generator.random.randint(build_from, build_to),
saf),
tmplt.format(self.mac_platform_token(),
saf,
self.generator.random.randint(version_from, version_to),
self.generator.random.randint(build_from, build_to),
saf),
)
else:
platforms = (
tmplt.format('Linux; {}'.format(self.android_platform_token()),
saf,
self.generator.random.randint(version_from, version_to),
self.generator.random.randint(build_from, build_to),
saf),
tmplt_ios.format(self.ios_platform_token(),
saf,
self.generator.random.randint(version_from, version_to),
self.generator.random.randint(build_from, build_to),
bld),
)
return 'Mozilla/5.0 ' + self.random_element(platforms)
5.修改后的使用方法
from faker import Faker
f = Faker(locale='zh_CN')
# 返回手机端ua
headers={'User-Agent': f.chrome(is_pc=False)}
# 返回PC端ua
headers={'User-Agent': f.chrome(is_pc=True)}
这样,在保持随机ua的同时,也可以指定平台ua。