zoukankan      html  css  js  c++  java
  • 爬虫常识

    爬虫在使用场景中的分类

    #1、通用爬虫
            抓取系统的重要部分,抓取的是一整张页面的数据
    #2、聚焦爬虫
            是建立在通用爬虫的基础上,抓取的似乎页面中的特定的局部内容
    #3、增量式爬虫
            检测网站中数据更新的情况,只会抓取网站中最新更新出来的数据

    robots.txt协议

    君子协议

    User-agent:  Baiduspider
    Allow:  /article
    Allow:  /oshtml
    Allow:  /ershou
    Allow: /$
    Disallow:  /product/
    Disallow:  /
    
    User-Agent:  Googlebot
    Allow:  /article
    Allow:  /oshtml
    Allow:  /product
    Allow:  /spu
    Allow:  /dianpu
    Allow:  /oversea
    Allow:  /list
    Allow:  /ershou
    Allow: /$
    Disallow:  /
    
    User-agent:  Bingbot
    Allow:  /article
    Allow:  /oshtml
    Allow:  /product
    Allow:  /spu
    Allow:  /dianpu
    Allow:  /oversea
    Allow:  /list
    Allow:  /ershou
    Allow: /$
    Disallow:  /
    
    User-Agent:  360Spider
    Allow:  /article
    Allow:  /oshtml
    Allow:  /ershou
    Disallow:  /
    
    User-Agent:  Yisouspider
    Allow:  /article
    Allow:  /oshtml
    Allow:  /ershou
    Disallow:  /
    
    User-Agent:  Sogouspider
    Allow:  /article
    Allow:  /oshtml
    Allow:  /product
    Allow:  /ershou
    Disallow:  /
    
    User-Agent:  Yahoo!  Slurp
    Allow:  /product
    Allow:  /spu
    Allow:  /dianpu
    Allow:  /oversea
    Allow:  /list
    Allow:  /ershou
    Allow: /$
    Disallow:  /
    https://www.taobao.com/robots.txt

    两种协议与三种加密方式

    http协议与https协议

    #概念:都是服务器与客户端进行数据交互的一种形式
    #只不过https是安全的超文本传输协议

    常用的请求头信息
        User-Agent:请求载体的身份标识
        Connection:求情完毕后,是断开连接还是保持连接
    常用的响应头信息
        Content-Type:服务器响应回客户端的数据类型
    https采用的是证书密钥加密

     UA伪装

    #UA:User-Agent(请求载体的身份标识)
    
    #UA检测:
    门户网站的服务器会检测对应请求的载体标识,如果检测请求的载体身份标识为某一款浏览器,说明请求是一个正常的请求。反正为不正常请求(爬虫),服务器就很有可能拒绝该次请求
    
    #UA伪装:
    让爬虫对用的请求载体身份标识伪装成浏览器

    三种加密方式

    #1、对称密钥加密
    #2、非对称密钥加密
    #3、证书密钥加密
    #对称密钥加密的基本工作流程
    1、客户端制定一套加密规范,对数据进行加密,
    2、在传输过程中,把加密规范(密钥)同数据一块发送给服务器
    3、服务器拿到加密数据以及密钥,进行解密,进而拿到客户端传递的数据
    
    #弊端:
     在密钥和加密数据的传递过程中,很可能被第三方拦截到,第三方可直接解密,直接拿到数据
    对称密钥加密的基本工作流程以及弊端
    #非对称加密是使用的时候,有两把锁,公开密钥(公钥)和私有密钥(私钥)
    
    #非对称密钥加密的基本工作流程:
    服务器端设置公钥,并发送给客户端, 
    客户端按照公钥进行加密,把加密数据发送给服务端
    服务端拿到加密数据,使用自己的私钥进行解密
    
    因为解密的密钥不会进行传输,因此,即使拿到公钥和数据,也很难解密,
    
    #但是也存在弊端,
    一、非对称加密的凡是效率比较低,它处理起来更为复杂,影响通信速度
    二、无法保证客户端所拿到的公钥就是服务器发过来的
            如果公钥在发送过程中被拦截(例如django的中间件),然后对公钥进行篡改,把篡改之后的公钥发送给客户端,    
            客户端按照被篡改的公钥进行加密    
    非对称密钥加密的基本工作流程及优缺点
    证书密钥加密的基本工作原理与非对称密钥相似
    只不过在公钥传输过程中,加入了第三方认证机构
    
    公钥------->>证书认证机构(给公钥签名)----->>证书-------->>客户端
    证书密钥加密

    requests模块

    pip install requests
    
    #requests模块:
        python中原生的一款基于网络请求的模块,简单便捷,效率极高,功能非常清大,(只要掌握了requests模块,就掌握了爬虫占据了爬虫领域的半壁江山)    
    
    #作用:
       模拟浏览器发请求
    
    #如何使用:
            指定url
            发起请求
            获取响应数据
            持久化存储

     requests实战之网页采集器

    import requests
    # https://www.baidu.com/s?wd=%E5%8D%8E%E4%B8%BA
    # 问号要不要都行
    
    
    if __name__ == '__main__':
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
        }
    
        url='https://www.baidu.com/s'
        kw=input('enter a word:')
        param={
            'wd':kw
        }
        response = requests.get(url=url,params=param,headers=headers)
        page_text = response.text
        fileName=kw+'.html'
        with open(fileName,'w',encoding='utf-8')as f:
            f.write(page_text)
            print('保存成功')
    网页采集器
    import json,requests
    
    if __name__ == '__main__':
        # 1、指定url
        post_url = 'https://fanyi.baidu.com/sug'
        # 2、进行UA伪装
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
        }
        word=input('>>:')
        data = {'kw':word}
        # 发送请求
        response = requests.post(url=post_url,data=data,headers=headers)
        # 获取响应数据,json()方法返回到是obj,(只有在确认是json数据类型才可以使用,content-type: application/json可以确认)
        dic_obj = response.json()
        fileName = word+'.json'
        fp=open(fileName,'w',encoding='utf-8')
        json.dump(dic_obj,fp,ensure_ascii=False)
        print('over!!!')
    百度翻译
    #有的页面并非是全局刷新,很多是通过ajax局部刷新的(动态加载出阿里的),如果指定该url,并不能拿到想要的数据,
    
    #两种方式检测是否是局部刷新
    #方式一、直接用代码验证
    import requests
    if __name__ == '__main__':
        url='http://125.35.6.84:81/xk/'
    
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
    
        page_text = requests.get(url=url,headers=headers).text
    
        with open('./huazhuang.html','w',encoding='utf-8')as f:
            f.write(page_text)
    #通过打开html文件发现,此页面与直接访问该地址的页面不同,想要拿到的数据没有加载出来,所以,想要的信息不在这个http://125.35.6.84:81/xk/地址
    
    
    #方式二、直接在浏览器上判断
    在浏览器上访问http://125.35.6.84:81/xk/,通过抓包工具,找到地址为http://125.35.6.84:81/xk/的数据包(Network中),找到Response对象,看是否有想要找的数据,可以通过ctrl+f快速查找
  • 相关阅读:
    jar
    8月21日23:38
    WPF之UI虚拟化
    (转)Windows系统白名单以及UAC机制
    C#获取文件版本信息
    命名实体识别,使用pyltp提取文本中的地址
    (转载)完成端口(Completion Port, I/OCP)详解
    全国各城市地名抓取,包含街道、村落、小区、商店、景点等
    关于Python打包运行的一些思路
    关于批判性思维(Critical Thinking)
  • 原文地址:https://www.cnblogs.com/pdun/p/10931958.html
Copyright © 2011-2022 走看看