爬虫壁纸精选,没毛病,你绝对需要!

干货来袭!不要躲避!

1)获取Cookie,并保存到CookieJar()对象中

# urllib2_cookielibtest1.pyimport urllib2import cookielib# 构建一个CookieJar对象实例来保存cookiecookiejar = cookielib.CookieJar()# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象handler=urllib2.HTTPCookieProcessor(cookiejar)# 通过 build_opener() 来构建openeropener = 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.pyimport cookielibimport urllib2# 保存cookie的本地磁盘文件名filename = 'cookie.txt'# 声明一个MozillaCookieJar(有save实现)对象实例来保存cookie,之后写入文件cookiejar = cookielib.MozillaCookieJar(filename)# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象handler = urllib2.HTTPCookieProcessor(cookiejar)# 通过 build_opener() 来构建openeropener = urllib2.build_opener(handler)# 创建一个请求,原理同urllib2的urlopenresponse = opener.open("http://www.baidu.com")# 保存cookie到本地文件cookiejar.save()

3)从文件中获取cookies,做为请求的一部分去访问

# urllib2_cookielibtest2.pyimport cookielibimport urllib2# 创建MozillaCookieJar(有load实现)实例对象cookiejar = cookielib.MozillaCookieJar()# 从文件中读取cookie内容到变量cookie.load('cookie.txt')# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象handler = urllib2.HTTPCookieProcessor(cookiejar)# 通过 build_opener() 来构建openeropener = urllib2.build_opener(handler)response = opener.open("http://www.baidu.com")urllib 模块方法。urllib2 的异常错误处理URLError

import urllib2requset = urllib2.Request('http://www.ajkfhafwjqh.com')try: urllib2.urlopen(request, timeout=5)except urllib2.URLError, err: print errHTTPError

HTTPError是URLError的子类,我们发出一个请求时,服务器上都会对应一个response应答对象,其中它包含一个数字"响应状态码"。

如果urlopen或opener.open不能处理的,会产生一个HTTPError,对应相应的状态码,HTTP状态码表示HTTP协议所返回的响应的状态。

注意,urllib2可以为我们处理重定向的页面(也就是3开头的响应码),100-299范围的号码表示成功,所以我们只能看到400-599的错误号码。

import urllib2requset = urllib2.Request('http://blog.baidu.com/itcast')try: urllib2.urlopen(requset)except urllib2.HTTPError, err: print err.code print err改进版

import urllib2requset = urllib2.Request('http://blog.baidu.com/itcast')try: urllib2.urlopen(requset)except urllib2.HTTPError, err: print err.codeexcept urllib2.URLError, err: print errelse: print "Good Job"

这样我们就可以做到,首先捕获子类的异常,如果子类捕获不到,那么可以捕获父类的异常。

2.具体代码操作

1、自定义数据请求方式

# -*- 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 值默认 0http_handler = urllib2.HTTPHandler(debuglevel=1)# 构建一个HTTPHSandler 处理器对象,支持处理HTTPS请求,同时开启Debug Log,debuglevel 值默认 0https_handler = urllib2.HTTPSHandler(debuglevel=1)

2、自定义数据请求方式

# -*- 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()#处理相关数据

3、从ftp服务器爬取数据

# -*- 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

4、自定义数据请求方式——代理请求

# -*- coding:utf-8 -*-import urllibimport 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()

5、 爬取人人网个人中心数据,需要验证登陆

# -*- coding:utf-8 -*-import urllibimport urllib2import cookielib#声明一个CookieJar对象实例来保存cookiecookie = 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

6、data数据从form表单name中获取

爬取指定网页的图片保存至本地,这里写的函数是爬取游民星空每周壁纸精选

# -*- coding:utf-8 -*-import urllibimport urllib2import re#定义函数,用于爬取对应的数据def getHtml(url): page = urllib.urlopen(url) html = page.read() return html#定义函数,进行爬虫的核心处理功能def getImg(html): #使用正则表达式匹配想要保存的数据———图片 reg = 'class="lazy" data-original="(.+?\.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)

注解: urllib 模块提供的 urlretrieve() 函数

urlretrieve(url, filename=None, reporthook=None, data=None)

参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。

干货是否已享用完毕?求关注!求点评!求收藏!更多精彩内容请关注尚学堂!