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 : 无视界浏览器
   谷歌无头
   规避被检测的风险 http://www.javashuo.com/article/p-ofuijkpo-ek.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 先阶段只停留在应用层面
相关文章
相关标签/搜索