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

课程设置.png

◆1◆ requests库的7种主要方法

方法 说明
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

◆ requests.get()方法

r = requests.get(url)
构造一个向服务器请求的Request(大写)对象,返回一个包含服务器资源的Response(大写)对象,用变量r表示。
其完整使用方法为:
requests.get(url,params=None,**kwargs)

  • url:拟获取页面的url链接
  • params:url中的额外参数,字典或字节流格式,可选
  • **kwargs:12个控制访问的参数
import requests
r = requests.get('http://www.baidu.com')
print(r.status_code)  # 状态码,200表示访问正常
print(type(r))  # 可以看到Response为一个类
print(r.headers)  # 获取头部信息

输出:

200
<class 'requests.models.Response'>
{'Server': 'bfe/1.0.8.18', 'Date': 'Sat, 06 Jan
2018 07:42:41 GMT', 'Content-Type':

**kwargs:12个控制访问的参数(参考)
参数1 params
params指能够增加到url中的参数

>>> import requests
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('GET', 'http://python123.io/ws', params = kv)
>>> print(r.url)
https://python123.io/ws?key1=value1&key2=value2

在给定的url中后面多了一个问号,问号后面key1=value1,&key2=value2。通过parame参数,我们可以把一些键值对增加到url中,然后再去访问,服务器根据这些参数筛选部分资源返回。
参数2 data
data,它可以是字典、字节序列或文件对象,作为向服务器提供或提交资源时使用。
参数3 json
json格式是http协议使用的最经常使用的数据格式,作为内容部分可以向服务器提交,比如说用字典构造一个键值对,可以把它复制给json参数,那么这个键值对就复制到服务器的json里面。

>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('POST', 'http://python123.io/ws', json= kv)

参数4 headers
headers实际上是http头的相关语句,它对应了向某一个url访问时所发起的http的头字段,可以用这个字,来定制访问某一个url的http的协议头,举个例子:

>>> hd = {'user-agent': 'Chrome/10'}
>>> r = requests.request('POST', 'http://python123.io/ws', headers = hd)

把user-agent变为Chrome/10,那么在访问某一个链接时,我们可以把这样的字段赋给headers,此时headers再去向服务器访问时服务器看到的user-agent字段就是Chrome/10
参数5 cookies 和 auth
cookies和auth都是requests库的高级功能。
cookies指的是从http协议中解析cookie, 它可以是字典,也可以是CookieJar形式。
auth字段是一个元组类型,它是支持http认证功能的
参数6 files
顾名思义,它是向服务器传输文件时使用的字段。我们可以定义一个字典,用File,以对应的文件为键值对,用open的方式打开这个文件,并把这个文件与files做一个关联,同时对应到相关的url上。通过这样的方法,我们可以向某一个链接提交某一个文件,这个在特定应用时还是非常有用的。

>>> fs = {'file': open('data.txt', 'rb')}
>>> r = requests.request('POST', 'http://python123.io/ws', files= fs)
>>>

参数7 timeout
Timeout设定的超时时间,以秒为单位。当我们发起一个get请求时,我们可以设一个timeout时间,如果在timeout时间内,我们的请求内容没有反馈回来,那么它将产生一个timeout的异常。

>>> r = requests.request('POST', 'http://python123.io/ws', timeout= 10)
>>>

参数8 Proxies
Proxies字段,他是一个字典类型,可以为我们爬取网页,设定相关的访问代理服务器。这里我们增加两个代理:

>>> pxs = {'http': 'http://user:pass@10.10.10.10:1234''https': 'https://10.10.10.10:4321'
>>> r = requests.request('GET', 'http://www.baidu.com', proxies= pxs)
>>>

第一个是http访问时使用的代理,在这代理中,我们可以增加用户名跟密码的设置。后面是一个https的代理服务器,这样我们在访问百度时的ip地址,就是代理服务器的ip地址。使用这个字段可以有效的隐藏用户爬取网页的源的ip地址信息,能够有效地防止对爬虫的逆追踪
其他参数
allow_redirects 和 stream
这两个字段都是开关字段。
allow_redirects表示允不允许对url进行重定向。
stream指对获取的内容是否进行立即下载,默认情况是立即下载。
verify 和 cert
verify是一个认证ssl证书的字段。
cert是保存本地ssl证书路径的字段。
Response的5个属性

方法 说明
r.status_code HTTP请求的返回状态,200表示连接成功
r.text HTTP相应内容的字符串形式即url对应的页面内容
r.encoding 从HTTPheader中猜测的相应内容编码方式
r.apparent_encoding 从内容中分析的响应内容编码方式
r.content HTTP响应内容的二进制形式

r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1

requests库常用的6种连接异常

requests库的异常

爬取网页的通用代码框架

import requests
def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return '产生异常'if __name__ == '__main__':url = 'http://www.baidu.com'print(getHTMLText(url))

raise_for_status()方法
Response类提供了一个raise_for_status()方法,能够判断返回的Response类型状态是不是200。如果是200,他将表示返回的内容是正确的,如果不是200,他就会产生一个异常。

◆ requests.head()方法

>>> import requests
>>> r = requests.head('http://www.cnblogs.com/zhang-anan/')
>>> r.headers
{'Date': 'Sun, 07 Jan 2018 08:21:35 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'Cache-Control': 'private, max-age=10', 'Expires': 'Sun, 07 Jan 2018
08:21:45 GMT', 'Last-Modified': 'Sun, 07 Jan 2018 08:21:35 GMT', 'X-UA Compatible': 'IE=10', 'X-Frame-Options': 'SAMEORIGIN', 'Content-Encoding': 'gzip'}
>>> r.text
''

通过requests.head()方法可以较少流量获取网页资源的概要信息。

◆2◆ HTTP协议对资源的操作

HTTP协议对资源的操作

HTTP(HyperText Transfer Protocol)指的是超文本传输协议。超文本传输协议是一种基于请求与响应模式的无状态的应用层协议。

  • 请求与响应模式:用户发起请求,服务器做相关响应。
  • 无状态:指的是第一次请求,跟第二次请求之间,并没有相关的关联。
  • 应用层协议:指的是该协议工作在tcp协议之上

作者:有雨敲窗2017
链接:https://www.jianshu.com/p/1b0cc1a954a8
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

爬虫笔记1-Requests库的基本方法相关推荐

  1. Python 网络爬虫笔记1 -- Requests库

    Python 网络爬虫笔记1 – Requests库 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyt ...

  2. Python 网络爬虫笔记2 -- Requests库实战

    Python 网络爬虫笔记2 – Requests库实战 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:P ...

  3. 爬虫笔记:Requests库详解

    什么是Requests 之前讲解了爬虫笔记:Urllib库详解发现确实有不方便的地方,比如加一个代理,cookie,发送post请求比较繁琐. Request库能用几句话实现这些. Requests ...

  4. 爬虫笔记(一)——Requests库

    文章目录 写在前面 一.Requests库入门 1.Requests库的安装 (1)安装Requests库 (2)测试Requests库 2.Requests库的get()方法 (1) get()方法 ...

  5. post提交调用的却是doget方法_Python基础教程 | Requests库的使用方法和细节

    下面我就给大家整理了Requests库的使用方法和细节. 什么是Requests Requests是Python语言编写,基于urllib3,采用Apache2 Licensed开源协议的HTTP库. ...

  6. 从零开始写Python爬虫---1.1 requests库的安装与使用

    什么是爬虫? 爬虫本质上是模拟人浏览信息的过程,只不过他通过计算机来达到快速抓取筛选信息的目的.所以我们想要写一个爬虫,最基本的就是要将我们需要抓取信息的网页原原本本的抓取下来.这个时候就要用到req ...

  7. 爬虫系统基础框架 何时使用爬虫框架? requests库 + bs4来实现简单爬虫

    转载请注明出处https://www.cnblogs.com/alexlee666/p/10180519.html,谢谢! 文中图片来自于我的简书博客. 一. 爬虫用途和本质: 网络爬虫顾名思义即模仿 ...

  8. python怎么安装requests库-Python3.6安装及引入Requests库的实现方法

    本博客可能没有那么规范,环境之类的配置.只是让你直接开始编程写python. 至于各种配置网络上有多种方法. 本文仅代表我的观点的一种方法. 电脑环境:win10 64位 第一步:下载python. ...

  9. python用代码安装3.6_Python3.6安装及引入Requests库的实现方法

    本博客可能没有那么规范,环境之类的配置.只是让你直接开始编程写python. 至于各种配置网络上有多种方法. 本文仅代表我的观点的一种方法. 电脑环境:win10 64位 第一步:下载python. ...

  10. Python学习笔记:requests库

    Python学习笔记:requests库 利用requests这个功能强大的网络请求库,可以像浏览器一样发送各种HTTP请求来获取网站的数据. 一.运行环境 1.系统版本:Windows 10 2.P ...

最新文章

  1. ASP.NET中的加密方法介绍
  2. shell相关测验题
  3. OpenCASCADE:常用Inspector控件之3D 视图
  4. linux中/etc/passwd文件与/etc/shadow文件解析
  5. 通过一个实际例子学习SAP UI5的控件绘制和渲染
  6. 判断集合相等_数学启蒙的每个关键阶段之集合分类
  7. bzoj 4320: ShangHai2006 Homework
  8. LD_PRELOAD用法总结
  9. jquery比较时间大小
  10. DM7数据库ODBC的配置详解
  11. 锐捷交换机常用命令速查
  12. 使用Struts之ActionForm
  13. #10098. 「一本通 3.6 例 1」分离的路径
  14. java 感想_Java课程感想
  15. java使用java.lang.Math类,生成100个0-99之间的随机整数,并找出它们中间的最大值和最小值,并统计大于50的整数的个数。打印3次运行结果,看是否相同。
  16. 浙大竺可桢学院混合班计算机专业,起底黄峥毕业的浙大混合班:学霸不算牛 个个是学神...
  17. 1.贝尔曼方程(Bellman equation)
  18. linux发行版本排行,2020年10种最受欢迎的Linux发行版排名
  19. 交互设计期末大作业(Photoshop期末作业)
  20. 继承者的难题:李在镕能否接班三星?

热门文章

  1. 网络安全以及常见的网络攻击
  2. Tomcat7下配置SSI,同时解决中文乱码问题
  3. 跟燕十八学习PHP-第二十八天-union用法深入讲解
  4. 武汉Apache Hadoop大数据平台,金融行业如何搭建大数据平台?数据采集、分析、处理如何实现?...
  5. base64位 解码图片
  6. (1)Jenkins Linux环境下的简单搭建
  7. sysctl.conf文件配置详解
  8. iOS开发之runtime的运用-获取当前网络状态
  9. Gartner:2015年全球MSS市场分析
  10. 在一个字符串中找到第一个只出现一次的字符。