url
,data
,timeout
。cookielib
模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar
、FileCookieJar
、MozillaCookieJar
、LWPCookieJar
。1)获取Cookie,并保存到CookieJar()对象中
# urllib2_cookielibtest1.py
import urllib2
import cookielib
# 构建一个CookieJar对象实例来保存cookie
cookiejar = cookielib.CookieJar()
# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler=urllib2.HTTPCookieProcessor(cookiejar)
# 通过 build_opener() 来构建opener
opener = urllib2.build_opener(handler)
# 4. 以get方法访问页面,访问之后会自动保存cookie到cookiejar中
opener.open("http://www.baidu.com")
## 可以按标准格式将保存的Cookie打印出来
cookieStr = ""
for item in cookiejar:
cookieStr = cookieStr + item.name + "=" + item.value + ";"
## 舍去最后一位的分号
print cookieStr[:-1]
2) 访问网站获得cookie,并把获得的cookie保存在cookie文件中
# urllib2_cookielibtest2.py
import cookielib
import urllib2
# 保存cookie的本地磁盘文件名
filename = 'cookie.txt'
# 声明一个MozillaCookieJar(有save实现)对象实例来保存cookie,之后写入文件
cookiejar = cookielib.MozillaCookieJar(filename)
# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler = urllib2.HTTPCookieProcessor(cookiejar)
# 通过 build_opener() 来构建opener
opener = urllib2.build_opener(handler)
# 创建一个请求,原理同urllib2的urlopen
response = opener.open("http://www.baidu.com")
# 保存cookie到本地文件
cookiejar.save()
3)从文件中获取cookies,做为请求的一部分去访问
# urllib2_cookielibtest2.py
import cookielib
import urllib2
# 创建MozillaCookieJar(有load实现)实例对象
cookiejar = cookielib.MozillaCookieJar()
# 从文件中读取cookie内容到变量
cookie.load('cookie.txt')
# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler = urllib2.HTTPCookieProcessor(cookiejar)
# 通过 build_opener() 来构建opener
opener = urllib2.build_opener(handler)
response = opener.open("http://www.baidu.com")
- URLError
import urllib2
requset = urllib2.Request('http://www.ajkfhafwjqh.com')
try:
urllib2.urlopen(request, timeout=5)
except urllib2.URLError, err:
print err
HTTPError是URLError的子类,我们发出一个请求时,服务器上都会对应一个response应答对象,其中它包含一个数字"响应状态码"。 如果urlopen或opener.open不能处理的,会产生一个HTTPError,对应相应的状态码,HTTP状态码表示HTTP协议所返回的响应的状态。 注意,urllib2可以为我们处理重定向的页面(也就是3开头的响应码),100-299范围的号码表示成功,所以我们只能看到400-599的错误号码。
import urllib2
requset = urllib2.Request('http://blog.baidu.com/itcast')
try:
urllib2.urlopen(requset)
except urllib2.HTTPError, err:
print err.code
print err
import urllib2
requset = urllib2.Request('http://blog.baidu.com/itcast')
try:
urllib2.urlopen(requset)
except urllib2.HTTPError, err:
print err.code
except urllib2.URLError, err:
print err
else:
print "Good Job"
这样我们就可以做到,首先捕获子类的异常,如果子类捕获不到,那么可以捕获父类的异常。
# -*- coding:utf-8 -*-
import urllib2,urllib
#创建一个HTPP请求对象
http_handler = urllib2.HTTPHandler()
# 构建一个HTTPHandler 处理器对象,支持处理HTTPS请求
http_handler = urllib2.HTTPSHandler()
#创建一个打开方式对象
opener = urllib2.build_opener(http_handler)
#通过自定义的打开方式,
response = opener.open('https://www.baidu.com')
#读取响应对象中的数据
print response.read()
爬取结果
注解:这里使用urllib2.HTTPHandler()
访问https网页得到的html代码。
这种方式发送请求得到的结果,和使用urllib2.urlopen()发送HTTP/HTTPS请求得到的结果是一样的。
如果在 HTTPHandler()增加 debuglevel=1参数,还会将 Debug Log 打开,这样程序在执行的时候,会把收包和发包的报头在屏幕上自动打印出来,方便调试,有时可以省去抓包的工作。
# 仅需要修改的代码部分:
# 构建一个HTTPHandler 处理器对象,支持处理HTTP请求,同时开启Debug Log,debuglevel 值默认 0
http_handler = urllib2.HTTPHandler(debuglevel=1)
# 构建一个HTTPHSandler 处理器对象,支持处理HTTPS请求,同时开启Debug Log,debuglevel 值默认 0
https_handler = urllib2.HTTPSHandler(debuglevel=1)
# -*- coding:utf-8 -*-
import urllib,urllib2
#准备数据
ftp_server = '192.168.1.100'
username = 'root'
password = '123'
#创建一个密码管理器对象
pass_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
#增加一个管理服务器
pass_mgr.add_password(None,ftp_server,username,password)
#创建一个web验证服务器
http_auth_handler = urllib2.HTTPBasicAuthHandler(pass_mgr)
#构建一个请求对象
request = urllib2.Request('http://image.baidu.com')
#创建自定义打开方式对象【开锁人】
opener = urllib2.build_opener(http_auth_handler)
#发送请求,获取服务器的响应对象
response = opener.open(request)
# 获取响应中的数据
content = response.read()
#处理相关数据
# -*- coding:utf-8 -*-
import urllib,urllib2
#准备数据
ftp_server = '192.168.1.100'
username = 'root'
password = '123'
#创建一个密码管理器对象
pass_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
#增加一个管理服务器
pass_mgr.add_password(None,ftp_server,username,password)
#创建一个web验证服务器
http_auth_handler = urllib2.HTTPBasicAuthHandler(pass_mgr)
#构建一个请求对象
request = urllib2.Request('http://image.baidu.com')
#创建自定义打开方式对象【开锁人】
opener = urllib2.build_opener(http_auth_handler)
#发送请求,获取服务器的响应对象
response = opener.open(request)
# 获取响应中的数据
content = response.read()
#处理相关数据
print content
# -*- coding:utf-8 -*-
import urllib
import urllib2
#创建一个HTTP处理器对象
#使用免费的代理进行处理器的创建
proxy_handler = urllib2.ProxyHandler({'http':'110.50.85.68:80'})
#如果是付费的代理,输入自己的账号密码即可
# proxy_handler = urllib2.ProxyHandler({'http':'username:password@175.172.212.178:80'})
# 创建一个请求发送对象
opener = urllib2.build_opener(proxy_handler)
#创建请求对象
request = urllib2.Request(r'http://www.baidu.com')
#发送请求,获取服务器返回的响应对象
response = opener.open(request)
#获取数据
print response.read()
# -*- coding:utf-8 -*-
import urllib
import urllib2
import cookielib
#声明一个CookieJar对象实例来保存cookie
cookie = cookielib.CookieJar()
#利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
cookielib_handler = urllib2.HTTPCookieProcessor(cookie)
#创建一个请求打开方式
opener = urllib2.build_opener(cookielib_handler)
#构建请求对象 'http://www.renren.com/PLogin.do' 这个接口没有做反爬虫处理
url = 'http://www.renren.com/PLogin.do' #http://www.renren.com/SysHome.do,这个接口做了反爬虫处理
data = urllib.urlencode({'email':'用户名','password':'密码'})
request = urllib2.Request(url,data)
#发送请求
response = opener.open(request)
#获取数据
content = response.read()
print content
data数据从form表单name中获取
# -*- coding:utf-8 -*-
import urllib
import urllib2
import re
#定义函数,用于爬取对应的数据
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
#定义函数,进行爬虫的核心处理功能
def getImg(html):
#使用正则表达式匹配想要保存的数据———图片
reg = 'src="(.+?\.jpg)"'
#将正则表达式编译成Pattern对象,
imgre = re.compile(reg)
imglist = re.findall(imgre, html)
x = 0
for imgurl in imglist:
urllib.urlretrieve(imgurl, '%s.jpg' % x)
x+=1
return imglist
#主程序运行入口
if __name__ == '__main__':
Html = raw_input('请输入想要爬取的网页链接:')
html = getHtml(Html)
getImg(html)
urlretrieve(url, filename=None, reporthook=None, data=None)
爬取的是游民星空壁纸精选
从本地文件可以看到爬取保存至本地20张图片