美文网首页
CH1 网络爬虫规则

CH1 网络爬虫规则

作者: icey_J | 来源:发表于2019-02-03 00:40 被阅读0次

    网络爬虫规则

    [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种方法,分别为

    • GET
      请求获取URL位置的资源
    • HEAD
      请求获取URL位置资源的响应消息报告,即获得该资源的头部信息
    • POST
      请求向URL位置的资源后附加新的数据,比如post表单之类
    • PUT
      请求向URL位置存储一个资源,覆盖原资源
    • PATCH
      请求局部更新URL位置的资源,改变部分内容
    • DELETE
      请求删除URL位置资源

    注:这里要理解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个方法介绍
    • get() 方法

      get方法的格式为

      requests.get(url,params=None, **kw)
      

      url:拟获取页面的url链接

      params:url中的额外参数,字典或字节流格式,可选

      ********kw**:12个控制访问参数

      get方法会返回response对象r,性质上述以写

    • head() 方法

      requests.head(url, **kw)
      

      返回网页HTML头的内容

      url:链接

      ****** kw:控制参数

    • post() 方法

      payload = {'k1':'v1','k2':'v2'}
      r = requests.post(url, data = payload)
      

      将字典POST后,自动编码为form

      r = requests.post(url, data = 'ABC')
      

      将字符串POST后,自动编码为data,而form为空

      格式为

      requests.post(url, data=None, json=None, **kw)
      

      url:链接

      data:字典、字节序列或文件

      json:JSON格式数据

      ********kw**:控制参数

    • put() 方法

      用法同post

      格式为

      requests.put(url, data=None, **kw)
      
    • patch() 方法

      requests.patch(url, data=None, **kw)
      
    • delete() 方法

      requests.delete(url, **kw)
      
    • request() 方法

      request方法内存在参数method,几乎可以替代所有其他的方法

      requests.request(method, url, **kw)
      

      method:请求方式,对应get/post等等

      url:链接

      ********kw**:控制参数

      具体的请求方式为:GET、HEAD、POST、PATCH、PUT、delete、OPTIONS

    控制访问参数

    一共有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协议如果不遵守,有法律风险,但如果爬虫的访问频率类似于人的话,不必遵守

    相关文章

      网友评论

          本文标题:CH1 网络爬虫规则

          本文链接:https://www.haomeiwen.com/subject/hbnlsqtx.html