老铁们,大家好,相信还有很多朋友对于怎么扒视频网站的源码分享和怎么把网站视频扒下来代码的相关问题不太懂,没关系,今天就由我来为大家分享分享怎么扒视频网站的源码分享以及怎么把网站视频扒下来代码的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
在做程序开发的时候,我们经常会用到一些测试数据,相信大多数同学是这么来造测试数据的:
中枪的请举手。
关注,转发,私信小编“01”即可免费领取Python学习资料!
不仅要自己手动敲这些测试数据,还敲的这么假。那有啥办法呢?难不成有什么东西能自动给我造点以假乱真的数据啊?你别说,还真有!
在Python中有个神库,叫做Faker,它可以自动帮我们来生成各种各样的看起来很真的”假“数据,让我们来看看吧!
安装
首先让我们来看看这个库的安装方法,实际上装起来非常简单,使用pip安装即可,Python3版本的安装命令如下:
pip3installfaker\n
安装好了之后,我们使用最简单的例子来生成几个假数据试试:
首先我们从faker这个包里面导入一个Faker类,然后将其实例化为faker对象,依次调用它的name、address、text方法,看下运行效果:
看到这里给我们生成了看起来很真的英文姓名、地址、长文本。
但我们是中国人,我们肯定想要生成中文的吧,不用担心,这个库对非常多的语言都有支持,当然也包括中文了,具体的支持的语言列表可以见:https://faker.readthedocs.io/en/master/locales.html。
这里几个比较常见的语言代号列一下:
简体中文:zh_CN繁体中文:zh_TW美国英文:en_US英国英文:en_GB德文:de_DE日文:ja_JP韩文:ko_KR法文:fr_FR
那么如果要生成中文,只需要在Faker类的第一个参数传入对应的语言代号即可,例如简体中文就传入zh_CN,所以上面的代码改写如下:
fromfakerimportFaker\n\nfaker=Faker(‘zh_CN’)\nprint(‘name:’,faker.name())\nprint(‘address:’,faker.address())\nprint(‘text:’,faker.text())\n
运行结果如下:
name:何琳\naddress:宁夏回族自治区六盘水县南溪北镇街f座912311\ntext:经营软件积分开始次数专业.美国留言一种管理人民解决两个.支持只有地方一切.\n文化目前东西的是不过所以.系统觉得这种为什一下他们.时候以及这样继续是一状态威望.\n网站密码情况.问题一点那个还是.其实过程详细.\n中国历史环境电话规定.经验上海控制不要生活.朋友运行项目我们.\n以后今天那些使用免费国家加入但是.内容简介空间次数最大一个.日期通过得到日本北京.\n
可以看到一段中文的姓名、地址、长文本便生成了。看起来地址是省份、地级市、县级市、街道是随机组合的,文本也是一些随机的词组合而成的,但其实这样已经比文章一开头列的测试数据强太多了。
上面的代码每次运行得到的结果都是不同的,因为生成的结果都是随机组合而成的。
Provider
接下来让我们详细看下faker可以都生成什么类型的数据,具体的可用API可以看https://faker.readthedocs.io/en/master/locales/zh_CN.html,这里面列出来了可用的所有方法。
但打开之后可以发现,这里面多了一个Provider对象,那么这个Provider是怎么一回事呢?
实际上这个faker库在设计上,为了解耦,将Provider对象做成了Faker对象的”插件“。Faker可以添加一个个Provider对象,Provider对象为Faker对象提供了生成某项数据的核心实现。就相当于Faker对象是一个生成器,它的生成功能依赖于什么呢?依赖于Provider,是Provider提供给了Faker对象生成某项数据的能力。
正是因为Faker对象内置了一些Provider对象,Faker对象才可以生成刚才所要求的姓名、地址和文本。
那么这时候我们肯定就很好奇了,既然Faker对象有生成数据的能力,那么它一定内置了一些默认的Provider对象,下面我们来打印看一下:
fromfakerimportFaker\n\nfaker=Faker(‘zh_CN’)\nprint(faker.providers)\n
运行结果如下:
[<faker.providers.user_agent.Providerobjectat0x10249de48>,<faker.providers.ssn.zh_CN.Providerobjectat0x10249dc18>,<faker.providers.python.Providerobjectat0x10249dd68>,<faker.providers.profile.Providerobjectat0x10249dcc0>,<faker.providers.phone_number.zh_CN.Providerobjectat0x10249dc88>,<faker.providers.person.zh_CN.Providerobjectat0x10249de80>,<faker.providers.misc.Providerobjectat0x10249df60>,<faker.providers.lorem.zh_CN.Providerobjectat0x10249dc50>,<faker.providers.job.zh_CN.Providerobjectat0x10249de10>,<faker.providers.isbn.Providerobjectat0x10249c6d8>,<faker.providers.internet.zh_CN.Providerobjectat0x10249c828>,<faker.providers.geo.en_US.Providerobjectat0x102484748>,<faker.providers.file.Providerobjectat0x102484828>,<faker.providers.date_time.en_US.Providerobjectat0x1023789e8>,<faker.providers.currency.Providerobjectat0x102484780>,<faker.providers.credit_card.Providerobjectat0x1024845f8>,<faker.providers.company.zh_CN.Providerobjectat0x102499ef0>,<faker.providers.color.en_US.Providerobjectat0x1023532e8>,<faker.providers.barcode.Providerobjectat0x101cb6d30>,<faker.providers.bank.en_GB.Providerobjectat0x102378f98>,<faker.providers.automotive.en_US.Providerobjectat0x1017a5c50>,<faker.providers.address.zh_CN.Providerobjectat0x101787c18>]\n
还真不少,通过名字可以看到有user_agent、phone_number、isbn、credit_card等Provider,其中具有语言差异化的Provider还单独区分了语言,比如phone_number代表电话号码,这个不同语言的不同,所以这里就又分了一层zh_CN,作了语言的区分。
这样一来,通用的Provider就直接处在某个Provider类别的模块中,具有语言差异的Provider就又根据不同的语言进一步划分了模块,设计上非常科学,易扩展又不冗余。
知道了Faker具有这么多Provider之后,我们来看看刚才调用的name、address等方法又和Provider有什么关系呢?
我们将name、address、text等方法打印一下看看:
fromfakerimportFaker\n\nfaker=Faker(‘zh_CN’)\nprint(‘name:’,faker.name)\nprint(‘address:’,faker.address)\nprint(‘text:’,faker.text)\n
注意这里没有调用,而是直接打印了这三个方法,这样可以直接输出方法的对象形式的描述,结果如下:
name:<boundmethodProvider.nameof<faker.providers.person.zh_CN.Providerobjectat0x10f6dea58>>\naddress:<boundmethodProvider.addressof<faker.providers.address.zh_CN.Providerobjectat0x10e9e6cf8>>\ntext:<boundmethodProvider.textof<faker.providers.lorem.zh_CN.Providerobjectat0x10f6dfda0>>\n
恍然大悟,原来我们调用的方法就是Faker对象调用的Provider里面的对应方法,比如name就是faker.providers.person.zhCN.Provider里面的name方法,二者是一致的,我们扒一扒源码验证下,源码在:[https://github.com/joke2k/faker/blob/master/faker/providers/person/__init_.py](https://github.com/joke2k/faker/blob/master/faker/providers/person/__init__.py),果不其然,里面定义了name方法,然后Faker动态地将这个方法引入进来了,就可以使用了。
方法列举
既然有这么多Provider,下面我们再详细地看看还有哪些常用的方法吧,下面进行一部分简单的梳理,参考来源文档地址为:https://faker.readthedocs.io/en/master/providers.html。
Address
Address,用于生成一些和地址相关的数据,如地址、城市、邮政编码、街道等内容,用法如下:
Color
Color,用于生成和颜色相关的数据,如HEX、RGB、RGBA等格式的颜色,用法如下:
Company
Company,用于生成公司相关数据,如公司名、公司前缀、公司后缀等内容,用法如下:
CreditCard
CreditCard,用于生成信用卡相关数据,如过期时间、银行卡号、安全码等内容,用法如下:
DateTime
DateTime,用于生成时间相关数据,如年份、月份、星期、出生日期等内容,可以返回datetime类型的数据,用法如下:
File
File,用于生成文件和文件路径相关的数据,包括文件扩展名、文件路径、MIME_TYPE、磁盘分区等内容,用法如下:
Geo
Geo,用于生成和地理位置相关的数据,包括经纬度,时区等等信息,用法如下:
Internet
Internet,用于生成和互联网相关的数据,包括随机电子邮箱、域名、IP地址、URL、用户名、后缀名等内容,用法如下:
ob
Job,用于生成和职业相关的数据,用法如下:
faker.job()\n#’烫工’\n
Lorem
Lorem,用于生成一些假文字数据,包括句子、自然段、长文本、关键词等,另外可以传入不同的参数来控制生成的长度,用法如下:
在这里每个方法的参数是不同的,具体的参数解释可以见源代码每个方法的注释:https://github.com/joke2k/faker/blob/master/faker/providers/lorem/__init__.py,
Misc
Misc,用于生成生成一些混淆数据,比如密码、sha1、sha256、md5等加密后的内容,用法如下:
Person
Person,用于生成和人名相关的数据,包括姓氏、名字、全名、英文名等内容,还能区分男女名字,用法如下:
User-Agent
User-Agent,用于生成和浏览器User-Agent相关的内容,可以定制各种浏览器,还可以传入版本信息来控制生成的内容,用法如下:
以上仅仅列了一部分,还有更多的功能大家可以查看官方文档的内容,链接为:https://faker.readthedocs.io/en/master/locales/zh_CN.html。
其他Provider
另外还有一些社区贡献的Provider,如WiFi、微服务相关的,大家可以查看文档的说明,另外需要额外安装这些扩展包并自行添加Provider,文档见:https://faker.readthedocs.io/en/master/communityproviders.html。
添加Provider需要调用add_provider方法,用法示例如下:
fromfakerimportFaker\nfromfaker.providersimportinternet\n\nfaker=Faker()\nfaker.add_provider(internet)\nprint(faker.ipv4_private())\n
还有更多的内容大家可以参考官方文档,链接:https://faker.readthedocs.io/。
OK,本文到此结束,希望对大家有所帮助。