• 爬虫之数据解析,网页源码数据分析


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

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

      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标签,并删除
     
  • 相关阅读:
    iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流
    iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调
    iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController
    iOS开发之SQLite--C语言接口规范(五)——iOS开发使用SQLite实例
    iOS开发之SQLite--C语言接口规范(四) —— Result Values From A Query
    iOS开发之SQLite--C语言接口规范(三)——Binding Values To Prepared Statements
    iOS开发之SQLite-C语言接口规范(二) —— Prepared Your SQL Statements
    iOS开发之SQLite-C语言接口规范(一)——Ready And Open Your SQLite
    iOS开发之ImageView复用实现图片无限轮播
    iOS开发之多图片无缝滚动组件封装与使用
  • 原文地址:https://www.cnblogs.com/NoteBook3013/p/11109303.html
Copyright © 2020-2023  润新知