CH1 网络爬虫规则

2019-02-03  本文已影响0人  icey_J

网络爬虫规则

[TOC]

1. request库入门

request库的安装

win平台下,运行cmd,输入命令

pip install requests

request库的7个主要方法

方法 含义
requests.request() 构造一个请求
request.get() 获取html网页的内容
request.head() 获取html网页头信息的方法
request.post() 向html页面提交post请求
request.put() 向html页面提交put请求
request.patch() 向html页面提交局部的修改请求
request.delete() 向html页面提交删除请求

注:其中,request方法是下面6个方法的基础方法,其余6个方法都是在request方法基础上实现的,由于一般服务器都有保护防止攻击,所以put、patch、delete方法一般不使用,常用的方法为get head post方法,有关patch和put方法之间的区别下面有说。

HTTP协议

HTTP协议,也称为超文本传输协议,Hypertext transfer protocol
HTTP是一个基于 请求与响应 模式的、无状态的应用层协议,HTTP协议采用URL作为定位网络资源的标识,URL格式如下:

http:/ /host[:port][path]

host:合法的主机域名或ip地址
port:端口号,默认为80
path:请求资源的路径
举个例子,这是死侍2的百度网盘地址https://pan.baidu.com/s/14LYNSuRFqui6xySLtbIU3g#list/path=%2F
其中,pan.baidu.com/是百度网盘的主机域名,s/14LYNSuRFqui6xySLtbIU3g#list/path=%2F是资源的路径
对于HTTP URL,可以理解为一个存在与INTERNET的文件路径通过URL和HTTP协议,存取资源,一个URL对应的是一个数据资源

HTTP协议中对资源的操作有7种方法,分别为

注:这里要理解PATCHPUT的区别,patch仅仅是修改局部数据而且是由提交的内容来修改,put是将修改内容作为新的内容覆盖掉url地址的全部内容,path的优势在于,节省网络带宽

注意到requests库和HTTP协议的操作方式是相同的,功能也是一致的

Requests库方法详解

requests库的两个重要对象
r = requests.get(url)

r为Response 对象,包含服务器返回的内容资源,get中包含的是Request 对象,是由函数构建的发送给网页的对象,Response 对象包含服务器返回的所有信息,也包含请求的request信息

Response对象有下列属性

属性 说明
r.status_code HTTP请求的返回状态,200成功,其余表示失败
r.text HTTP响应内容的字符串形式,url对应的页面内容
r.encoding 从HTTP header中猜测编码方式
r.apparent_encoding 从内容中分析出响应内容的编码方式
r.content HTTP响应内容的二进制形式

注:如果header中不存在charset 字段,则认为编码为ISO-8859-1

Response对象存在一种异常处理方法,为

r.raise_for_status()

如果r.status_code不等于200,则引发异常,可以使用try-except捕捉

7个方法介绍
控制访问参数

一共有12个控制访问参数:

params:字典或字节序列,作为参数增加到url

kv = {key:value}
r = requests.get(url, params=kv)

=> url?key=value&key=value

data:字典、字节序列或文件对象,作为request的内容

kv = {key:value}
r = requests.post(url, data=kv)
body = '主题内容'
r = requests.post(url, data=body)

json:JSON格式的数据,作为request的内容

kv = {key:value}
r = requests.post(url, json=kv)

headers:字典,HTTP定制头,可以修改HTTP头中的内容,也就是说,可以修改头中特定字段的内容,比如用户代理user-agent

hd = {'user-agent':'Chrome\10'}
r = requests.post(url, headers = hd) #修改user-agent字段

以及

cookies:字典或cookiejar,request中的cookie

auth:元组,支持HTTP认证功能

files:字典类型,传输文件

fs = {'file':open('data.xls','rb')}
r = requests.post(url, files = fs)

还不知道怎么用

timeout:设定超时时间,秒为单位,可以用在get方法防止请求时间过长

r = requsets.get(url, timeout = 10)

proxies:字典类型,设定访问代理服务器,可以增加登陆认证

pxs = {'http':'http://user:pass@10.10.10.1:1234'
       'https':'https://10.10.10.1:4321' }
r = requests.get(url, proxies = pxs)

allow_redirects:True/False 默认为True,重定向开关

strea:布尔,默认为True,获取内容立即下载开关

verify:布尔,默认为True,认证SSL证书开关

cert:本地SSL证书路径

2. 网络爬虫盗亦有道

网络爬虫的尺寸

分为大中小三种尺寸

小规模 中规模 大规模
爬取速度不敏感,使用Request库 数据规模较大,对于爬取速度敏感,使用Scrapy库 爬取速度是关键,定制开发

网络爬虫引发问题

  1. 性能骚扰
  2. 法律风险
  3. 隐私泄露

网络爬虫的限制方法

来源审查

​ 网站服务器会通过检查来访HTTP协议的user-agent域,只响应浏览器或友好爬虫,比如淘宝= =

发布公告

​ 通过网站的robots协议,告知所有爬虫爬取策略,要求遵守,robots协议存放在网站域名的根域名下robots.txt文件,比如京东的

https://wwww.jd.com/robots.txt

内容为

User-agent: * 
Disallow: /?* 
Disallow: /pop/*.html 
Disallow: /pinpai/*.html?* 
User-agent: EtaoSpider 
Disallow: / 
User-agent: HuihuiSpider 
Disallow: / 
User-agent: GwdangSpider 
Disallow: / 
User-agent: WochachaSpider 
Disallow: /
# * 代表所有, / 代表根目录
# 例如淘宝为
# User-agent: *
# Disallow: /

Robots协议如果不遵守,有法律风险,但如果爬虫的访问频率类似于人的话,不必遵守

上一篇 下一篇

猜你喜欢

热点阅读