Skip to Content

爬虫学习笔记

爬虫

  1. 什么是爬虫
    1. 模拟浏览器,发送请求,抓取信息
  2. 作用
    1. 数据采集
    2. 自动化测试
    3. 抢票抢商品等
    4. 投票
    5. 网络安全
      1. 短信轰炸
      2. 漏洞扫描
  3. 分类
    1. 数量
      1. 通用爬虫
      2. 聚焦爬虫
    2. 目的
      1. 功能性爬虫,完成功能
      2. 数据增量爬虫,获取数据
        1. 基于url变化
        2. 不论url是否变化
  4. 参考资料
    1. 虫师——自动化测试
  5. 流程
    1. url → 发送请求 → 解析响应
      1. → 提取链接 → 继续爬取
      2. → 提取数据 → 保存数据
  6. 常见的请求头和响应头
    1. 请求头
      1. Host 域名
      2. Connection 链接
      3. Upgrade-Insecure-Requests 升级为HTTPS
      4. User-Agent 用户代理
      5. Referer 页面跳转处,可用于防盗链
      6. Cookie
      7. Content-Type
    2. 响应头
      1. Set-Cookie
  7. 状态码
    1. 状态码不可信,以抓包和浏览器结果为准
  8. 浏览器和爬虫
    1. 浏览器发送请求后会自动发送后续请求并自动渲染
    2. 爬虫只会根据代码发送
    3. 所以爬虫需要进行抓包分析
  9. 抓包
    1. 分析页面渲染流程和架构,从中找出对应的请求,再解析响应,提取数据
  10. request模块
    1. text和content
      1. text: str类型,自动推测的编码类型和解码
      2. content: bytes类型,可以进行decode操作
    2. response.encoding = 'utf8' 可以设置响应的编码
    3. 中文乱码应对

    1. 常用属性和方法

    1. 使用
      1. headers设置请求头
      2. params设置请求参数
      3. cookies

        1. 可以在请求头设置
        2. 在请求时设置cookies参数,值为字典对象(推荐)
      1. session
        1. 多次请求时进行状态保持
        2. request模块会在下次请求自动带上cookie
      2. timeout 超时时间,超时后请求失败
      3. proxies 接收字典
      4. verify 忽略证书认证
    1. cookieJar对象转换为字典

    1. 代理
      1. 正向代理
        1. 代理服务器帮助我们向目标服务器转发请求
      2. 反向代理
        1. 由代理服务器分配最终服务的处理服务器
      3. 透明代理: 目标服务器知道客户端和代理服务器
      4. 匿名代理: 目标服务器知道代理服务器
      5. 高匿代理: 目标服务器不知道代理服务器是代理
    2. post请求
      1. request(url, data)
        1. data是请求体
        2. 数据来源
          1. 固定值
          2. 输入值
          3. 预设值

静态文件

单独发请求获取

          1. 客户端生成
    1. 模拟登录
      1. 案例Github登录
      2. 获取登录token
        1. 发送请求
        2. 提取token
      3. 发送登录请求
      4. 存储cookie或session
  1. 数据提取
    1. 数据分类
      1. xml
        1. re
        2. lxml

      1. json
        1. json、re
        2. jsonpath

          1. 常用

$根节点

.子节点

..子孙节点

    1. 工具
      1. beautifulsoup 用于解析HTML和XML文档的Python库
        1. xpath
          1. xpathhelper,第三方浏览器插件,测试xpath
          2. 语法

复合语法

//td/a|//h2/a

        1. 正则
        2. css选择器
  1. Selenium
    1. selenium web自动化测试工具,可以直接调用浏览器
    2. phantomjs无界面浏览器,基于webkit
    3. 需要安装对应浏览器的webdriver
    4. 原理

    1. 安装
      1. 模块
        1. pip install selenium
      2. driver
        1. 确定浏览器版本
        2. 下载驱动
        3. 配置环境变量
    2. 常用属性和方法

    1. 定位元素

    1. 提取内容和属性

    1. 窗口切换

      1. 获取句柄
      2. 切换标签
    1. frame切换

    1. cookie操作

    1. 执行JS

    1. 页面等待

    1. 配置对象

    1. 动态加载

  1. 反爬及解决
    1. 原因
      1. 爬虫会浪费服务器资源,造成服务器负载
      2. 公司资源竞争力
    2. 概念

    1. 方向

      1. 方法
        1. 身份

        1. 行为

        1. 加密

    1. 图像识别引擎
      1. tesseract

        1. 可以自行训练
    1. 打码平台
      1. 云打码
      2. 极验验证码
      3. 其他
  1. 浏览器功能
    1. 隐身窗口
    2. 记录抓包记录

    1. 登录接口
      1. PC端
      2. 手机端(更容易找)
  1. 确定js位置

    1. js2py

  1. hashlib可以用来去重
    1. 节省空间
    2. 布隆过滤器,基于hash,更节省空间
  2. 文本内容去重
    1. 编辑距离
    2. simhash
  3. Mongodb
    1. 适用海量存储
    2. sql和nosql的区别
      1. 表之间的关联关系
      2. 字段是否固定,提前定义
    3. 安装:apt-get install mongodb-org
    4. 端口:27017
    5. linux命令
      1. grep -v "#" /etc/mongod.conf 获取文件中非#号的行
    6. 启动

    1. 生产环境启动

    1. mongosh 交互
    2. 操作

      1. 基本操作
        1. db.createCollection(c_name)
        2. db.dropCollection(c_name)
        3. 插入
          1. db.c_name.save(document) 需要传带_id的文档,执行更新插入(如果id不存在)
          2. db.c_name.insert(document) 插入

批量插入

db.c_name.insert(document_list)

document_list: [document, document, document...]

        1. 查询

          1. 运算符

        1. 更新
          1. db.c_name.update({})
          2. upsert 找到则更新,没有则插入

        1. 删除

      1. 聚合

        1. 管道

        1. 表达式

        1. unwind拆分

    1. 常见数据类型
    2. _id 主键

    1. 索引
      1. 创建

      1. explain

      1. 删查

      1. 唯一索引

      1. 复合索引

    1. 权限管理
      1. auth 开启权限验证
      2. 创建超级管理员用户

      1. 创建普通用户

      1. 登录

      1. db.getUsers() 查看用户
      2. db.dropUser() 删除用户
      3. 角色创建与数据库有关
      4. 可以在admin里统一创建,需要指定关联的数据库

        1. 需要在admin里登录
    1. python交互 pymongo

  1. Scrapy
    1. python爬虫框架
    2. 工作流程

    1. 常用配置

    1. 各个模块作用

    1. 三个内置对象
      1. request
      2. response
      3. item
    2. 项目开发流程

    1. 开发流程
      1. 创建项目

      1. 明确目标
        1. 数据建模 items.py中
          1. 为什么

      1. 创建爬虫
        1. scrapy genspider spider_name limit_domain
        2. 爬虫必须有parse方法
      2. 提取数据

      1. 保存数据
        1. 管道

        1. 定义管道
        2. 重写process_item方法
        3. 处理完item后返回给引擎
      1. 运行爬虫
        1. scrapy crawl spider_name
    1. 构造请求
      1. 参数

    1. 模拟登录
    2. 数据清洗

    1. crawlspider类
      1. 继承自Spider
      2. 创建 scrapy genspider -t crawl
      3. 创建类和链接提取规则

      1. 不能重写parse方法
    1. Shell
      1. scrapy shell url
    2. 中间件
      1. 分类
        1. 爬虫中间件
        2. 下载中间件

  1. Scrapy-Redis
    1. 分布式原理

    1. 断点续爬
    2. 流程

    1. 区别

    1. 配置

    1. 常用配置

  1. Scrapy-Splash
    1. 介绍

    1. 安装

      1. python模块安装
        1. pip install scrapy-splash、
    1. 配置

    1. 常用配置

    1. 使用

  1. Scrapyd
    1. 部署爬虫
    2. 端口: 6800
    3. 安装
      1. 服务端
        1. pip install scrapyd
      2. 客户端
        1. pip install scrapyd-client
    4. 配置

    1. 管理

      1. 使用requests管理

Python 学习笔记