pythonurllib2请求
① python2.7 怎样集成 urllib2
python最恶心的地方就在于它的版本和配置了,特别是安装第三方包的时候经常会出现莫名其妙的错误,又不懂。
所以只能不断的切来切去的。
今天学习python爬虫,其中Python2.7使用了urllib和urllib2,python3的urllib结合了py2.7的两部分。但是电脑不知为什么又安装不了py3的urllib,好烦。出现下面的错误。
python2.7和python3主要是模块的位置变化地方较多。
其中python2.7的urllib和urllib2的区别一下:
urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以通过urllib模块伪装你的User Agent字符串等(伪装浏览器)。
urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。
urllib2模块比较优势的地方是urlliburllib2.urlopen可以接受Request对象作为参数,从而可以控制HTTP Request的header部。
但是urllib.urlretrieve函数以及urllib.quote等一系列quote和unquote功能没有被加入urllib2中,因此有时也需要urllib的辅助。
② python中ihttplib,httplib2,urllib2在http请求时哪个更快
= time.time()
httplib2.Http().request(url)
t6 = time.time()
http2 = t6-t5
t3 = time.time()
req = httplib.HTTPConnection(com')
req.request('GET', '/')
t4 = time.time()
http = t4-t3
t1 = time.time()
urllib2.urlopen(url)
t2 = time.time()
urll = t2-t1
print http2
print httpprint urll
结果:
0.156999826431
0.0150001049042
0.0780000686646
我写了如上代码测试的时候通常都是httplib的速度较快.实际过程中也是如此吗?还是我测试的不对。还有head请求与get请求,为什么head请求测试的时候感觉并没有节省时间呢。我想写爬虫程序,希望速度能更快。
不知道你做了多少次重复的测试呢,单凭一次的测试结果不说明任何问题,我觉得有以下几点可以说明
抓取网页的时间很多取决于http连接建立和数据传输的时间,所以网络状况的影响很大,如果每次都是重新建立连接,和采用什么python库关系不大
urllib3可以复用tcp连接来进行多次http请求,所以可以省掉重新建立tcp的时间;requests会检查是否安装了urllib3。
head/get请求的时间取决于你请求的server端是否对这两种请求做了不同的处理,如果没有区分的话,两种请求也就没有区别
③ python requests get方式怎么设置请求头
Header可以通过Request提供的.add_header()方法进行添加,示例代码如下:
123456789101112#-*-coding:utf-8-*-
importurllib2importurlliburl='http://ah.example.com'half_url=u'/servlet/av/jd?
ai=782&ji=2624743&sn=I'#构造get请求req=urllib2.
Request(url+half_url.
encode('utf-8'))#添加headerreq.add_header('AcceptEncoding','gzip,deflate')req.
add_header('User-Agent','Mozilla/5.0')response=urllib2.
urlopen(req)
printresponse.
④ python 爬虫时,urllib2.HTTPError:HTTP Error 502:Bad Gateway是什么原因怎么解决
可能是那个网站阻止了这类的访问,只要在请求中加上伪装成浏览器的header就可以了,比如:
headers={
'User-Agent':'Mozilla/5.0(Windows;U;WindowsNT6.1;en-US;rv:1.9.1.6)Gecko/20091201Firefox/3.5.6'
}
req=urllib2.Request(
url="http://www.qiushike.com/imgrank"
,
headers=headers
)
myResponse=urllib2.urlopen(req)
⑤ python urllib2进行网页源代码扒取时,出现urllib2.HTTPError: HTTP Error 250: Forbidden问题
HTTP请求的Headers包含浏览器的信息、所使用的语言、请求的主机、COOKIE等信息。
其中最重要的两项是浏览器的信息User-Agent,如果请求中没有User-Agent,网站会认为不是人在浏览器的请求,是恶意攻击
对于需要登录的网站,请求中往往需要COOKIE来验证用户,来获取打开某些网站的权限。
使用firefox浏览器的开发者工具箱>网络选项,可以很容易获取User-Agent等头信息
headers={"User-Agent":"Mozilla/5.0Firefox/35.0",
"Cookie":"BDUSS=AAAAAAAAAAAAAAAAAAAAAAAA",}
request=urllib2.Request(url,postData,headers=headers)
response=urllib2.urlopen(request)