Python网络爬虫与信息提取 网络爬虫之规则
2017-03-14 14:46
656 查看
一、Requests库入门
1.1 Requests库的安装
1、Requests库是Python的第三方库,它也是公认最好爬取网页的库。它的特点是:简单,简洁。Request库更多信息查询网站:Requests库。2、Requests安装
在命令行中输入下列代码
pip install requests
它会帮我们自动下载并安装requests库,版本为(2.13.0),要使用最新的pip,如果不是最新的使用
python -m pip install --upgrade pip
更新pip。
3、Requests测试
打开Python IDLE,按下图进行测试,如果没有任何报错,说明requests库安装成功。
4、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():像HTTP网页提交局部修改请求,对应于HTTP的PATCH
(7)
requests.delete():向HTML页面提交删除请求,对应于HTTP的DELETE
1.2 Requests库的get()方法
1、获取一个网页最简单的一个代码就是r = requests.get(url)
这里我们构造一个向服务器请求资源的Request对象,返回一个包含服务器资源的Response对象(Python区分大小写)
2、Requests库的get()方法的完整使用是
requests.get(url,params=None,**kwargs)
url:拟获取网页的url链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数,可选。
我们打开get()的源码
发现它使用了
request()方法来封装。
3、Response对象
Response包含了所有返回的全部信息,也包含了所有Requests的全部信息。
r.status_code表示get()请求的状态码,如果状态码是200,说明访问成功。
type(r)用来检测r的类型,这里表示它返回的是一个
class,这个
class是一个
response。
r.headers返回
get()获得页面的头部信息。
4、Response对象的5个属性
(1)
r.status_code:HTTP请求的返回状态,200表示连接成功,404表示失败。
(2)
r.text:HTTP响应内容的字符串形式,即,url对应的页面内容。
(3)
r.encoding:从HTTP header中猜测的响应内容编码方式。如果header中不存在charset,则认为编码为IOS-8859-1。
(4)
r.apparent_encoding从内容中分析出的响应内容编码方式(备选编码方式)。
(5)
r.contet:HTTP响应内容的二进制形式。
1.3 爬取网页的通用代码框架
1、由于网络连接又风险,所以我们需要做异常处理。2、Requests库的异常
(1)
requests.ConnectionError:网络连接错误异常,如DNS查询失败、拒绝连接等
(2)
requests.HTTPError:HTTP错误异常
(3)
requests.URLRequired:URL缺失异常
(4)
requests.TooManyRedirects:超过最大重定向次数,产生重定向异常
(5)
requests.ConnectTimeout:连接远程服务器时异常
(6)
requests.Timeout:请求URL超时,产生超时异常。
(7)
r.raise_for_status()如果不是200,产生异常
requests.HTTPError。
3、示例代码
import requests def getHTMLText(url): try: r=requests.get(url,timeout=300) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: return "产生异常" if __name__ == "__main__": url = "http://www.baidu.com" print(getHTMLText(url)) url = "www.baidu.com" print(getHTMLText(url))
爬取网页的通用代码框架是指
def getHTMLText(url)部分,需要有异常处理。
1.4 HTTP协议及Requests库方法
1、HTTP协议HTTP(Hypertext Transfer Protocol,超文本传输协议)是一个基于“请求与响应”模式的、无状态的应用层协议。
2、HTTP协议采用URL作为定位网络资源的标识。
3、URL格式:
http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,缺省端口为80
path:请求资源的路径
4、URL市通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
5、HTTP协议对资源的操作
(1)
GET:请求获取URL位置的资源
(2)
HEAD:请求获取URL位置资源的响应消息报告
(3)
POST:请求向URL位置的资源后附加新的数据
(4)
PUT:请求URL位置存储一个资源,覆盖原URL位置资源
(5)
PATCH:请求局部更新URL位置的资源,即改变该处资源的部分内容
(6)
DELETE:请求删除URL位置存储的资源。
6、HTTP协议对资源的操作
7、PATCH和PUT的区别
假设URL位置有一组数据UserName、UserID等20个字段。
需求:用户修改UserName,其他不变
(1)采用PATCH,仅向URL提交UserName的局部更新请求
(2)采用PUT,必须将所有20个字段一并提交到URL,否则未提交字段被删除。
1.5 Requests库主要方法解析
1、requests.request()
requests.request(method,url,**kwargs)
method:请求方式,对应get/put/post等7种
requests.request('GET',url,**kwargs) requests.request('HEAD',url,**kwargs) requests.request('POST',url,**kwargs) requests.request('PUT',url,**kwargs) requests.request('PATCH',url,**kwargs) requests.request('delete',url,**kwargs) requests.request('OPTIONS',url,**kwargs)
url:拟获取网页的url链接
**kwarges:13个控制访问的参数,可选。
params:字典或字节序列,作为参数增加到url中
data:字典、字节序列或文件对象,作为Requests的内容
json:JSON格式的数据,作为Requests的内容
headers:字典,HTTP定制头
cookies:字典或CookieJar,Request中的cookie
auth:元祖,支持HTTP认证功能。
file:字典类型,传输文件
timeout:设定超时时间,秒为单位
proxies:字典类型,设定访问代理服务器,可以增加登录认证。
allow_redirects:True/False,默认为True,重定位开关
stream:True/False,默认为True,获取内容立即下载开关
verify:True/False,默认为True,认证SSL证书开关
cert:本地SSL证书路径
2、
requests.get()
requests.get(url,params=None,**kwargs)
url:拟获取网页的url链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数,可选。除了
params,其他都跟request一样。
3、
requests.head()
requests.head(url,**kwargs)
url:拟获取网页的url链接
**kwargs:13个控制访问的参数,可选。
4、
requests.post()
requests.post(url,data=None,json=None,**kwargs)
url:拟获取网页的url链接
data:字典、字节序列或文件,Request的内容
json:JSON格式的数据,Request的内容
**kwargs:11个控制访问的参数,可选。
4、
requests.put()
requests.put(url,data=None,**kwargs)
url:拟获取网页的url链接
data:字典、字节序列或文件,Request的内容
**kwargs:12个控制访问的参数,可选。
5、
requests.patch()
requests.patch(url,data=None,**kwargs)
url:拟获取网页的url链接
data:字典、字节序列或文件,Request的内容
**kwargs:12个控制访问的参数,可选。
6、
requests.delete()
requests.put(url,**kwargs)
url:拟获取网页的url链接
**kwargs:13个控制访问的参数,可选。
二、网络爬虫的“盗亦有道”
2.1 网络爬虫引发的问题
1、网络爬虫的尺寸2、网络爬虫引发的问题
(1)性能骚扰
(2)法律风险
(3)隐私泄露
3、网络爬虫的限制
(1)来远审查:判断User-Agent进行限制,检查来访问HTTP协议头的User-Agent域,只能响应浏览器或友好爬虫的访问
(2)发布公告:Robots协议,告知所有爬虫网站的爬取策略,要求爬虫遵守。
4、Robots协议(Robts Exclusion Standard,网络爬虫排除标准),其作用是网站告知网络爬虫哪些页面可以抓取,哪些不行,形式是在网站根目录下的robots.txt文件。
5、Robots协议基本语法
# 注释,*代表所有,/代表根目录 User-agent: * Disallow: /
6、Robots协议的使用
网络爬虫:自动或人工识别robots.txt,再进行内容爬取
约束性:Robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险
7、对Robots协议的理解
相关文章推荐
- Python网络爬虫与信息提取(一):网络爬虫之规则
- Python网络爬虫与信息提取(二):网络爬虫之提取
- Python网络爬虫与信息提取-Day4-网络爬虫及Robots协议
- Python网络爬虫与信息提取(三):网络爬虫之实战
- Python网络爬虫与信息提取(三):网络爬虫之实战
- Python网络爬虫与信息提取(二):网络爬虫之提取
- python网络爬虫笔记之信息提取
- 网络爬虫:使用Scrapy框架编写一个抓取书籍信息的爬虫服务
- 网络爬虫--之爬起校招信息代码
- 通用网络信息采集器(爬虫)设计方案
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息及ISBN码
- 【网络安全】Snort漏洞分析规则提取验证全流程讲述
- java验证身份证号码及编码规则和提取相应信息
- java验证身份证号码及编码规则和提取相应信息
- 网络爬虫--python抓取豆瓣同城北京地区活动信息
- 网易页面的网络爬虫,获取网易页面的所有文本信息
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
- HTMLParser入门_02_网络爬虫的雏形_解析文章的主题和作者及关键字等信息
- 提取网络接口信息
- CrawlScript语言轻松实现网络爬虫——轻松爬取整站信息