学习目的:
掌握定向网络数据爬取和网页解析的基本能力
the Website is the API…
1 python ide
文本ide:IDLE,Sublime Text
集成ide:Pycharm,Anaconda&Spyder,Wing,Visual Studio & PTVS,Eclipse & PyDev,Canopy
默认源太慢:
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) https://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 https://pypi.mirrors.ustc.edu.cn/simple/
2 网络爬虫规则
2.1 Requests库 自动爬取html页面
#安装方法 管理员权限启动cmd安装
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
#测试下
#requests库7个主要方法:
a、requests.request() 构造一个请求,支撑以下各方法的基础方法
b、requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
c、requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
d、requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST
e、requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
f、requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
g、requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE
r = requests.get(url)
r是返回一个包含服务器资源的Response对象,右边是构造一个向服务器请求资源的Request对象
requests.get(url,params=None,**kwargs) 完整格式
params:url中的额外参数,字典或者字节流格式可选
**kwargs:12个控制访问参数可选
打开源码可知,get方法是调用requests方法封装的,实际上7个方法中,其余6个都是由request方法封装
Response对象常用5个属性
r.status_code HTTP请求的返回状态,200表示连接成功,404表示失败
r.text HTTP响应内容的字符串形式,即,url对应的页面内容
r.encoding 从HTTP header中猜测的响应内容编码方式,如果header中不存在charset,则认为编码为ISO-8859-1
r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)
r.content HTTP响应内容的二进制形式
requests库异常
requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError HTTP错误异常
requests.URLRequired URL缺失异常
requests.TooManyRedirects 超过最大重定向次数,产生重定向异常
requests.ConnectTimeout 连接远程服务器超时异常
requests.Timeout 请求URL超时,产生超时异常
爬取网页的通用代码框架
import requests
def getHTMLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return “产生异常”
if __name__ == “__main__”:
url = “http://www.baidu.com”
print(getHTMLText(url))
http协议对资源的6中操作:
GET 请求获取URL位置的资源
HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头部信息
POST 请求向URL位置的资源后附加新的数据
PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE 请求删除URL位置存储的资源
通过URL和命令管理资源,操作独立无状态,网络通道及服务器成为了黑盒子
理解PATCH和PUT的区别:
假设URL位置有一组数据UserInfo,包括UserID、UserName等20个字段
需求:用户修改了UserName,其他不变
. 采用PATCH,仅向URL提交UserName的局部更新请求
. 采用PUT,必须将所有20个字段一并提交到URL,未提交字段被删除
PATCH的最主要好处:节省网络带宽
http协议与requests库功能是一致的
requests.request()
requests.request(method, url, **kwargs)
method : 请求方式,对应get/put/post等7种
? url : 拟获取页面的url链接
? **kwargs: 控制访问的参数,共13个
method : 请求方式
r = requests.request(‘GET’, url, **kwargs)
r = requests.request(‘HEAD’, url, **kwargs)
r = requests.request(‘POST’, url, **kwargs)
r = requests.request(