MOOC-Python网络爬虫与信息提取-知识总结
requests库
通过r=requests.get(url)来构造一个向服务器请求资源的request对象,返回一个包含服务器资源的response对象
r是response对象
requests.get(url,params=None,**kwargs)
url:获取页面的链接
params:url中的额外参数,字典或者字节流格式
**kwargs:12个控制访问的参数
import requests
r=requests.get(“http://www.baidu.com”)
print(r.status_code)200 ***显示200表示访问成功
type®
<<class 'requests.models.Respose'>
r.headers
{‘Cache-Control’: ‘private, no-cache, no-store, proxy-revalidate, no-transform’, ‘Connection’: ‘keep-alive’, ‘Content-Encoding’: ‘gzip’, ‘Content-Type’: ‘text/html’, ‘Date’: ‘Fri, 08 May 2020 05:42:22 GMT’, ‘Last-Modified’: ‘Mon, 23 Jan 2017 13:27:36 GMT’, ‘Pragma’: ‘no-cache’, ‘Server’: ‘bfe/1.0.8.18’, ‘Set-Cookie’: ‘BDORZ=27315; max-age=86400; domain=.baidu.com; path=/’, ‘Transfer-Encoding’: ‘chunked’}
状态 | 说明 |
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响应内容的二进制形式 |
当返回的信息不能正确解码时,需要用apparent_encoding
import requsts
r=requests.get(“http://www.baidu.com”)
r.status_code200
r.encoding
r.apparent_encoding
r.encoding=‘utf-8’
r.text
requests库 异常处理
异常 | 说明 |
requests.ConnectionError | 网络连接错误异常,如DNS查询失败、拒绝连接 |
requests.HTTPError | HTTP错误异常 |
requests.URLRwquired | URL缺失异常 |
request.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生超时异常 |
r.raise_for_status() | 如果不是200,产生异常requests.HTTPError |
connect仅指与远程服务器,timeout指从发出请求开始到获得内容
通用代码框架使爬取更有效
>try:
> r=requests.get(url,timeout=30)
> r.raise_for_status()
> r.encoding=r.apparent_encoding
> return r.text
>except:
> return "产生异常"
HTTP协议,超文本传输协议,基于“请求与响应”模式的、无状态的应用层协议。采用URL作为定位网络资源的标识。
URL格式 http://host[:port][path]
host:合法的Internet主机域名或IP 地址
port:端口号,默认为80
path:请求资源的内部路径
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。 事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
HTML(HyperText Mark-up Language)即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。设计HTML语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。我们只需使用鼠标在某一文档中点取一个图标,Internet就会马上转到与此图标相关的内容上去,而这些信息可能存放在网络的另一台电脑中。 HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、动画、声音、表格、链接等。HTML的结构包括头部(Head)、主体(Body)两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。
HTTP协议对资源的操作
方法 | 说明 |
GET | 请求获取URL位置的资源 |
HEAD | 请求获取URL位置资源的响应信息报告,即获得该资源的头部信息 |
POST | 请求向URL位置的资源后附加新的数据 |
PUT | 请求向URL位置存储一个资源,覆盖原本URL位置的资源 |
PATCH | 请求局部更新URL位置的资源,即改变该处资源的部分内容 |
DELETE | 请求删除URL位置存储的资源 |
requests库的7个主要方法
方法 | 说明 |
requests.request() | 构造一个请求,支持以下各方法的基础方法 |
request.get() | 获取HTML网页的主要方法,对应于HTTP的get |
requests.head() | 获取HTML网页头信息的方法,对应于HTTP的head |
requests.post() | 向HTML网页提交post请求方法,对应于HTTP的post |
requests.put() | 向HTML网页提交put请求 |
requests.patch() | 向HTML网页提交局部修改请求 |
requests.delete() | 向html网页提交删除请求 |
post put 会根据用户提交信息做相关整理
requests.request(method,url,**kwargs)
method:请求方式,对应(‘GET’,‘HEAD’,‘POST’,‘PUT’,‘PATCH’,‘delete’,‘OPTIONS’)
options:获取和服务器打交道用到的参数,平时使用较少
**kwargs | 12个控制访问的参数,均为可选项 |
params | 字典或者字节序列,作为参数增加到url中 |
data | 字典、字节序列或文件对象,作为request的内容 |
json | JSON格式的数据,作为request的内容,向服务器提交 |
headers | 字典,HTTP定制头,可以模拟任何想模拟的浏览器向服务器发起访问 |
cookies | 字典或者CookieJar,Request中的cookie |
auth | 元组,支持HTTP认证功能 |
files | 字典类型,传输文件 |
timeout | 设定超时时间,秒为单位 |
proxies | 字典类型,设定访问代理服务器,增加登录认证,隐藏用户爬取服务器的访问地址 |
allow_redirects | True/False,默认为True,重定向开关 |
stream | True/False,默认为True,获取内容立即下载开关 |
verify | True/False,默认为True,认证SSL证书开关 |
cert | 本地SSL证书路径 |
网络爬虫的尺寸
规模 | 库 | 用途 |
小规模,数据量小爬取速度不敏感 | Requests库 | 爬取网页 |
中规模,数据规模较大爬取速度敏感 | Scrapy库 | 爬取网站 |
大规模,搜索引擎爬取速度关键 | 需要定制开发 | 爬取全 |
网络爬虫的限制
来源审查:判断User—Agent进行限制
检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问。
发布公告:Robots协议
告知所有爬虫网站的爬取策略,要求爬虫遵守。
Robots协议基本语法
协议存储robots.txt
User—agent:*
Disallow:/
即对所有用户而言,/目录下的不允许爬取