Python爬虫基础 | (一)爬虫基本库的使用

本篇博客所有示例使用Jupyter NoteBook演示。

Python爬虫基础系列笔记基于:Python3网络爬虫开发实战-崔庆才  下载密码wuuc

示例代码  下载密码:02f4

目录

一、简介

二、使用urllib

1.使用urllib的request模块发送请求

2.处理异常

3.解析链接

4.分析Robots协议

二、使用requests

1.基本用法

2.高级用法

三、正则表达式

四、实战:使用Requests和正则表达式爬取猫眼电影排行


一、简介

爬虫最初的操作便是模拟浏览器向服务器发送请求,这方面Python提供了功能齐全的类库帮我们完成这些请求。

最基础的HTTP请求库有urllib、httplib2、requests、treq等。

有了这些库,我们只需要关心请求的链接是什么,需要传什么参数,以及设置可选的请求头就行;不必了解底层的传输和通信,便可以通过请求和相应得到网页内容。

二、使用urllib

Python3 urllib库文档

urllib有四个模块:

1)request:用来模拟发送请求。只需给方法传递url和其他参数,便可以模拟浏览器访问网页了。

2)error:异常处理模块,可以捕捉请求时出现的错误,然后进行重试或其他操作保证程序不会意外终止。

3)parse:提供了很多url的处理方法,如拆分、解析、合并等。

4)robotparser:识别网站robots.txt文件,判断哪些网站可以爬,哪些不可以。

1.使用urllib的request模块发送请求

  • urlopen()

爬取Python官网:

得到网页源码后,我们想要的链接、文本、图片地址等信息就可以提取出来了。

利用type()查看返回的是什么:

可以发现返回的是一个HTTPResponse类型的对象,主要包含read(),readinto(),getheader(name),getheaders(),fileno()等方法;以及msg,version,status,reason,debuglevel,closed等属性。

调用read()可以得到网页源码,status属性可以得到请求状态码,200为成功,404为找不到网页:

urlopen()函数的API:

第一个参数时请求网页的url;data参数附加数据;timeout参数设置超出时间。

1)data参数:

可选参数。

如果要添加data参数,需要用bytes()将参数转码成字节流。

如果传递了data参数,请求方式就不再是GET,而是POST。

bytes方法的第一个参数需要是字符串类型,用urllib.parse模块中的urlencode()将参数字典转换为字符串;第二个参数指定编码格式utf-8.

url:http://httpbin.org/post可以测试POST请求,可以输出请求的一些信息,包含我们传递的data参数。

传递的参数出现在了form字段中,表明模拟表单提交的方式,以POST方式传输数据。

2)timeout参数

用于设置超时时间,单位秒。如果超过了设置的时间,还没有得到响应,就会抛出异常。

如果不指定,使用默认时间。

超时时间为0.1s,0.1s后,服务器没有响应,就会抛出URLError异常,它属于urllib.error模块,原因是超时。

可以设置超时时间来控制一个网页如果长时间没有响应,就跳过抓取其他网页:

3)其他参数

context参数:必须是ssl.SSLContext类型,指定SSL设置。

cafile和capath分别指定CA证书和路径,在请求HTTPS链接时会有用。

cadefault:弃用,默认值False

更多信息查看官方文档

  • Request()

urlopen()可以实现最基本的请求,但参数太简单。

如果请求中需要加入Headers等信息,需要用更强大的Request来创建:

依然调用urlopen()发送请求,只不过参数不再是简单的url,而是一个Request对象。

这样一方面可以将请求独立成一个对象;另一方面可以更灵活的配置参数。

Request的构造方法:

第一个参数必填,其他可选,=后为可选参数的默认值。

url:待请求网页的url

data:必须是字节流类型;如果是字典,先转换为字符串

headers:请求头,是一个字典;构造请求头时可以通过headers参数直接构造,也可以调用请求实例的add_header()添加;添加请求头一般通过修改User-Agent来伪装浏览器,默认值为Python-urllib,如要伪装火狐,可以把其值设置为:

origin_req_host:请求方的host名称或ip地址

unverifiable:请求是否无法验证,默认False,用户没有足够权限来选择接收这个请求的结果。如,我们请求一个HTML中的图片,我们没有自动抓取图像的权限,此时其值就是True。

method:一个字符串,表示请求的方法,如GET、POST、PUT

也可以通过下面的方式添加请求头:

  • 高级用法

对于一些高级操作,如Cookies处理、代理设置等,我们需要使用Handler。

可以把它理解为各种处理器,有专门处理登陆验证的,有处理Cookies的,有处理代理的。

urllib.request模块中的BaseHandler类是所有Handler的父类,接下来是他的一些子类:

其他Handler类

另一个重要的类是OpenerDirectory,成为Opener。Opener可以使用open方法,返回类型和urlopen()一样。

我们可以利用Handler来构建Opener。

具体用法:

1)验证

有些网站打开时,会提示你输入用户名和密码,验证成功后才可以查看:

此时需要借助HTTPBasicAuthHandler完成:

首先实例化HTTPBasicAuthHandler对象,参数为HTTPPasswordMgrWithDefaultRealm对象,他用add_password()添加用户名和密码,从而建立一个处理验证的Handler。

利用build_opener()为这个handler构建一个opener,opener发送请求时相当于验证成功。

利用opener的open()方法打开链接,完成验证,获取源码。

2)代理

添加代理可以这么做:

本地搭建一个代理,运行在9743端口上。

ProxyHandler参数是一个字典,键值为协议类型,名为代理链接,可以添加多个代理。

利用build_opener为这个handler构建一个opener,之后调用open()请求网页。

3)Cookies

获取网页的Cookies:

输出成文件格式:

文件内容:

保存为LWP格式的Cookie文件:

文件内容:

读取Cookie文件并利用:

urllib.request模块更多功能

2.处理异常

3.解析链接

4.分析Robots协议

二、使用requests

1.基本用法

2.高级用法

三、正则表达式

四、实战:使用Requests和正则表达式爬取猫眼电影排行

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/sdu_hao/article/details/83822618
今日推荐