您访问的网页出错了! 网络连接异常、网站服务器失去响应_数据分析系列——静态网页爬虫进阶(requests)...
在之前“数据分析系列——数据分析入门”16篇中有与爬虫的相关内容,介绍的相对简单。静态网页爬虫进阶系列将分别从网页的自动爬取(Requests)、网络数据解析(BeautifulSoup/Re)两个大的方向详细介绍静态网页爬取的一些知识和问题。一、入门系列中相关的一些内容数据分析系列——数据分析入门(二):基于API的爬虫,代码比较简单,实现功能有限数据分析系列——数据分析入门(三):网页爬虫所需
在之前“数据分析系列——数据分析入门”16篇中有与爬虫的相关内容,介绍的相对简单。静态网页爬虫进阶系列将分别从网页的自动爬取(Requests)、网络数据解析(BeautifulSoup/Re)两个大的方向详细介绍静态网页爬取的一些知识和问题。
一、入门系列中相关的一些内容
数据分析系列——数据分析入门(二):基于API的爬虫,代码比较简单,实现功能有限
数据分析系列——数据分析入门(三):网页爬虫所需的 HTML 基础
数据分析系列——数据分析入门(四):基于HTML网页的爬虫(urllib.request/BeautifulSoup)
数据分析系列——数据分析入门(五):反爬虫的一些技巧(休止时间/代理/Use-Agent)
数据分析系列——数据分析入门(六):一些静态网页的爬虫实例
二、Requests库
1.Requests与urllib.request的区别
- urllib.request
urlopen()方法能发起最基本请求,但是有两个问题:(1)urlopen()方法返回的是一个http.client.HTTPResponse对象,需要通过read()方法进一步的处理,然后用decode()进行解码,通常为utf-8,最终才获取到我们想要的网页,过程比较繁琐;(2)urllib.request只能先构造get,post等请求,再发起。
- Requests
equests比urllib更为便捷,requests可以直接构造get,post请求并发起;requests是对urllib的进一步封装,因此在使用上显得更加的便捷。
2.Requests库介绍
- Requests库的异常
requests.ConnectionError :网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError :HTTP错误异常
requests.URLRequired :URL缺失异常
requests.TooManyRedirects :超过最大重定向次数
requests.ConnectTimeout :连接远程服务器超时异常
requests.TooManyRedirects :请求URL超时,指整个访问过程中的出现的超时异常
r.raise_for_status :判断返回状态是否为200,是表示访问成功,如果不是则产生异常requests.HTTPError
【异常处理例子】
def getHTNLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding #从内容中分析出的响应内容编码方式(备用编码方式)
return r.text
except:
return '产生异常'
- Requests库主要方法
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
(1)request方法
requests.request(method,url,**kwargs)
method:请求方式,对应GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS
url:拟获取页面的url链接
**kwargs:控制访问的参数,共13个(params/data/jason/headers/cookies/auth/files/timeout/proxies/allow_redirects/stream/verify/cert)
(2)get方法
Response对象 r 包含服务器返回的所有信息,也包含请求的Request信息
r.text() :HTTP响应内容的字符串形式,即url对应的页面内容
r.encoding :从HTTP header 中参测的响应内容编码方式;如果header中不存在charset,则认为编码为ISO-8859-1,该编码不能解析中文
r.apparent_encoding :从内容中分析出的响应内容编码方式(备用编码方式)
r.content HTTP:响应内容的二进制形式
3.案例
import requests
url = 'http://news.carnoc.com/cache/list/news_hotlist_1.html'
try:
r = requests.get(url)
r.raise_for_status() #如果状态不是200,引发HTTPEroor
r.encoding = r.apparent_encoding
print(r.text)
except:
print("产生异常")
运行结果:
三、小结
Requests库在获取网页数据时,非常方便,文中给的例子比较简单,根据实际需要爬取的网页特征某些参数可能会变化。
本章学习资源主要来自B站,包括后面的BeautifulSoup库的学习也时参考该教程。
Python网络爬虫教程(北理工 嵩天)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)