db52f9ba70e4d6de6d3fad2df5410a03.png
在之前“数据分析系列——数据分析入门”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

f6e1a5a2f1032fa8a5a9456f39962f97.png

url:拟获取页面的url链接

**kwargs:控制访问的参数,共13个(params/data/jason/headers/cookies/auth/files/timeout/proxies/allow_redirects/stream/verify/cert)

(2)get方法

a049128390d29ec8a325dc4de8cd06ae.png

6118f3cbc3d20c70d95ca81430c617da.png

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("产生异常")  

运行结果:

66ec7497461c69a6fde24b7251a116ff.png

三、小结

Requests库在获取网页数据时,非常方便,文中给的例子比较简单,根据实际需要爬取的网页特征某些参数可能会变化。

本章学习资源主要来自B站,包括后面的BeautifulSoup库的学习也时参考该教程。

Python网络爬虫教程(北理工 嵩天)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
f898b409aeeff1f9d0a72154fa764039.png
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐