NoteBook3013

数据解析,就是对网页源码数据的解析和清洗,获取自己想要的数据信息。

常用的数据解析有下面四种:

  1.正则
  2.bs4
  3.xpath
  4.pyquery
一:
  正则:熟练使用正则表达式,对数据进行提取即可
二:BS4
  解析原理:
    1.实例化一个BeautifulSoup的一个对象,并且将即将被解析的页面源码加载到该对象中
    2.调用bs对象中相关属性和方法进行标签定位和数据的提取
  环境安装:
    pip install lxml
    pip install bs4
  使用;
    from bs4 import BeautifulSoup
 
  1.实例化一个BeautifulSoup
    BeautifulSoup (fp,\'lxml\')    #  使用本地存储的一张html文件
    BeautifulSoup (response,\'lxml\')      #将互联网请求的页面源码数据加载到bs对象中
 
  2.bs相关属性和方法
    BeautifulSoup对象.标签名   #可以定位到第一次出现的tagName标签,返回值是一个单数
        事例:soup.div
    BeautifulSoup对象.find(\'标签名\',属性名=\'属性值\')   #可以定位到属性,返回定位到的第一个标签 是单数
        事例:soup.find(\'div\',id=\'test\')  #class是关键字,使用class_
    BeautifulSoup对象.find_all(\'标签名\',属性名=\'属性值\')   #定位到符合要求的所有标签,是列表
        事例:soup.find_all(\'div\',class_=\'test\')  
    BeautifulSoup对象.select(\'选择器\')
        事例:soup.select(\'#test > .test  div > li \')  # 该事例是,查找id为test的标签下第一层class属性为test,下面的多层div标签下面的li标签
          > 表示层级关系为一层,‘ ’空格表示多层层级关系
  3.取值
    获取标签文本内容:soup对象.string  #获取标签的直系文本内容
             soup对象.text  soup对象.get_text()  #获取标签下的所有文本内容,包含子标签文本
    获取标签属性值:
            soup对象[\'src\'],    [\'href\']  等等  #即可获取标签属性的值
三:xpath
  优点:xpath可以在不同语言中都可使用,具有较强的通用性
  解析原理:
    1.实例化一个etree的对象,将即将被计息的页面源码加载到该对象中
    2.调用etree对象中的xpath方法,结合着不同的xpath表达式实现标签定位和数据提取
  环境安装:
    pip install lxml
 
  使用:
    from lxml import etree
  实例化etree对象:
    etree.parse(\'本地文件路径\')
    etree.HTML(\'通过互联网获取的页码源码 \')
  
  xpath表达式:
    etree对象.xpath(表达式)   #返回值都是一个列表
  标签定位:
    /表示一个层级  #最左侧为一个斜杠,表示必须从根节点开始进行标签定位(相当于绝对路径)
    //表示多个层级  #最左侧为两个斜杠,表示可以从任意位置进行标签定位()
  属性定位:
    //标签名[@属性名=属性值]
    tree.xpath(\' //div[@id="test"] \')  #定位获取属性id为test的标签
  索引定位:
    //标签名[index]  # 表达式中的索引是从1开始
    tree.xpath(\' //div[@id="test"]/li[2] \')  # 定位id为test的标签下面的第二个li标签
  取值:
    取文本:/text()  和 //text()
      tree.xpath(\' //div[@id="test"]/li[2]/text() \')    #获取第二个li标签下的文本值
      tree.xpath(\' //div[@id="test"]/li[2]//text() \')    # 获取第二个li标签下的所有文本值(包含他的子标签文本)
    取属性:/@属性名
      tree.xpath(\' //div[@id="test"]/a[2]/@href \')    #获取第二个a标签下的href属性的值
 
四:pyquery
 
  解析原理:
    1.实例化一个PyQuery的对象,将即将被计息的页面源码加载到该对象中
    2.调用PyQuery对象中的方法,实现标签定位和数据提取
  环境安装:
    pip install pyquery
 
  使用:
    from pyquery import PyQuery
  实例化PyQuery 对象:
    pq = PyQuery(filename=\'index.html\')  #使用本地html文件
    pq = PyQuery(response)      #使用网页源码文本数据
    pq = PyQuery(url=\'https://www.baidu.com\')    #使用网址
  
  标签定位:
    pq(\' li \')
    pq(\' div \')
  属性定位:
 
    PyQuery对象(\'选择器\') 
    pq(\'#test .item-0 a span\') # id为test下面的,class为.item-0,下面的a标签,下面的span标签
    
  取值:
    取文本:PyQuery标签对象.text()
      pq(\' a \').text()  #获取a标签下的文本值
    取属性:    
      PyQuery标签对象.attr.属性名
      PyQuery标签对象.attr[\'属性名\']
      pq(\' a \').attr.href  #定位获取a标签的href值
  属性的添加和删除:
    div = pq(\'.test.active\')  #创建li对象
    div.remove_class(\'active\')
    div.add_class(\'active)
  属性,样式设置:  # 有该属性样式就修改,没有就添加
    div.attr(\'id\',\'test\')
    div.css(\'display\',\'block\')
  查找删除标签:
    div.find(\'a\').remove()  #查找div对象下的所有a标签,并删除
 

分类:

技术点:

相关文章: