怎么用python怎么生成随机数编写一个能随机生成20个3到7位随机字母组合的函数,求大佬

> Python入门学习:应用random函数随机生成HTTP请求headers信息
为什么抓取会收到限制
要采集百度数据,查询关键词排名等,因为短时间内发出太多的请求,会受到百度局域网异常访问屏蔽策略的限制。
出现以下错误信息:
要突破这样的限制,必须伪装成为真正的用户(真正用户大量搜索也会出现)访问,就能降低这样情况发生的概率。
举个栗子:
我们不做任何处理,直接使用Python的urllib.request.urlopen方法打开页面看看是什么情况。运行以下代码:
import urllib.request
res = urllib.request.urlopen('')
发生错误了,抓不到内容,我们用Fiddler抓包工具查看详细的请求信息,Python的请求信息非常简单,User-Agent信息是Python-urllib/3.3,这样就不是真正用户的请求信息。
如何查看http报文header消息
那真正的用户请求信息应该是什么样的呢?我们来真正访问以下百度,用fiddler抓包,没有fiddler也可以用Chrome浏览器的network查看。
如何构造Header报头消息的请求
那怎么伪装成真正的用户呢,首先我们要了解Python的urllib.request模块的相关函数,urlopen函数是无法传递header消息的:
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
要携带header消息,就要用的Request类:
class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
其中的headers字典就是我们需要构造和传递的了。我们只要了解使用的方法就好,先来构造一下header吧:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept':'text/q=0.9,*/*;q=0.8',
'Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding':'gzip',
'Connection':'close'
然后就使用Request类了,
req = urllib.request.Request(url, headers = headers)
接下来就再用urlopen方法请求页面,为了验证,我们将状态码打印出来:
res = urllib.request.urlopen('')
print(res.status)
我们用fiddler抓到的数据来看看,
header信息正常的和请求一起发松给服务器了。另外上面我们看到了有一个302的状态,因为百度现在全站启用了https协议,我们的情景会自动重定向到。
另外,查看了官方文档,还有一个函数可以携带header消息请求的,官方举栗子如下:
import urllib.request
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
opener.open('/')
光有一个UA还不够:
经过上面的代码,我们就能够被当做正常用户访问了,不过如果并发大量的请求还是要被禁封一段时间的,就需要切换不同的UA,随机暂停一下,那我们就要用的random模块了。先来看看代码吧
import random
def randHeader():
head_connection = ['Keep-Alive','close']
head_accept = ['text/html, application/xhtml+xml, */*']
head_accept_language = ['zh-CN,fr-FR;q=0.5','en-US,q=0.8,zh-Hans-CN;q=0.5,zh-Hq=0.3']
head_user_agent = ['Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko)',
'Mozilla/5.0 (W U; Windows NT 5.2) Gecko/ Firefox/3.0.1',
'Mozilla/5.0 (W U; Windows NT 5.1) Gecko/ Firefox/2.0.0.3',
'Mozilla/5.0 (W U; Windows NT 5.1) Gecko/ Firefox/1.5.0.12',
'Opera/9.27 (Windows NT 5.2; U; zh-cn)',
'Mozilla/5.0 (M PPC Mac OS X; U; en) Opera 8.0',
'Opera/8.0 (M PPC Mac OS X; U; en)',
'Mozilla/5.0 (W U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/ Firefox/2.0.0.12 Navigator/9.0.0.6',
'Mozilla/4.0 ( MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)',
'Mozilla/4.0 ( MSIE 8.0; Windows NT 6.1; Trident/4.0)',
'Mozilla/5.0 ( MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Maxthon/4.0.6.2000 Chrome/26.0.1410.43 Safari/537.1 ',
'Mozilla/5.0 ( MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; QQBrowser/7.3.)',
'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/ Firefox/21.0 ',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.92 Safari/537.1 LBBROWSER',
'Mozilla/5.0 ( MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BIDUBrowser 2.x)',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/3.0 Safari/536.11']
header = {
'Connection': head_connection[0],
'Accept': head_accept[0],
'Accept-Language': head_accept_language[1],
'User-Agent': head_user_agent[random.randrange(0,len(head_user_agent))]
return header
print(randHeader())
上面的代码定义了一个随机生成header的函数,返回一个header字典,根据字典的各个字段都定义了数组方便扩展,使用random.randrange()函数来生成数组的下标,这样就可以随机的下标,就随机产生Ua了。运行上面的代码就可以随机生成字典了。
总结,随机函数是个非常实用的函数,不管是什么语言都会用到,它让程序变得更加自然,为了能用Python写出一些SEO的应用,还是有许多理论知识要补课的,比如HTTP协议、Python库函数、Fiddler工具,基本的英文等。
Python库函数参考:https://docs.python.org/3/library/urllib.request.html#urllib.request.BaseHandler
转载请注明: &
or分享 (0)
如果你觉得这篇文章还有价值,对你有帮助,请支持我继续更新 !
关注微信公众号Python_Python遍历列表的四种方法 - 博客频道 - CSDN.NET
热爱技术的IT人
分类:Python语言
app_list = [, 8899]
for app_id in app_list:
print app_id
app_list = [, 8899]
for index,app_id in enumerate(app_list):
print index, app_id
方式三: 使用range()或xrange()
app_list = [, 8899]
for i in range(len(app_list)):
print i,app_list[i]
方式四: 使用iter()
app_list = [, 8899]
for app_id in iter(app_list):
print app_id
排名:第2670名
(0)(1)(17)(2)(0)(11)(5)(0)(17)(24)(16)(20)(3)(9)(6)(0)(12)(36)(12)(10)(12)(0)(5)(0)(2)(23)(1)(1)(0)(61)(32)(83)(12)(24)(19)(8)(5)(1)(34)(31)(0)(2)(50)(3)(1)(0)(4)(11)(3)(0)(2)(3)(17)(16)(0)(0)(0)(9)(30)(9)(0)(1)(1)(1)(2)(1)(2)(1)(7)(2)(1)(1)(1)(1)(2)(3)(0)(13)(1)(3)(11)(1)(1)玩蛇网提供最新Python编程技术信息以及Python资源下载!
您现在的位置:
用Python编写的一个计算生肖和星座的函数代码
这是我用编写的一个可以根据你的出生日期,算出你的属相和星作的。用Python编写的一个计算生肖和星座的函数代码,以前有人说过用mid函数计算星座,我是自己写的,看看我的代码如何。
def chinese_zodiac(year):
return u'猴鸡狗猪鼠牛虎兔龙蛇马羊'[year%12]
def zodiac(month, day):
n = (u'摩羯座',u'水瓶座',u'双鱼座',u'白羊座',u'金牛座',u'双子座',
u'巨蟹座',u'狮子座',u'处女座',u'天秤座',u'天蝎座',u'射手座')
d = ((1,20),(2,19),(3,21),(4,21),(5,21),(6,22),(7,23),(8,23),(9,23),(10,23),(11,23),(12,23))
return n[len(filter(lambda y:y&=(month,day), d))%12]
如果你喜欢自己动手写python代码,就要看思路 :利用datetime模块获取当前时间的年份,推断出生年份;之后再创建一个生肖的字典,,用出生年份减去参照年份发,把得到的数整除12的余数对应到字典中,就知道是什么生肖了。匹配星座也是同一个原理。
玩蛇网文章,转载请注明出处和文章网址:/code/c2692.html []
我要小额赞助,鼓励作者写出更好的教程↓↓↓】
玩蛇网Python QQ群,欢迎加入: ①
修订日期:日 - 15时49分58秒
发布自玩蛇网
我要分享到:
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
必知PYTHON教程
Must Know PYTHON Tutorials
必知PYTHON模块
Must Know PYTHON Modules
最新内容 NEWS
图文精华 RECOMMEND
热点文章 HOT
Navigation
玩蛇网Python之家,简称玩蛇网,是一个致力于推广python编程技术、程序源码资源的个人网站。站长 斯巴达 是一位 长期关注 软件、互联网、服务器与各种开发技术的Python爱好者,建立本站旨在与更多朋友分享派森编程的乐趣!
本站团队成员: 斯巴达
欢迎加入团队...}

我要回帖

更多关于 python 随机生成数字 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信