-
Python网络爬虫学习基础笔记
本次学习的python爬虫所使用的是requests库
下面就是requests库的7种主要方法
方法名 | 说明 |
---|---|
requests.request() | 构造一个请求,支撑以下各方法的基础方法 |
request.get() | 获取HTML网页的主要方法,对应HTTP的GET |
requests.head() | 获取HTML网页的主要方法,对应HTTP的HEAD |
requests.post() | 向HTML网页提交POST请求的方法,对应于HTTP的POST |
requests.put() | 向HTML网页提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() | 向HTML网页提交局部修改请求,对应于HTTP的PATCH |
requests.delete() | 向HTML页面提交删除请求,对应于HTTP的DELETE |
基础访问流程
st=>start: 创建requests对象
op1=>operation: 检查r.status_code
cond=>condition: r.status_code==200?
op2=>operation: 进行后续操作
sub=>subroutine: 访问失败
e=>end
st->op1->cond
cond(yes)->op2->e
cond(no)->sub
get()方法简介
部分语法r=requests.get(url)
表示构造一个向服务器请求资源的Request对象,返回一个包含服务器资源的Respon对象
完整语法requests.get(url,params=None,**kwargs)
get()方法参数 | 说明 |
---|---|
url | 拟获取页面的URL链接 |
params | url中的额外参数,控制字典或字节流格式(可选) |
**kwargs | 12个控制访问参数 |
Response对象属性 | 说明 |
---|---|
r.status_code | HTTP请求的返回状态,200表示链接成功404表示失败 |
r.text | HTTP响应内容的字符串形式,即,url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容分析出的响应内容的编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
基本示例
1
2
3
4
5
6
7
8
9
#在python shell中进行逐行输入
import requests
r=requests.get("http://www.baidu.com")
r.status_code#返回了200表示访问成功
r.text#输出访问内容--发现有部分中文乱码
r.encoding#发现编码为ISO-8859-1
r.apparent_encoding#发现内容编码为UTF-8
r.encoding = 'utf-8'#将读取编码改为utf-8
r.text#此时发现输出内容正常
r.encoding:如果header中不存在charset,则认为默认编码为ISO-8859-1
r.apparent_encoding:根据网页内容分析出的编码方式
Requests库异常
异常 | 说明 |
---|---|
requests.ConnectionError | 网络连接错误异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生超时异常 |
Response异常
异常 | 说明 |
---|---|
r.raise_for_status() | 如果不是200,产生异常 requests.HTTPError |
爬取网页通用代码框架
1
2
3
4
5
6
7
8
9
10
11
12
import requests
def getHtmlText(url):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()#状态码不是200时,引发HTTPError异常
r.encoding = r.apparent_encoding#设置读取编码为页面内容编码,防止乱码
return r.text
except:
return "发生异常"
if __name__ == "__main__":
url="http://www.baidu.com"
print(getHtmlText(url))
通过r.raise_for_status()以及try--except捕捉访问异常
requests.requests控制访问的参数
参数名 | 说明 |
---|---|
params | 字典或字节序列,作为参数增加到url中 |
data | 字典,字节序列或文件对象,作为Request的内容 |
json | JSON格式的数据,作为Request的内容 |
headers | 字典,HTTP定制头(模拟浏览器进行访问) |
cokies | 字典或CpplieJar,Request中的cookie |
auth | 元祖,支持HTTP认证功能 |
files | 字典类型,传输文件 |
timeout | 设定超时时间,秒为单位 |
proxies | 字典类型,设定访问代理服务器,可以增加登陆认证,防止爬虫反追踪 |
allow_redirects | True//False,默认为True,重定向开关 |
stream | True/False,默认为True,获取内容立即下载开关 |
verify | True/False,默认为True,认证SSL证书开关 |
cert | 本地SSL证书路径""" |
params参数的例子:
例:kv={'key1':'value','key2':'value2'} r=requests.request('GET','http://python123.io/ws',params=kv) print(r.url)
输出为:http://python.io/ws?key1=value1&key2=value2
各方法语法以及需要的控制参数
语法 | 可选额外控制参数 |
---|---|
requests.get(url, params=None, **kwargs) | 12 |
requests.head(url, **kwargs) | 12 |
requests.post(url, data=None, json=None, **kwargs) | 12 |
requests.put(url, data=None, **kwargs) | 12 |
requests.patch(url, data=None, **kwargs) | 12 |
requests.delete(url, **kwargs) | 12 |
最新更新
王炸!!IDEA 2021.1 推出语音、视频功能,
并发编程之ThreadLocal
为什么 DNS 协议使用 UDP?只使用了 UDP 吗
死磕Spring之AOP篇 - Spring AOP注解驱动与XM
学习笔记:Java中的数据结构——数组
Mybatis的日志工厂
rabbitmq五种模式详解(含实现代码)
rabbitmq五种模式详解(含实现代码)
ArryaList源码浅析
jasypt在springboot项目中遇到异常:Error cr
JAVA oa 办公系统模块 设计方案
MongoDB vs MySQL,哪个效率更高?
NoSql非关系型数据库之MongoDB应用(三):M
10分钟系列:NetCore3.1+EFCore三步快速完成数
NoSql非关系型数据库之MongoDB应用(一):安
NoSql非关系型数据库之MongoDB应用(二):安
【干货】SqlServer 总结几种存储过程分页的
SQLServer存储过程自制数据字典
MYSQL事务篇(高级篇)
mysql常用语句 3
Taro 3.4 beta 发布: 支持 Preact 为应用开辟
前端---梳理 http 知识体系 2
Java入门到架构师全新课程之JavaScript数据
构造函数与实例化之间的关系和原型的引
Vue库的使用
IIS安装和ASP.NET Web应用程序开发期间部署
ASP.NET MVC IOC依赖注入之Autofac系列开篇
ASP.NET中WebService的创建和部署以及通过反
ASP.NET Core Web 应用程序开发期间部署到I
ASP.NET Core Web 应用程序系列(一)- 使用