大家好,本文将围绕利用python爬取简单网页数据步骤展开说明,如何利用python爬取网页内容是一个很多人都想弄明白的事情,想搞清楚python爬取网页数据步骤图解需要先了解以下几个事情。
目录
实现HTTP请求
使用urllib3库实现
许多Python的原生系统已经开始使用urllib3库,其提供了很多python标准库里所没有的重要特性。
连接特性 |
连接特性 |
线程安全 |
管理连接池 |
客户端SSL∕TLS验证 |
使用分部编码上传文件 |
协助处理重复请求和HTTP重定位 |
支持压缩编码 |
支持HTTP和SOCKS代理 |
测试覆盖率达到100% |
1. 生成请求
通过request方法即可创建一个请求,该方法返回一个HTTP响应对象python画树状图。Reques语法格式如下。
reques方法常用的参数及其说明如下。
参数 |
说明 |
method |
接收string。表示请求的类型,如“GET”、“HEAD”、“DELETE”等。无默认值 |
url |
接收string。表示字符串形式的网址。无默认值 |
fields |
接收dict。表示请求类型所带的参数。默认为None |
headers |
接收dict。表示请求头所带参数。默认为None |
**urlopen_kw |
接收dict或其他Python中的类型的数据。依据具体需要及请求的类型可添加的参数,通常参数赋值为字典类型或为具体数据。无默认值 |
2. 请求头处理
在request方法中,如果需要传入headers参数,可通过定义一个字典类型实现。定义一个包含User-Agent信息的字典,使用浏览器为火狐和chrome浏览器,操作系统为“Windows NT 6.1; Win64; x64”,向网站“http://www.tipdm.com/tipdm/index.html”发送带headers参数的GET请求,hearders参数为定义的User-Agent字典。
3. Timeout设置
为防止因为网络不稳定、服务器不稳定等问题造成连接不稳定时的丢包,可以在请求中增加timeout参数设置,通常为浮点数。依据不同需求,timeout参数提供多种设置方法,可直接在URL后设置该次请求的全部timeout参数,也可分别设置该次请求的连接与读取timeout参数,在PoolManager实例中设置timeout参数可应用至该实例的全部请求中。
4.请求重试设置
urllib3库可以通过设置retries参数对重试进行控制。默认进行3次请求重试,并进行3次重定向。自定义重试次数通过赋值一个整型给retries参数实现,可通过定义retries实例来定制请求重试次数及重定向次数。若需要同时关闭请求重试及重定向则可以将retries参数赋值为False,仅关闭重定向则将redirect参数赋值为False。与Timeout设置类似,可以在PoolManager实例中设置retries参数控制全部该实例下的请求重试策略。
5. 生成完整HTTP请求
使用urllib3库实现生成一个完整的请求,该请求应当包含链接、请求头、超时时间和重试次数设置。
使用requests库实现
requests库是一个原生的HTTP库,比urllib3库更为容易使用。requests库发送原生的HTTP 1.1请求,无需手动为URL添加查询字串,也不需要对POST数据进行表单编码。相对于urllib3库,requests库拥有完全自动化Keep-alive和HTTP连接池的功能。requests库包含的特性如下。
连接特性 |
连接特性 |
连接特性 |
Keep-Alive&连接池 |
基本∕摘要式的身份认证 |
文件分块上传 |
国际化域名和URL |
优雅的key∕value Cookie |
流下载 |
带持久Cookie的会话 |
自动解压 |
连接超时 |
浏览器式的SSL认证 |
Unicode响应体 |
分块请求 |
自动内容解码 |
HTTP(S)代理支持 |
支持.netrc |
1. 生成请求
requests库生成请求的代码非常便利,其使用的request方法的语法格式如下。
request方法常用的参数及其说明如下。
参数 |
说明 |
method |
接收string。表示请求的类型,如“GET”、“HEAD”、“DELETE”等。无默认值 |
url |
接收string。表示字符串形式的网址。无默认值 |
**kwargs |
接收dict或其他Python中的类型的数据。依据具体需要及请求的类型可添加的参数,通常参数赋值为字典类型或为具体数据 |
2. 查看状态码与编码
需要注意的是,当requests库猜测错时,需要手动指定encoding编码,避免返回的网页内容解析出现乱码。 手动指定的方法并不灵活,无法自适应对应爬取过程中不同网页的编码,而使用chardet库比较简便灵活,chardet库是一个非常优秀的字符串∕文件编码检测模块。 chardet库使用detect方法检测给定字符串的编码,detect方法常用的参数及其说明如下。
参数 |
说明 |
byte_str |
接收string。表示需要检测编码的字符串。无默认值 |
3. 请求头与响应头处理
requests库中对请求头的处理与urllib3库类似,也使用headers参数在GET请求中上传参数,参数形式为字典。使用headers属性即可查看服务器返回的响应头,通常响应头返回的结果会与上传的请求参数对应。
4. Timeout设置
为避免因等待服务器响应造成程序永久失去响应,通常需要给程序设置一个时间作为限制,超过该时间后程序将会自动停止等待。在requests库中通过设置timeout这个参数实现,超过该参数设定的秒数后,程序会停止等待。
5. 生成完整HTTP请求
使用requests库的request方法向网站“http://www.tipdm.com/tipdm/index.html”发送一个完整的GET请求,该请求包含链接、请求头、响应头、超时时间和状态码,并且编码应正确设置。
解析网页
使用chrome开发者工具查看网页
chrome浏览器提供了一个非常便利的开发者工具,供广大web开发者使用,该工具提供包括查看网页元素、查看请求资源列表、调试JS等功能。该工具其中一个打开方式可通过右键单击chrome浏览器页面,在弹出菜单中单击图所示的“检查”选项打开。
也可以单击chrome浏览器右上角快捷菜单,如图所示,单击“更多工具”选项中的“开发者工具”选项,或使用快捷键组合Ctrl+Shift+I。