原文链接:静觅 » Python爬虫入门三之Urllib库的基本使用
1,什么是urllib2库?
urllib2是python的一个获取URLs的组件,通过urlopen函数的形式来提供了一个非常简单的接口,根据不同协议获取URLs的能力,urllib2提供了一个比较复杂的接口来处理情况,例如:基础验证,cookies,代理和其他。
我们分析代码:
response=urllib2.urlopen("http://www.baidu.com")
首先,我们调用的是urllib2库中的urlopen方法,传入了一个链接,协议是HTTP协议,同样我们可以把HTTP协议换成FTP协议,FILE,HTTPS等,只是代表一>种访问协议。
urlopen一般接受三个参数:1,url。2,data,即为访问URL时要传送的数据。3,timeout,即为超时时间。第二、三个参数可以采用默认,data默认为空,timeout默认为socket._GLOBAL_DEFAULT_TIMEOUT.第一个参数必须有的。
print response.read()
response对象有一个read()方法,用来获得链接网页中的所有内容。
注意:大多数时候,我们构造Request类的实例,传入上面的urlopen。构造Request时需要传入Url,Data等等内容。如以上代码可以改写为:
request=urllib2.Request("http://www.baidu.com")
response=urllib2.urlopen(request)
print response.read()
目前大多数情况下我们需要在访问时通过传递数据,意识目标网页做出响应。比如:登录注册
数据传递有两种方式:POST和GET
我们知道两者之间的区别是GET是通过链接来传递数据(参数),而POST是隐式的传递数据而不通过链接传递。
POST方式:
import urllib
import urllib2
value={"username":"1357200562@qq.com","password":"123"}
data=urllib.urlencode(value)
request=urllib2.Request("http://password.csdn.net....",data)
response=urllib2.urlopen(request)
print response.read()
有一些站点不喜欢被程序(非人为访问)访问,或者发送不同版本的内容到不同的浏览器上。默认的urllib2把自己作为“Python-urllib/x.y”(x和y是python主版本和次版本号)。 这个身份让站点感到迷惑,或者干脆不工作。而浏览器则不同,浏览器确认自己的身份是通过User-Agent头,当你创建一个请求对象,你就
可以给他一个包含头数据的字典。如下:
import urllib
import urllib2
url="http://...."
user-agent="Mozilla/4.0....."
values={"name":"bob","location":"pythontab","language":"Python"}
headers={"User-Agent":user-agent}
data=urllib.urlencode(values)
request=urllib2.Rquest(url,data,headers)
response=urllib2.urlopen(request)
print response.read()
GET方式:
import urllib
import urllib2
values={}
values["username"]="1357200562@qq.com"
values["password"]="123"
data=urllib.urlencode(values)
url="http://...."
user-agent="Mozilla/4.0...."
headers={"User-Agent":user-agent}
geturl=url+"?"+data
request=urllib2.Request(geturl,headers)
response=urllib2.urlopen(request)
print response.read()