码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2019-06-30 12:35:40      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:baidu   dex   ring   数据加载   from   pip   res   parse   实例化   

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

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

  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标签,并删除
 

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

标签:baidu   dex   ring   数据加载   from   pip   res   parse   实例化   

原文地址:https://www.cnblogs.com/NoteBook3013/p/11109303.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!