目录
前期准备:
基本概念了解:
什么是API?(看完你就理解了)_lph-China的博客-CSDN博客_api是什么
Python新手入门第一步:什么是 IDE?IDE 有什么用?_工程师大胖的博客-CSDN博客_ide
python和pycharm安装攻略:
本人一个晚上的血泪史,被大佬文章瞬间解决
Python安装教程(新手)_Hi梅的博客-CSDN博客_python安装教程
学!(我爱北理mooc)
Requests库入门
Requests库安装
win+R:进去后输入 pip install requests
然后用下面这段代码试验一下
import requests
r=requests.get("http://www.baidu.com")
r.status_code
#该请求的状态码。200表示连接成功
r.encoding='utf-8'
#改一下响应内容的编码方式
r.text
方法 | 说明 |
requests.request() | 构造一个请求,支撑一下各方法的基础方法 |
requests.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 |
Request库的get()方法
r=requests.get(url)
属性 | 说明 |
r.status_code | HTTP请求的返回状态,返回值为200即请求正常,404或其它表示失败 |
r.text | HTTP响应内容的字符串形式,即:url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding | 从内容中分析出的响应内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
观察下面这段代码输出的不同
import requests
r=requests.get("http://www.baidu.com")
print(r.status_code)
r.encoding
r.text
r.apparent_encoding
r.encoding=r.apparent_encoding
r.text
由概念可知
r.encoding表示猜测,而r.apprent_encoding由内容中分析出的,所以第二个r.text 出现了我们可以读懂的中文字符
r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1
r.apparent_encoding:根据网页内容分析出的编码方式,可以看作r.encoding的备选
encoding解码失败了,就要用这个
ps:r.text根据r.encoding显示网页内容,所以当选择使用apparent的时候记得赋值
爬取网页的通用代码框架
异常 | 说明 |
requests.ConnectionError | 网络连接错误异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequried | URL缺失严重 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生超时异常 |
requests.Timeout超时异常是全程的,而requests.ConnectTimeout仅指连接远程服务器
补充一条:
r=requests.get(url)
r.raise_for_status()在方法内部判断r.status_code是否等于200,便于使用try-except进行异常处理
来份通用框架
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=""#在引号中填写你想要爬取的网站的网址
print(getHTMLText(url))
HTTP协议及Requests库方法
url格式: http://host[:port][path]
host:域名或IP地址(必写)
port:端口号,http 默认端口为 80 ,可以省略。
path:路径,例如/view/index。
方法 | 说明 |
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应消息报告,即获取该资源的头部消息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖原URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
HTTP协议 | Requests库 | 功能一致性 |
GET | requests.get() | 一致 |
HEAD | requests.head() | 一致 |
POST | requests.post() | 一致 |
PUT | requests.put() | 一致 |
PATCH | requests.patch() | 一致 |
DELETE | requests.delete() | 一致 |
Requests库主要方法解析
requests.request(method,url,**kwargs)
mothod:请求方式:(7种)
r = requests.request(‘GET’,url,**kwargs)
r = requests.request(‘HEAD’,url,**kwargs)
r = requests.request(‘POST’,url,**kwargs)
r = requests.request(‘PUT’,url,**kwargs)
r = requests.request(‘PATCH’,url,**kwargs)
r = requests.request(‘DELETE’,url,**kwargs)
r = requests.request(‘OPTIONS’,url,**kwargs) 向服务器获取一些参数,一般不用
url:获取网页的url连接
kwargs:控制访问参数,共13个params:字典或字节序列,作为参数添加到URL中
data:字典、字节序列或文件对象。作为Requests的内容
json:json格式的数据,作为Request的内容
3分钟让你明白JSON是什么_FanBro的博客-CSDN博客_json
headers:字典,HTTP定制头
cookies:字典或CookieJar,或者request中的cookie
auth:元组,支持HTTP认证功能
files:字典类型,向服务器传输文件
timeout:设置超时时间,以秒为单位
proxies:字典类型,设定访问代理服务器,可以增加登录认证,防止爬虫逆追踪
allow_redirects:重定向开关,默认为True
stream:获取内容立即下载开关,默认为True
verify:认证SSL证书字段,默认为True
cert:本地SSL证书路径
Robots协议
Robots Exclusion Standard 网络爬虫排除标准
这玩意在哪看呢? 网站根目录下的 robots.txt 文件
http://www.().com/robots.txt
比如http://www.baidu.com/robots.txt
其中*代表所有,/代表根目录
User-agent: *
Disallow: /
这个就说明啥都不让你访问
https://www.moe.edu.cn/robots.txt
这个,咱国家教育部网站,就没有robots协议,说明可以乱爬
如果每天访问次数非常少,对服务器不造成资源巨大影响,从某种意义上算是类人行为,可以不遵守Robots协议