1. Python爬虫基本流程
a. 发送请求
使用http库向目标站点发起请求,即发送一个Request,Request包含:请求头、请求体等。
Request模块缺陷:不能执行JS 和CSS 代码。
b. 获取响应内容
如果requests的内容存在于目标服务器上,那么服务器会返回请求内容。
Response包含:html、Json字符串、图片,视频等。
c. 解析内容
对用户而言,就是寻找自己需要的信息。对于Python爬虫而言,就是利用正则表达式或者其他库提取目标信息。
解析html数据:正则表达式(RE模块),第三方解析库如Beautifulsoup,pyquery等
解析json数据:json模块
解析二进制数据:以wb的方式写入文件
d. 保存数据
解析得到的数据可以多种形式,如文本,音频,视频保存在本地。
数据库(MySQL,Mongdb、Redis)
文件
2. Requests库入门
Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库。
2.1 Requests库安装和测试
安装:
Win平台:以“管理员身份运行cmd”,执行 pip install requests
测试:
2.2 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.request(method,url,**kwargs)
method:请求方式,对应get/put/post等7种
url:获取页面的url链接
**kwargs:控制访问的参数,均为可选项,共以下13个
params:字典或字节系列,作为参数增加到url中
\>>> 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
data:字典、字节系列或文件对象,作为requests的内容
\>>> kv = {'key1':'value1','key2':'value2'}
>>> r = requests.request('POST','http://python123.io/ws',data=kv)
>>> body = '主题内容'
>>> r = requests.request('POST','http:///python123.io/ws',data=body)
json:JSON格式的数据,作为equests的内容
\>>> kv = {'key1':'value1','key2':'value2'}
>>> r = requests.request('POST','http://python123.io/ws',json=kv)
headers:字典,HTTP定制头
\>>> hd = {'user-agent':'Chrome/10'}
>>> r = requests.request('POST','http://www.baidu.com',headers=hd)
cookies:字典或cookieJar,Request中的cookie
files:字典类型,传输文件
\>>> f = {'file':open('/root/po.sh','rb')}
>>> r = requests.request('POST','http://python123.io/ws',file=f)
timeout:设置超时时间,秒为单位。
\>>> r = requests.request('GET','http://python123.io/ws',timeout=30)
proxies:字典类型,设置访问代理服务器,可以增加登录验证。
\>>> pxs = {'http':'http://user:pass@10.10.10.2:1234',
... 'https':'https://10.10.10.3:1234'}
>>> r = requests.request('GET','http://www.baidu.com',proxies=pxs)
allow_redirects:True/False,默认为True,重定向开关
stream:True/False,默认为True,获取内容立即下载开关
verify:rue/False,默认为True,认证SSL证书开关
Cert:本地SSL证书路径
auth:元组类型,支持HTTP认证功能
2.3 Requests库的get()方法
2.4 Requests的Response对象
Response对象包含服务器返回的所有信息,也包含请求的Request信息
Response对象的属性
2.5 理解Response的编码
注意:编码为ISO-8859-1不支持编译中文,需要设置 r = encoding=“utf-8”
2.6 理解Requests库的异常
Requests库支持常见的6种连接异常
注意:网络连接有风险。异常处理很重要。raise_for_status()如果不等于200则产生异常requests.HTTPError。
2.7 爬取网页的通用代码框架
import requests
def getHTMLText(url):
try:
r \= requests.get(url,timeout=30)
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))
- 网络爬虫的“盗亦有道”:Robots协议
robots是网站跟爬虫间的协议,robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。
网络爬虫的尺寸:
3.1 网络爬虫引发的问题
a. 网络爬虫的“性能”骚扰
web默认接受人类访问,由于网络爬虫的频繁访问会给服务器带来巨大的额资源开销。
b. 网络爬虫的法律风险
服务器上的数据有产权归属,网络爬虫获取数据牟利将带来法律风险
c. 网络爬虫的隐私泄露
网络爬虫可能具备突破简单控制访问的能力,获取被保护的数据从而泄露个人隐私。
3.2 网络爬虫限制
a. 来源审查:判断User-Agent进行限制
检查来访HTTP协议头的user-agent域,只响应浏览器或友好爬虫的访问
b. 发布公告:Robots协议
告知所有爬虫网站的爬取策略,要求遵守Robots协议
3.3 真实的Robots协议案例
京东的Robots协议:
https://www.jd.com/robots.txt
#注释,*代表所有,/代表根目录
3.4 robots协议的遵守方式
对robots协议的理解
自动或人工识别roboes.txt,z再进行内容爬取。
robots协议是建议但非约束性,网络爬虫可以补遵守,但存在法律风险。
原则:人类行为可以补参考robots协议,比如正常阅览网站,或者较少爬取网站频率。
如果你也想学习Python爬虫的话,这里给大家分享一份Python爬虫学习资料和公开课, 里面的内容都是适合零基础小白的笔记和资料,超多实战案例,不懂编程也能听懂、看懂。需要的话扫描下方二维码免费获得,让我们一起学习!
CSDN大礼包:全网最全《全套Python学习资料》免费分享
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)