python爬虫学习二: urllib2模块的学习
1、urllib2介绍
urllib2是使用各种协议完成打开url的一个扩展包。做简单的使用方法是调用uropen方法。
import urllib2
content_stream = urllib2.urlopen('http://www.baidu.com/')
content = content_stream.read()
print content
即可以接受一个字符串类型的URL地址,或者一个Request对象。然后打开这个URL,返回结果为一个像文件对象
一样的对象。
一般我们直接调用urllib2中的urlopen()就是表示去调用build_opener()方法,然后用build_opener()方法返回
的类的对象去调用该对象的open方法。
2、urllib2使用细节:
a、Proxy的设置
urllib2默认会使用环境变量http_proxy来设置HTTP Proxy。如果想要在程序中明确的控制Proxy而不受环境变量的
影响,可以使用它。
import urllib2
enable_proxy =True
proxy_handler = urllib2.ProxyHandler({"http":"http://some-proxy.com:8080"})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
opener = urllib2.build_opener(proxy_handler)
else:
opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)//install_opener()改变了全局的设置,若不想改变全局,需要用opener的open
方法。
b、Timeout设置
在老版本的python中,要设置timeout值,必须更改Socket的全局Timeout值。
import socket
import urllib2
socket.setdefaulttimeout(10)
urllib2.socket.setdefaulttimeout(10)//这是两种方式,都可以
python2.6以后,超时可以通过urllib2.urlopen()的timeout参数直接设置。
import urllib2
response = urllib2.urlopen('http://www.baidu.com/',timeout = 10)
c、在HTTP Request中加入特定的Header
import urllib2
request = urllib2.Request(url)
request.add_header('user-agent','fake-client')
response = urllib2.urlopen(request)
d、cookie
urllib2对cookie的处理也是自动的。如果需要得到某个cookie项的值,可以:
import urllib2
import cookielib
cookie = cookielib.CookieJar()
opener = urllib2.build_opener.HTTPCookieProcess(cookie)
response = opener.open('http://www.baidu.com/')
for item in cookie:
if item.name == 'some_cookie_item_name':
print item.value
e、得到HTTP的返回码
需要检查异常对象的code属性。
import urllib2
try:
resopnse = urllib2.urlopen('http://www.baidu.com')
except urllib2.HTTPError,e:
print e.code
3、urlopen的两个很有用的方法,geturl()和info()
a、geturl()
返回一个真实的URL,因为urlopen或许会有重定向,获取到URL或许跟请求url不同。
b、info():
返回对象的字典对象,该字典描述了获取的页面情况。通常是服务器发送的特定头headers。目前是httplib.HTTPMessage
实例。经典的headers包含"Content-length","Content-type",和其他内容。
4、表单的处理:
有的网页需要登录才能看到,需要填表,表单怎么填?
首先利用工具截取索要填表的内容。一般可以利用Firefox+httpfox插件来看看自己到底发送了些什么包。
import urllib2
import urllib
postdata = urllib.urlencode({
'username':'qester',
'passwd':'*******',
'login_summit':'登录'
})
req = urllib2.Request(
url = 'http://secure.baidu.com/sigin',
data = postdata,
)
result = urllib2.urlopen(req)
print result.read()
转载于:https://blog.51cto.com/jx610/1711466