###目录:

  • Python网络爬虫(一)- 入门基础
  • Python网络爬虫(二)- urllib爬虫案例
  • Python网络爬虫(三)- 爬虫进阶
  • Python网络爬虫(四)- XPath
  • Python网络爬虫(五)- Requests和Beautiful Soup
  • Python网络爬虫(六)- Scrapy框架
  • Python网络爬虫(七)- 深度爬虫CrawlSpider
  • Python网络爬虫(八) - 利用有道词典实现一个简单翻译程序

#1.爬虫进阶cookielib

  • [Python入门网络爬虫之精华版](https://github.com/lining0806/PythonSpiderNotes):详细讲解了Python学习网络爬虫。
  • 为了进行高效的抓取有用的数据,并且减少冗余数据的存储,后续需要使用正则表达式来进行对爬取数据中特定内容的存储。
  • urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy。假如一个网站它会检测某一段时间某个IP 的访问次数,如果访问次数过多,它会禁止你的访问。可以设置代理IP来进行爬虫,具体见代码操作(四)
  • 当你获取一个URL你使用一个opener。在 Python网络爬虫(二)- urllib爬虫案例中,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是urldatatimeout
  • Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)
    • cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。Cookielib模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJarFileCookieJarMozillaCookieJarLWPCookieJar

    • 如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。

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

# urllib2_cookielibtest1.pyimport 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.pyimport 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.pyimport 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")
复制代码
  • urllib 模块方法。

  • urllib2 的异常错误处理

    • URLError
import urllib2requset = urllib2.Request('http://www.ajkfhafwjqh.com')try:urllib2.urlopen(request, timeout=5)
except urllib2.URLError, err:print err
复制代码
  • HTTPError

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.codeprint 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.具体代码操作 ####代码操作(一) 自定义数据请求方式

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

####代码操作(三)从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
复制代码

####代码操作(四) 自定义数据请求方式——代理请求

# -*- 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
复制代码

####代码操作(六) 爬取指定网页的图片保存至本地,这里写的函数是爬取游民星空每周壁纸精选

# -*- 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 = 0for imgurl in imglist:urllib.urlretrieve(imgurl, '%s.jpg' % x)x+=1return 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 表示服务器的响应头。
  • urllib2与urllib一些常用方法的比较

Python网络爬虫(三) 爬虫进阶相关推荐

  1. python网络爬虫权威指南 豆瓣_福利分享:个人整理的Python书单,从基础到进阶...

    原标题:福利分享:个人整理的Python书单,从基础到进阶 我挑选的一些书籍,大家可以自行到书店或是网上自己选购.也由于个人水平有限,很可能大家觉得优秀的书籍没有列出,如果大家有觉得不错的书籍,欢迎大 ...

  2. 实战python网络爬虫豆瓣_三分钟教会你利用Python爬虫实现豆瓣电影采集(实战篇)...

    一.项目背景 豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务.可以记录想看.在看和看过的电影电视剧 .顺便打分.写影评.极大地方便了人们的生活. 今天小编以电视剧(美剧)为例,批量爬 ...

  3. python网络爬虫之解析网页的正则表达式(爬取4k动漫图片)[三]

    目录 前言 一.正则表达式的学习 1.正则表达式的匹配工具 2.正则表达式的样式 3.正则表达式的案例 二.爬取网页图片 1.分析网页 2.获取数据 爬取妹子网的案例 后记 前言 hello,大家好 ...

  4. Python 爬虫 (三) - Socket 网络编程

    原文出处: Andrew_liu python的网络变成比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西, 我觉得学网络编程还是用c语言更好一点 ...

  5. 精通python网络爬虫-精通python网络爬虫

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 作者:韦玮 转载请注明出处 随着大数据时代的到来,人们对数据资源的需求越来越多, ...

  6. python编程入门到实践 百度云-python网络爬虫从入门到实践pdf

    python网络爬虫从入门到实践pdf是一本非常热门的编程教学.这本书籍详细讲解了Python以及网络爬虫相关知识,非常适合新手阅读,需要的用户自行下载吧. Python网络爬虫从入门到实践电子书介绍 ...

  7. python爬虫从入门到精通-Python网络爬虫开发从入门到精通

    本书共分 3 篇,针对 Python 爬虫初学者,从零开始,系统地讲解了如何利用 Python 进行常见的网络爬虫的程序开发. 第 1 篇快速入门篇(第 1 章 ~ 第 9 章):本篇主要介绍了 Py ...

  8. 【读书笔记】Python网络爬虫从入门到实践(第2版)-唐松,爬虫基础体系巩固和常见场景练习

    [概述] 书名:Python网络爬虫从入门到实践(第2版) 作者:唐松 日期:2021年08月01日 读书用时:1568页,100小时,59个笔记 [读书笔记] ◆ 1.2 网络爬虫是否合法 爬虫协议 ...

  9. IT宅男利用Python网络爬虫获取有道翻译手机版翻译接口

    [一.项目背景] 有道翻译作为国内最大的翻译软件之一,用户量巨大.在学习时遇到不会的英语词汇,会第一时间找翻译,有道翻译就是首选.今天教大家如何去获取有道翻译手机版的翻译接口. [二.项目目标] 多国 ...

最新文章

  1. 使用java的Calendar对象获得当前日期的上几个度开始、结束时间
  2. WPF基础之XAML
  3. HTML5实战 学习笔记
  4. Android调用相机拍摄照片并显示到 ImageView控件中
  5. php环境苹果搭建,mac下搭建php环境
  6. Matlab函数——dct2
  7. 优化无极限:从96秒到1.5秒
  8. IE6下绝对定位层不显示
  9. 射频识别系统的组成及工作原理解析
  10. teraterm 执行sql_tera term通过ttl脚本 自动连接服务器
  11. Ardunio开发实例-MMA8653FC 10位加速度计
  12. WEB--3D立体魔方小游戏 (附源码)
  13. 抑郁症最新研究进展(2021年11月)
  14. chrome 查看日志
  15. 硬盘转换格式为NTFS或者其它
  16. (转)QQ在线客服代码
  17. 小黄车卖蜂蜜啦。。。
  18. Win10系统Jdk环境变量配置遇到'javac' 不是内部或外部命令,也不是可运行的程序 或批处理文件 解决办法。
  19. shell 脚本处理多行文本的记录 -- awk
  20. Python:pycharm里的实用快捷键

热门文章

  1. 计算机本科毕业论文水电厂,水电站计算机监控系统 本科毕业论文(设计).doc...
  2. Android开发和測试实践 - 接入友盟统计
  3. 批量修改PPT字体和颜色的方…
  4. 一个Java程序员该有的良好品质
  5. Process On 免费在线作图工具
  6. 浏览器控制台过滤无用的提示和报错
  7. t检验与F检验 /统计常识 / 统计学笔记(2)--随机抽样与统计推断的逻辑
  8. Java使用Calendar月操作(时间段内的月份、前三个月、月份加1)
  9. 苹果+甲基化=切开不变色
  10. 合宙AIR32F103CBT6入门第一步——点亮LED灯