zoukankan      html  css  js  c++  java
  • 0 爬虫概览

    - 爬虫的分类
        - 通用爬虫:
        - 聚焦爬虫:
        - 增量式:
    - 爬取图片的两种方式
        - 使用requests
        - urllib模块request中urlretrieve
    - 数据解析的基本原理
        - 标签的定位
        - 取文本或取属性
    - xpath解析原理
        - 实例化etree对象,且将源码加载到该对象中
        - 使用xpath方法结合着xpath表达式进行标签定位和数据提取
            - 属性定位[@attrName="value"]
            - 索引定位:[1]
            - /  //
            - 取文本: /text()  //text()
            - 取属性:/@attrName
    - etree对象实例化的方式
        - 本地加载:parse
        - 网络加载:HTML
    - bs4解析原理
        - .tagName 单数
        - find(属性定位) 单数    find('tagName',attrName="value")
        - find_all 复数
    - Beautiful对象实例化方式  本地/网络   soup.div  soup()
        
    - 面试题:如何爬取携带标签的指定页面内容
        bs4 text()/get_text()/string() 
    --------------------------------------------------------------
    1 连接池报警 请求头改 Connection: keep-alive 为close
                 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
    2 代理IP 在IP被封禁后
    3 每次请求之间sleep进行间隔等待
    ---------------------------------------------------------------
    验证码识别:云打码平台  http://www.yundama.com/ 打码兔 超级鹰
    使用流程:
        注册
        登陆:
          普通用户:
            查询剩余提分(充值)  http://www.yundama.com/price.html
          开发者用户:
            创建软件:我的软件-》添加新软件(ID,秘钥)
            下载示例代码:开发文档-》点此下载:云打码接口DLL-》PythonHTTP示例下载   
    --------------------------------------------------------------------
    代理:代理服务器
      - 快代理
      - 西祠代理
      - goubanjia
    匿名度:
      透明:对方服务器知道你使用了代理ip也知道你的真实ip
      匿名:知道你使用了代理ip但是不知道你的真实ip
      高匿:什么都不知道
    类型:
      http:只可以发起http请求
      https:只可以发起https的请求
    -------------------------------------------------------------
    import requests
    import asyncio
    requests.get
    requests.post
    
    1 掌握哪些基于爬虫的模块
        urllb
        requests  重点
            - 发起请求的参数
                url
                headers
                data/params
                proxies 代理IP = {'http://':'ip:port'}
            - get请求 post请求 ajax的get ajax的post
            - 获取响应数据:
                - text
                - content  流
                - json()
                - encoding = 'xxx'
            - requests处理cookie
                - 手动
                - 自动 : session = requests.Session()  雪球网/58二手房
            - 如何提升requests爬取效率
                - 多线程
                - 线程池
            - 单线程+异步协程  aio aiohttp 异步的网络请求模块
                - asyncio
                - 事件循环loop   无限循环   遇到阻塞就轮询下面的
                - 协程对象:  async 修饰的函数的定义,函数调用后会返回一个协程对象  一个特殊函数的返回值
                 - 任务对象:  就是对协程对象的进一步封装
                - await 需要手动挂起 async
    
    2 常见的数据解析方法
        - re
        - xpath  用熟练
        - bs4  美丽汤
        - pyquery
    
     解析步骤:
      标签定位
      数据解析
    selenuim: 浏览器自动化的模块
    作用 :
         便捷的获取动态加载的数据
         模拟登陆
    弊端 : 效率低下
    
    使用流程: 
        实例化浏览器对象
        find系列函数  标签定位  click()  send_keys()数据交互  page_source(),excute_script(Jscode)
        switch_to.frame('iframe标签的id值)函数:切换作用域, 如果使用find系列
        动作链 : 滑动  触发一系列的连续动作 ActionChains
       phantomJs : 无视界浏览器
       谷歌无头
       规避被检测的风险 https://www.cnblogs.com/zhangchen-sx/p/10817722.html
    - pyppeteer  chromium  asyncio
    3 列举爬虫中与遇到的比较难得反爬机制
        robots
        UA 检测
        验证码
        cookie
        代理
        token(请求的动态参数)  古诗文网 post动态参数
        动态数据加载   ***
        图片懒加载
        数据加密  base64 解密
    
    4 如何抓取动态加载数据
        - ajax 动态请求的
        - js 动态生成的  selenuim
    
    5 移动端数据抓取
        - fiddler
        - 青花瓷
        - mitproxy
    
     先手机装证书
    
    6 抓取过哪些类型的数据,量级多少?
        新闻资讯
        财经数据(金融产品 )
        设备参数
    
    7 了解哪些爬虫框架? pyspider(封装了一个可视化)
    
    8 谈谈对scrapy的了解
    项目创建流程
    持久化存储
        基于终端指令
        基于管道
            管道持久化存储编码流程
                数据解析
                对item的类进行相关的属性定义
                将解析到的数据封装到item类型的对象中
                将item提交给管道
                在管道中进行持久化存储的操作
                在配置文件中开启管道
            注意事项
                一个管道类对应一个存储的载体
                process_item方法中的返回值是item. 这个返回值会给下一个即将被执行的管道类
    处理分页数据爬取:
        手动
            yeild scrapy.Request(url,callback)
    post请求:
        yeild scrapy.FormRequest(url,callback,formdata)  #模拟登陆用
    cookie处理:
        默认自动处理
    日志等级:
        LOG_LEVEL = 'EEROR'
    请求传参:
        使用场景: 
            当爬取得数据没有在同一张页面的时候
            请求传参传递的是item对象
            yeild scrapy.Request(url,callback,meta={'item':item})
                callback : item = response.meta['item']
    五大核心组件 -- 
        引擎作用 - 
            处理所有数据流 
            触发事务
    下载中间件 - 
          作用:
                批量拦截scrapy中所有的请求和响应
         中间件类常用的方法:
                process_request : 拦截所有正常的请求
                process_response : 拦截所有的响应
                process_exception : 拦截所有的异常请求.
          拦截请求: 
                UA 伪装
                IP 代理设定
          拦截响应:
                修改响应数据,篡改响应对象
     selenium 在scrapy 中的应用:
    crawlSpider:  子类 
        用作全站数据爬取的
        链接提取器 LinkExtracter(allow='正则'):
             可以根据指定的规则(allow='正则') 进行链接的提取
        规则解析器Rule(LinkExtracter,callback,follow=True)
    分布式  
        原生的不能实现的原因? 管道 调度器 都不能共享
        scrapy-redis实现  
    增量式 : 去重  监测
    scrapy 框架
    - 高效的网络请求 下载
        - 高性能的持久化存储 数据解析 中间件
        - twisted 基于异步的模块
    
    9 如何解析出携带标签的局部页面数据
        使用bs4
    10 scrapy 核心组件
    11 中间件的使用
        UA池 IP池  下载中间件
    
    12 如何实现全站数据爬取
        - Spider   手动请求 递归调用
        - CrawSpider    链接提取器  规则
    
    13 如何检测网站数据更新?
        - 增量式
    
    14 分布式实现原理
        - scrapy-redis 组件
    
    15 如何提升爬取数据的效率 (异步爬虫)
        - 增加并发
        - 禁止cookie
        - 禁止重试
        - 减少下载超时
        - 降低日志等级
    
    16 列举你接触的反爬机制
    17 scrapy如何实现持久化存储
        - 管道
    18 谈谈对crawlspider的理解,如何使用其进行深度爬取
        - link
        - rule
    
    19 如何实现数据清洗?
        - 清洗空值
            - dropna
            - fillna
        - 清洗重复值
            - drop_duplications(keep)
        - 清洗异常值
            - 指定一个判定异常值的条件
    20 了解过机器学习吗?  
        - sklearn 先阶段只停留在应用层面



  • 相关阅读:
    Win7 vs2017 WDK 1803 1809 驱动开发 出错 KMDF
    http 请求 post get 长度限制
    IO模式和IO多路复用(阻塞IO、非阻塞IO、同步IO、异步IO等概念)
    select/poll 和 epoll 比较
    centos查看端口被哪个应用端口占用命令
    mysql索引知识简单记录
    Spring钩子方法和钩子接口的使用详解
    mysql使用自增Id为什么存储比较快
    分布式Id教程
    如何配置JVM系统属性及获取方式System.getProperty("pname")
  • 原文地址:https://www.cnblogs.com/zhangchen-sx/p/10822453.html
Copyright © 2011-2022 走看看