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

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

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

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

 

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

时间: 2024-10-07 19:25:44

爬虫之数据解析,网页源码数据分析的相关文章

Python爬虫学习之获取网页源码

偶然的机会,在知乎上看到一个有关爬虫的话题<利用爬虫技术能做到哪些很酷很有趣很有用的事情?>,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义就不多说了,不知道的请自行点击查看 =>百度百科 网络爬虫,维基百科 网络爬虫 有很多编程语言都可以编写网络爬虫,只不过各有各的优缺点,这里我选择用Python语言编写爬虫,因为Python是一门非常适合用来编写爬虫的语言,用它实现爬虫的代码量相对其他语言要少很多,并且python语言对网络编程这类模块

Android 【山西违章查询实现1】(解析网页源码然后ListView显示出来)---利用正则表达式解析网页源码

这几天学习Android网络方面的,本来想从网上找些违章查询的接口,看了一下基本上都是付费的,索性自己写一个. 主要是 到正则表达式(我都不好意思说我用的正则表达式了)解析了一个网页,然后从ListView显示出来,还有轻量级的SQlite(储存违章查询). 想写一个详细点的所以慢慢来,以后自己回来看的时候估计也会觉得自己写的很乱吧. ---------------------------------- 1.首页查看自己要解析的网页和网址的构成 还需要验证码,最后发现验证码就是骗人的(有点坑啊)

Android 【山西违章查询实现2】(解析网页源码然后ListView显示出来)--- 客户端获取html源码

废话不多说,直接上源码 最后网页源码在result中. public void btn(View view) { new myWorker().execute("这里是网址"); } //异步操作,防止UI线程阻塞. private class myWorker extends AsyncTask<String,Void,String> { protected String doInBackground(String...urls) { StringBuilder buil

Android 【山西违章查询实现3】(解析网页源码然后ListView显示出来)--- 正则表达式在android中的使用

这里使用的Android自身的Pattern和 Matcher 由于上次已经将拿到的源码放在result中,所以我们就直接可以使用了. 直接上代码 Pattern p = Pattern.compile(“正则表达式”); Matcher m = p.matcher(result); while(m.find()){ MatchResult mr = m.toMatchResult(); for (int i = 0; i < 14; i++) { System.out.println("

解析网页源码方式

解析政策源码 1,正则获取: Regex regex = new Regex(strPattern, RegexOptions.IgnoreCase | RegexOptions.Multiline); if (regex.IsMatch(htmlContent)) { MatchCollection matchCollection = regex.Matches(htmlContent); foreach (Match match in matchCollection) { string va

Android 【山西违章查询实现4】(解析网页源码然后ListView显示出来)--- 将解析出来的数据放到ListView中

这次更简单了. List<Map<String, String>> data = new ArrayList<Map<String, String>>(); Map<String, String> map = new HashMap<String, String>(); 然后将mr.group(i)中的数据拿出来放进去 protected void onPostExecute(String result) { List<Map&

HtmlAgilityPack --解析Html源码

最近项目需要从网络上抓取一下数据解析Html源码,奈何正则表达式难写,于是网上搜索找到了“ HtmlAgilityPack”类库,敏捷开发,果然效率非同寻常. 在此做笔记,写下心得,顺便给自己总结一下. 1. HtmlAgilityPack使用的是XPath进行路径搜索,如果对XML路径搜索很熟悉,用起来会得心应手 <?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book

html 网页源码解析:bs4中BeautifulSoup

from bs4 import BeautifulSoup result=requests.request("get","http://www.baidu.com")result.encoding="utf-8" print(result.text) #获取源码soup=BeautifulSoup(result.text,"html.parser") #解析html对象,并赋值给soup soup.title #获取网页第一个

httpclient下载网页源码---java基础爬虫

有关httpclient: HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,它不仅使客户端发送Http请求变得容易,而且也方便开发人员测试接口(基于Http协议的),提高了开发的效率,也方便提高代码的健壮性.因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会更加深入. org.apache.commons.httpclient.HttpClient与org.apache.http.client.H