【网络爬虫学习】_Requests库_1

Python网络爬虫与信息提取

  • 掌握定向网络数据爬取和网页解析的基本能力

the website is the API

第一周

  • requests库入门
  • 网络爬虫的盗亦有道
  • requests库的网络爬虫实例

Requests库的7个主要方法

  1. requests.request() 构造一个请求,支撑以下各方法的基础方法
  2. requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
  3. requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
  4. requests.post() 向HTML网页提交post请求的方法,对应于HTTP的post
  5. requests.put() 向HTML网页提交put请求的方法,对应于HTTP的put
  6. requests.patch() 向HTML网页提交局部修改的请求,对应于HTTP的patch
  7. requests.delete() 向HTML网页提交删除请求,对应于HTTP的delete

get()方法

r = requests.get(url)  

来构造一个向服务器请求资源的request对象
这个对象是requests库内部生成的
因为Python是大小写敏感的,所以Requests的R是大写的
返回一个包含服务器资源的Response对象
这里的r就是一个Response对象
get()函数完整的有三个参数,也就是

requests.get(url,params=None,**kwargs)  
  • url:是获得页面的url链接
  • params:url中的额外参数,字典或者字节流格式,可选,在url后面添加一些东西
  • **kwargs:12个控制访问的参数

就是说其实只有一个request()方法,其余的六个方法都是由request()方法而来的

Response对象的属性

  • r.status_code :HTTP请求的返回状态,200表示连接成功,404表示失败
  • r.text :HTTP相应内容的字符串形式,即,url对应的页面形式
  • r.encoding :从HTTP header中猜测出相应内容编码形式
  • r.apparent_encoding :从内容中分析出的相应内容编码方式(备选编码方法)
  • r.content :HTTP响应内容的二进制形式

理解Response的编码
r.encoding : 从HTTP header中猜测的响应内容编码方式
r.apparent_encoding : 从内容中分析出响应内容编码方式

  • 就是第一个encoding的编码方式是从header中的charset字段中获得的,就是指这一个编码是有一些要求的,但是如果没有charset字段的话,就指这一段编码是没有什么要求的,这个时候我们就认为编码为ISO-8859-1
  • 但是这样的一个编码并不能解析中文,所以Requests库提供了另外一个编码,这个编码不是依据头部份而来依据他的内容部分来分析这些内容,所以会有更多的中文⑧
  • 其实就是encoding编码只是从头部提取内容出来,而apparent_encoding是从内容实实在在的分析并得出该要提出的数据
  • 所以如果我们使用encodin得出内容时,要试一试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    

就是能够判断返回的response的类型

通用网页的通用代码框架

import requests  

def getHTMLTxet(url):  
	try:  
		r = requests.get(url, timeout=30)  
		r.raise_for_status() # 如果状态不是200,引发HTTPError异常  
		r.encoding = r.apparent_encoding  
		return r.text  
	except:  
		return "产生异常"  

HTTP协议

  • HTTP协议:Hypertext Transfer Protocol ,超文本传输协议
  • 是一个基于“请求与响应的”模式的,无状态的应用层协议
  • 该协议工作在TCP协议之上

URL格式 http://host[:port][path]

  • host:合法的Internet主机域名或IP地址
  • port:端口号,缺省端口为80
  • path: 请求资源的路径

eg:
http://220.181.111.188/duty
指一台这样子的主机的duty下的所有资源

HTTP URL的理解:
URL是指通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源

HTTP协议对资源的操作有六种

  • GET :获得全部资源
  • HEAD :获得资源的头部信息
  • POST :在其后新增数据资源
  • PUT :我们用我们自己的资源放进去,将旧的cover掉
  • PATCH :局部更新(相当于补丁)
  • DELETE

然后就是如果我们post或者put一些数据,如果我们put的数据是ABC,那么系统会自动分为data一类,如果是一些键值对,字典什么的,系统会分在form表单中

requests.request(method,url,**kwargs)

  • method:请求方法
    • 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:是链接大家都知道了
  • **kwargs:控制访问的参数,均为可选项
    • params:字典或字节序列,作为参数增加到url中
    • data:字典,字节序列或文件对象,作为Request的内容
    • json:JSON格式的数据,作为Request的内容
    • header: 字典,可以用这个字段来定制访问HTTP的定制头
      hd = {'user-agent' : 'Chrome/10'}  
      r = requests.request('POST', 'http://python123.io/ws', headers=hd)  
      # 就是相当于把user——agent字段给替换成了Chrome/10这种
      
    • cookies : 字典或者CookieJar,Request中的cookie
    • auth:元组,支持HTTP认证功能
    • file:字典类型,传输文件 (向某一个链接提供一个文件)
    • timeout:设定超时时间,秒为单位
    • proxies:字典类型,设定访问代理服务器,可以增加登陆认证
    • allow_redirects:True/False,默认为True,重定向开关,也就是一个开关
    • stream
    • verify
    • cert :本地ssl认证字段

单元小结

  • 一般都是会使用get()和head()方法
  • 一般来说网络连接有风险,所以我们一定要用try什么的来进行异常处理
r.request.url
# 是指response里包含的request信息  
# 是指发给一些东西的request里对应的信息是什么
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值