python爬虫教程之bs4解析和xpath解析详解

 更新时间:2022年02月28日 10:32:56   作者:A.way30  
这篇文章主要给大家介绍了关于python爬虫教程之bs4解析和xpath解析的相关资料,bs4、xpath比较容易上手但是功能有限,正则比较晦涩难懂但是功能超级强大,需要的朋友可以参考下

bs4解析

原理:

1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中

2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取

如何实例化BeautifulSoup对象:

from bs4 import BeautifulSoup

BeautifulSoup(参数一,参数二)

参数一为文件描述符,参数二为解析器,一般为’lxml’

一对象的实例化:

1.将本地的html文档中的数据加载到该对象中

fp = open( './test.html','r',encoding='utf-8')
soup=BeautifulSoup(fp,'lxml')

2.将互联网上获取的页面源码加载到该对象中

page_text =response.text
soup=BeatifulSoup(page_text,'lxml')

soup指初始化的BeautifulSoup对象

用于数据解析的方法和属性:

1.soup.tagName:返回的是文档中第一次出现的tagName对应的标签

2.soup.find():

(1).find( ‘tagName’):等同于soup.tagName

(2).属性定位:soup.find(‘div’,class_/id/或者其他属性=‘song’)

定位到< div class=“song”>/< div id=“song”>的标签下

class如果没有加_则代表关键字

3.soup.find_all(‘tagName’):返回符合要求的所有标签(列表)

soup对象:

<div class="tang">
    <ul>
        <li><a href="http://www.baidu.com" rel="external nofollow"  title= "ging">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a></1i>
        <li><a href="http://www.163.com" rel="external nofollow"  title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a></1i>
        <li><a href=" http://ww.126.com" rel="external nofollow" alt="qi ">歧王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
        <li><a href="http: //www.sina.com" rel="external nofollow"  class="du">杜甫</a></li>
        <li><a href="http://www.dudu.com" rel="external nofollow"  class="du">杜牧</a></li>
        <li><b>杜小月</b></li>
        <li><i>度蜜月</i></li>
        <li><a href="http://ww.hana.com”id=" rel="external nofollow" feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
    </ul>
</div>

4.select:

- select(‘某种选择器(id,class,标签…选择器)’),返回的是一个列表。

标签什么都不加,class前面加. id前面加#

层级选择器:

>表示的是一个层级;空格表示的多个层级

     soup.select( '.tang > ul > li > a') 
     soup.select( '.tang >ul a')
     结果为:[<a href="http://www.baidu.com" title= "ging">清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村</a>,
     <a href="http://www.163.com" title="qin">秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山</a>,
     <a href=" http://ww.126.com"alt="qi ">歧王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a>,
     <a href="http: //www.sina.com" class="du">杜甫</a>,
     <a href="http://www.dudu.com" class="du">杜牧</a>,
    <a href="http://ww.hana.com”id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a>]

5.获取标签之间的文本数据:

-soup.a.text/string/get_text()

-text/get_text():可以获取某一个标签中所有的文本内容

-string:只可以获取该标签下面直系的文本内容

6.获取标签中属性值:

soup.a[‘属性值’]

print(soup.select( '.tang > ul > li > a') [0]['href'])
结果:
www.baidu.com

xpath解析

最常用且最便捷高效的一种解析方式。通用性。

xpath解析原理:

1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。

2调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。

实例化一个etree对象:

from lxml import etree

-1.将本地的html文档中的源码数据加载到etree对象中:

etree.parse(filePath)

-2.可以将从互联网上获取的源码数据加载到该对象中

etree.HTML( 'page_text')

xpath( ‘xpath表达式’)

xpath表达式:(返回一个列表)

-/:表示的是从根节点开始定位。表示的是一个层级。

-//:表示的是多个层级。可以表示从任意位置开始定位。

-属性定位://div[@class=‘song’] tag[@attrname=‘attrvalue’]

-索引定位://div[@class=‘song’]/p[3]

索引从1开始的

取文本:

  • /text()获取的是标签中直系的文本内容
  • //text(标签中非直系的文本内容(所有的文本内容)

取属性:

  • /@attrName
  • eg:/img/@src
  • ./表示定位到当前位置(局部解析)

多个xpath之间用|分割:

  • tree.xpath(’//div[@class=‘song’]/p[3] | //div[@class=‘song’]’)

总结

到此这篇关于python爬虫教程之bs4解析和xpath解析的文章就介绍到这了,更多相关python bs4和xpath解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 给DataFrame增加index行名和columns列名的实现方法

    python 给DataFrame增加index行名和columns列名的实现方法

    今天小编就为大家分享一篇python 给DataFrame增加index行名和columns列名的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • 详解Python如何求不同分辨率图像的峰值信噪比

    详解Python如何求不同分辨率图像的峰值信噪比

    这篇文章主要为大家详细介绍了如何利用Python中的 NumPy 和 OpenCV 库实现求不同分辨率图像的峰值信噪比,感兴趣的小伙伴可以跟随不想一起学习一下
    2023-01-01
  • 用Python写脚本,实现完全备份和增量备份的示例

    用Python写脚本,实现完全备份和增量备份的示例

    下面小编就为大家分享一篇用Python写脚本,实现完全备份和增量备份的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python add()集合中添加元素的实现

    Python add()集合中添加元素的实现

    本文主要介绍了Python add()集合中添加元素的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 浅谈Python实时检测CPU和GPU的功耗

    浅谈Python实时检测CPU和GPU的功耗

    本文主要介绍了浅谈Python实时检测CPU和GPU的功耗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python+streamlit实现轻松创建人事系统

    Python+streamlit实现轻松创建人事系统

    streamlit 是 基于 Python 的一个非常强大的 web 构建系统,通过该类库,我们可以实现不需要编写一行前端代码而构建一个完整的 Web 应用。下面我们就来编写一个简单的人事系统吧
    2023-02-02
  • Python中的Selenium异常处理

    Python中的Selenium异常处理

    这篇文章介绍了Python中的Selenium异常处理,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Python 内置高阶函数详细

    Python 内置高阶函数详细

    这篇文章主要介绍了Python 内置高阶函数,文中要介绍的内置高阶函数有map()、reduce() 函数、reduce() 函数、sorted() 函数,需要的朋友可以参考一下文章的详细内容
    2021-11-11
  • OpenCV角点检测的实现示例

    OpenCV角点检测的实现示例

    角点通常被定义为两条边的交点,本文主要介绍了OpenCV角点检测的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Python用20行代码实现完整邮件功能

    Python用20行代码实现完整邮件功能

    这篇文章主要介绍了如何使用Python实现完整邮件功能的相关资料,需要的朋友可以参考下面文章内容,希望能帮助到您
    2021-09-09

最新评论