这一系列文章是我在阅读“Python3网络爬虫开发实践”一书以及其余线上资料学习爬虫过程当中的一些笔记和心得,但愿能分享给你们。html
章节概述:本章介绍爬虫依赖的几个基本库的使用方法正则表达式
章节结构:cookie
具体内容:网络
Urllib库主要负责发送HTTP请求部分,主要包含四个模块:
request: 模拟发送请求模块
error:异常处理模块
parse:工具模块,提供处理URL的方法(拆分,解析,合并等)
robotparser:识别网站robots.txt文件,判断哪些网站能够爬取
1.request 发送请求
1.1 urllib.request.urlopen()
这个函数主要做用是返回一个http.client.HTTPResponse类型的对象,这个对象有read(),readinto(),getheader(name),getheaders(),fileno()等方法,还有msg,version, status, reason, debuglevel, closed等属性。咱们能够经过这些方法和属性得到结果的一系列信息。
这个函数支持的参数以下:urllib.request.
`urlopen`(_url_,_data=None_,[timeout_,]*_,_cafile=None_,_capath=None_,_cadefault=False_,_context=None_)
data:在发送POST请求时能够添加这个参数来模拟POST请求的参数,可是这个参数须要实现转码为byte字节流类型,好比data = bytes(urllib.parse.urlencode({'id':'test'}),encoding='utf8')
timeout:设置超时时间,单位为秒,若是超出该时间还没获得响应就会抛出异常urllib.error.URLError,这个error的reason属性是socket.timeout
context:ssl.SSLContext类型,用于指定SSL设置
1.2 urllib.request.Request
urlopen只是进行很很简单的请求,若是请求须要更完善,好比加入Header,须要用到Request。使用方法能够是用urllib.request.Request建立一个Request对象,而后把这个对象传入urlopen做为参数。
Request API: class urllib.request.
`Request`(_url_,_data=None_,_headers={}_,_origin_req_host=None_,_unverifiable=False_,_method=None_)
url:惟一一个必传参数,网页url
header:字典类型参数,模拟请求头,能够经过这个参数赋值,也能够经过add_header()方法添加
origin_req_host:指的是请求方的host名称或者IP地址
unverifiable:表示请求是否没法验证,即用户没有足够权限来选择接收这个请求的结果
method:GET/POST/PUT等
1.3 高级操做,好比cookie,代理等 --- Handler处理器 + Opener
1.3.1 urllib.request.
`BaseHandler`:全部Handler的父类,提供了基本的方法
1.3.2 经常使用Handler
HTTPDefaultErrorHandler:处理HTTP响应错误
HTTPRedirectHandler:处理重定向
HTTPCookieProcessor:处理Cookie
ProxyHandler: 处理代理
HTTPPasswordMgr: 处理密码管理
HTTPBasicAuthHandler: 处理认证管理
1.3.3 经过Handler建立Opener:
须要用户名密码验证的网站
用HTTPPasswordMgrWithDefaultRealm对象的add_password方法添加用户名密码对,而后用这个对象为参数建立一个HTTPBasicAuthHandler,而后用urllib.request.
`build_opener`([handler_,_...])建立opener,而后调用opener对象的open方法请求网页
须要代理的网站
ProxyHandler + opener
须要Cookie处理
http.cookiejar.CookerJar() + HTTPCookieProcessor + opener
Cookie文件保存
(1) http.cookiejar.MazillaCookieJar(filename) + HTTPCookieProcessor
(2) http.cookiejar.LWPCookierJar(filename)+ HTTPCookieProcessor
Cookie文件使用
http.cookiejar.LWPCookierJar()对象的load方法socket
2.Error 处理异常
2.1 urllib.error.
`URLError`
由request模块产生的异常,都由URLError模块捕获。
2.2 urllib.error.
`HTTPError`是URLError的子类,用于处理HTTP请求错误,有三个属性code(状态码),reason(错误缘由),header(返回请求头)
2.3 Except捕捉顺序应该是先HTTPError,再URLError函数
3.Parse 解析连接
3.1.urllib.parse.
`urlparse`(_urlstring_,_scheme=''_,_allow_fragments=True_):用于URL的识别和分段,返回urllib.parse。ParseResult类型。内容有ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
params='', query='', fragment='')
scheme: ://以前的内容
netloc:第一个问号前的内容,表示网页域名
path:是访问路径
params:参数
query:问号后的查询条件
这些结果也能够经过index来获取,由于ParseResult自己是一个元组
3.2 urlparse传入参数有urlstring(必填,带解析URL),scheme是默认协议,allow_fragment表示是否忽略fragment,即#后的锚点位置
3.3 urlunparse:构造URL
3.4 urlsplit:相似urlparse,除了parms会合并入path部分,返回SplitResult元组对象
3.5 urljoin:合并连接,第一个参数为base_url,第二个参数是新的连接,并且若是两个连接scheme,netloc,path三部分重复,会默认用新连接的
3.6 urlencode:构造GET方法请求参数时能够将字典序列化为请求的参数
3.7 parse_qs: urlencode的反序列化,将参数转换为字典
3.8 parse_qsl:将参数转换为元组列表
3.9 quote:将内容转换为URL编码格式,好比有中文的时候避免乱码
3.10 unquote:进行URL解码
4.Robots协议,urllib.robotparser
4.1 Robots协议:爬虫协议或者机器人协议。全名是网络爬虫排除协议Robots Exclusion Protocol。告诉爬虫和搜索引擎哪些页面能够抓取,哪些不能够。一般是一个存在网站根目录下的robots.txt文本文件
4.2 robotparser模块:负责解析robots.txt,利用模块中的RobotFileParser类来判断一个爬虫是否有权限爬取这个网页
4.3 经常使用方法
4.3.1 set_url:设置robots.txt路径
4.3.2 read:读取robots.txt文件
4.3.3 parse:解析robots.txt文件
4.3.4 can_fetch:检测一个URL是否能够被一个搜索引擎抓取
4.3.5 mtime:返回上次抓取和分析robots.txt的时间
4.3.6 modified:将当前时间设置为上次抓取和分析robots.txt的时间工具
1.基本用法
requests.get()与urlopen相同,获得一个Response对象(requests.models.Response),同时还有POST,PUT等其余方法。
2.高级用法
requests.post()能够:
传入file(上传文件)
添加header(请求头中能够添加Cookie)
增长verify参数跳过SSL验证或者传入cert参数,指定本地验证证书
配置proxies参数传入代理参数
添加timeout参数设置超时参数
添加auth参数,好比用户名密码post
正则表达式用于处理字符串,有本身特定的语法结构,能够实现字符串的检索,替换,匹配验证
1.经常使用规则
2.匹配方法match()检测一个字符串是否符合正则表达式,匹配过程当中能够经过用括号括起想提取的部分。也能够加入来表示模糊匹配。匹配还包括贪婪和非贪婪匹配,非贪婪用?代替*,表示尽量少匹配字符。
3.修饰符,控制匹配模式
4.search()匹配,match方法若是开头不符合就直接断定失败,search是用于检测是否某个字符符合
5.findall,是在search基础上返回所有符合部分
6.sub用于保留符合部分来达到修改字符串的功能
7.compile用于把字符串编译成正则表达式对象学习