爬虫数据处理

  • 爬虫数据解析与提取
    • 正则表达式规则
    1. 普通字符语法
      在这里插入图片描述

    2. 预定义字符集语法
      在这里插入图片描述

    3. 数量词语法
      在这里插入图片描述
      贪婪与非贪婪:
      作用:控制数量词的匹配个数
      用法:默认是使用贪婪模式;在数量词后加上一个?后,则表示使用非贪婪模式
      匹配后贪婪与非贪婪模式的匹配个数:
      在这里插入图片描述

      In [35]: re.match("\d+.\d{2,6}", “3.1415926”).group()
      Out[35]: ‘3.141592’
      In [36]: re.match("\d+.\d{2,6}?", “3.1415926”).group()
      Out[36]: ‘3.14’

    4. 边界匹配语法
      在这里插入图片描述
      \b相当于\w和\W的边界,可以用来匹配出单词;
      \B则常用来判断单词的连贯性;
      注意:必须使用r,将字符串变为正则模式,因为\b在普通字符串中也是具有含义的。

    5. 逻辑、分组语法
      在这里插入图片描述

    6. 特殊构造语法
      在这里插入图片描述


  • xpath
  1. 节点选取基本路径表达式:
    在这里插入图片描述

  2. 节点选取通配符
    在这里插入图片描述

  3. Xpath谓语条件
    所谓"谓语条件",就是对路径表达式的附加条件,都写在方括号"[]"中,表示对节点进行进一步的筛选
    谓语条件语法:

    1. 调用函数
    2. 运算符
  4. Xpath轴
    轴其实就是以当前节点(自己)为中心,来选取其他节点
    在这里插入图片描述


  • lxml模块
    lxml模块是一个在Python中用于处理XML和HTML的工具。特点就是快、性能强。
    安装:
    lxml依赖于两个C语言编写的库libxml2-dev、libxslt-dev,以centos为例:
    sudo yum install libxml2-dev libxslt-dev
    然后在虚拟环境或其他Python解释器环境安装pip install lxml
    爬虫中lxml模块常用方法或对象:lxml模块 API文档
    • lxml
      Element
      ElementTree
    • lxml.etree
      HTMLParser
      XMLParser
      XPath
      parse: 对文件或二进制流数据进行解析,返回ElementTree对象
      fromstring: 对字符串进行解析,返回Element对象
      tostring: 对Element对象进行格式化,返回bytes类型字符串数据
      HTML: 相当于fromstring方法指定HTMLParser
      XML: 相当于fromstring方法指定XMLParser

lxml数据解析:将原始数据进行转换为格式完整的DOM对象


  1. Tag:Tag对象与XML或HTML原生文档中的tag相同,代表标签节点
  2. BeautifulSoup:BeautifulSoup 对象表示的是一个文档的全部内容
  3. NavigableString:NavigableString类中包装有tag中的字符串
  4. Comment:表示文档中的注释部分字符串

  • pyquery模块:一个类似jquery的python库
    pyquery允许在xml、html文档上进行jquery查询
    pyquery的API设计与jquery非常类似
    pyquery可以使用lxml进行快速的xml和html解析
    安装:pip install pyquery
    API使用

  • JsonPath
    jsonpath是一个专门用于快速处理json数据的模块。
    jsonpath规则之于json,如xpath规则之于xml/html
    • json数据特征
      json中只有两种结构:对象和数组
      对象:在json中是“{}”括起来的内容,数据结构为{“key”:“vlaue1”,“key2”: “value2”…}的键值对结构
      数组:在json中是‘[]’括起来的内容,数据结构为[“python”,“jsonpath”,“html”…],与所有的语言一样,使用索引获取值
      json的字段的类型可以是数字,字符串、数组、对象。其中字符串必须使用双引号表示。
    • 安装:pip install jsonpath
  1. jsonpath基础语法
    在这里插入图片描述
  2. jsonpath运算符
    在这里插入图片描述
    注意: Python中使用jsonpath模块时,必须将json字符串转换为python内置对象,如对象–>字典,数组–>列表。 因为python中需要使用json.loads或load方法将json数据进行简单转换。

  • Python中运行JS

    • js2py
      js2py是纯的Python实现的库,用于在python中运行js代码。
      本质上是将js代码翻译成Python代码
      js2py源码
      饭粒:JS代码翻译成python代码
      import js2py
      print(js2py.translate_js("console.log('hello world')"))
      
      # 将js文件翻译为python脚本
      # js2py.translate_file('demo.js', 'demo.py')
      

    注意:由于翻译代码需要一定时间,简单的代码尽量自己翻译,逼不得已再使用js2py模块。

    • pyexecjs
      pyexecjs同js2py一样,用于在python中执行js代码。
      其原理和js2py不同,因为相当于作为python与其他的js运行环境(如pyv8、nodejs等)的桥梁,js代码的运行是直接在对应的js运行环境中,而不是将js代码进行翻译,因此理论上pyexecjs的执行速度是比js2py快的。
      然鹅:pyexecjs模块的作者已经不维护该模块了。
      推荐使用node环境。因为node可以安装很多第三方模块,帮助解决问题,同时有的网站前端代码本身就借助了node的一些第三方模块。
    • 两个模块各有各自的特点,大家应该都应该掌握它们的使用方法,如果必要,互相搭配使用可能效果会更好

  • 爬虫数据清洗
    数据清洗:简单的说,就是对数据进行审查和校验。
    数据清洗的目的主要是解决数据质量问题,删除重复信息、纠正存在的错误,从而保证数据一致性。
    根据不同的业务场景有不同的需要解决的问题,这里以爬虫主要业务为例,数据清洗大致要解决的问题:
  • 数据一致性问题
    • 数据一致性是指所获取的数据,从多个维度考量数据的取值是否合乎预期要求。如数据的单位是否统一、数据取值标准是否统一、数据分类标准/分类依据是否统一等等
  • 数据完整性问题
    • 数据完整性是指数据信息不完整。如图书数据中缺少出版社、出版日期等;人类数据中缺少性别、年龄等。
  • 数据唯一性问题
    • 数据唯一性是指数据的重复性过滤问题,重复数据,只应保留一条。
  • 数据准确性问题
    • 数据准确性是指根据数据的准确性原则,判断数据是否准确的问题。如数据有误(格式不对、或超过当前时间)、无效数据、冗余数据无关数据过多等等

  • 数据存储

    • 文件存储
    1. CSV文本存储
      CSV文本存储是一种非常常用的存储方式:
      • 结构简单:列行数据分别以逗号和换行符来分割
      • 使用便捷:可直接被pandas、numpy等数据处理模块或也可直接导入Excel中进行处理
    2. JSON文本存储
    3. 媒体文件存储
      媒体文件数据(如图片、视频等)存储需注意:
      一:媒体文件数据,都是二进制类型数据,因此打开文件式,必须以二进制方式打开;
      二:如果文件数据较大的情况下,如视频数据,可能会考虑分批写入,那么此时注意必须使用追加模式写入数据;
      三:如果需要考虑维护文件的路径、大小等数据,那么需要考虑将这些数据单独进行存储并维护。
    • 数据库存储
    1. 关系型数据库:
      1)MySQL: PyMySQL
      PyMySQL的github地址
      PyMySQL的文档地址
      2)PostgreSQL: psycopg2
      psycopg2的github地址
      psycopg2的文档地址
    2. 非关系数据库:
      MongoDB: pymongo
      pymongo的github地址
      pymongo的文档地址
      ORM使用mongoengine
      github地址
      文档地址
发布了29 篇原创文章 · 获赞 4 · 访问量 8210

猜你喜欢

转载自blog.csdn.net/super2feng/article/details/102496604