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 先阶段只停留在应用层面

 




posted @ 2019-05-06 22:02  追风zz  阅读(344)  评论(0编辑  收藏  举报