urllib/urllib2默认的用户代理是Python-urllib/2.7,容易被检查到是爬的虫,所以我们要构造一个请求对象,要用到请求方法。
<强> 1。查看头信息强>
<强> 2。设置用户代理模仿浏览器访问数据强>
请求总共三个参数,除了必须要有url参数,还有下面两个:
数据(默认空):是伴随url提交的数据(比如要发布的数据),同时HTTP请求将从“GET"方式改为“POST"方式。
头(默认空):是一个字典,包含了需要发送的HTTP报头的键值对
<代码> # _ * _编码:utf - 8 _ * _ 进口urllib2 #用户代理是爬虫与反爬虫的第一步 ua_headers={“用户代理”:“Mozilla/5.0 (Windows NT 6.1;Win64;x64) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/60.0.3112.101 Safari/537.36 '} #通过urllib2.Request()方法构造一个请求对象 请求=urllib2.Request (“http://www.baidu.com/?标题=ua_headers) #向指定的url地址发送请求,并返回服务器响应的类文件对象 响应=urllib2.urlopen(请求) #服务器返回的类文件对象支持python文件对象的操作方法 # read()方法就是读取文件里的全部内容,返回字符串 html=response.read () 打印html代码> >之前<强> 3。选择随机的使用代理强>
为了防止封IP,先生成一个用户代理列表,然后从中随机选择一个
<代码> # _ * _编码:utf - 8 _ * _ 进口urllib2 进口随机 url=' http:/www.baidu.com/' #可以试用户代理列表,也可以是代理列表 ua_list=[" Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.1 (KHTML,像壁虎)Chrome/22.0.1207.1 Safari 537.1”, “Mozilla/5.0 (X11;横i686 2268.111.0) AppleWebKit/536.11 (KHTML,像壁虎)Chrome/20.0.1132.57 Safari 536.11”, “Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/536.6 (KHTML,像壁虎)Chrome/20.0.1092.0 Safari 536.6”, “Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML,像壁虎)Chrome/20.0.1090.0 Safari 536.6”, “Mozilla/5.0 (Windows NT 6.2;WOW64) AppleWebKit/537.1 (KHTML,像壁虎)Chrome/19.77.34.5 Safari 537.1”, “Mozilla/5.0 (X11;Linux x86_64) AppleWebKit/536.5 (KHTML,像壁虎)Chrome/19.0.1084.9 Safari 536.5”, “Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML,像壁虎)Chrome/19.0.1084.36 Safari 536.5”, “Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/536.3 (KHTML,像壁虎)Chrome/19.0.1063.0 Safari 536.3”, “Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML,像壁虎)Chrome/19.0.1063.0 Safari 536.3”, “Mozilla/5.0(麦金塔电脑;Intel Mac OS X 10 _8_0) AppleWebKit/536.3 (KHTML,像壁虎)Chrome/19.0.1063.0 Safari 536.3”, “Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML,像壁虎)Chrome/19.0.1062.0 Safari 536.3”, “Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/536.3 (KHTML,像壁虎)Chrome/19.0.1062.0 Safari 536.3”, “Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML,像壁虎)Chrome/19.0.1061.1 Safari 536.3”, “Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/536.3 (KHTML,像壁虎)Chrome/19.0.1061.1 Safari 536.3”, “Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML,像壁虎)Chrome/19.0.1061.1 Safari 536.3”, “Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML,像壁虎)Chrome/19.0.1061.0 Safari 536.3”, “Mozilla/5.0 (X11;Linux x86_64) AppleWebKit/535.24 (KHTML,像壁虎)Chrome/19.0.1055.1 Safari 535.24”, “Mozilla/5.0 (Windows NT 6.2;WOW64) AppleWebKit/535.24 (KHTML,像壁虎)Chrome/19.0.1055.1 Safari 535.24” ] #在用户代理列表中随机选择一个用户代理 user_agent=random.choice (ua_list) #构造一个请求 请求=urllib2.Request (url) # add_header()方法添加/修改一个HTTP报头 request.add_header(“用户代理”,user_agent) # get_header()获取一个已有报的HTTP头的值,注意只能第一个字母大写,后面的要小写 打印request.get_header(“用户代理”)代码><强> 4. urllib和urllib2的主要区别强>
urllib和urllib2都是接受URL请求的相关模块,但是提供了不同的功能,最显著的区别如下:
(1) urllib仅可以接受URL,不能创建,设置头的请求类实例;
(2)但是urllib提供urlencode()方法用来得到查询字符串的产生,而urllib2则没有(这是urllib和urllib2经常一起使用的主要原因)
(3)编码工作使用urllib的urlencode()函数,帮我们讲重点:价值这样的键值对转换成“键=值”这样的字符串,解码工作可以使用urllib的结束()
python爬取准备三urllib2模块