BeautifulSoup解析HTML

2025-10-03 12:48:45

1、从网上获取数据:

直接上代码,由于这里不讲爬虫相关的知识,所以就不细讲了。说明以下几点:

1. url指向的为你想爬取的网页地址;

2. translation_html为网页地址所对应的html代码,所对应的页面对下图;

3. 要介绍的BeautifulSoup就是对第2点中translation_html的内容进行解析。

---------------代码分割线---------------

import urllib.request as rq

url = "https://www.baidu.com"

req = rq.Request(url, headers={       'Connection': 'Keep-Alive',       'Accept': 'text/html, application/xhtml+xml, */*',       'Accept-Language': 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko'   })

translation_html = rq.urlopen(req).read().decode("utf-8")

BeautifulSoup解析HTML

2、安装并导入BeautifulSoup:

可以通过pip命令直接安装:

pip install beautifulsoup4

如果还想解析html以外格式的一些文档,可以再安装其它的库,如:

$ pip install lxml 

$ pip install html5lib

安装好后,要在python(.py)文件中使用BeautifulSoup的各项功能前,还需要在.py文件中用以下语句把BeautifulSoup库进行导入。

from bs4 import BeautifulSoup

BeautifulSoup解析HTML

3、我们已经从第一步获取了要解析的HTML代码,从第二步安装并导入了BeautifulSoup库,接下来就可以使用BeautifulSoup库所提供的功能,对HTML的内容进行解析了。为了方便说明,这里不讲原理性的东西,都是以举例的方式让大家看得明白。

BeautifulSoup解析HTML

4、先看一段代码:

from bs4 import BeautifulSoup  # 导入BeautifulSoup库

soup = BeautifulSoup(translation_html, "html.parser")  # translation_html为第一步得到的html代码,"html.parser"说明我们解析的内容为html格式的。

为了使说明更简洁,translation_html所对应的HTML代码看成以下内容:

<html>

<body>

  <div id='div1'>

    <p class='p1 first'>p1 content<!-- p1 comment -->

    <p class='p2 second'>p2 content

  </div>

</body>

</html>

接下来的说明就围绕这段代码来说明BeautifulSoup的解析过程。

BeautifulSoup解析HTML

5、soup =  返回BeautifulSoup对象:整个html代码(从<html>到</html>)

soup("div")  =  查找所有div元素,返回列表:第1个元素为(从<div id='div1'>到</div>)的代码

soup.div = 查找第一个div元素,返回BeautifulSoup对象:(从<div id='div1'>到</div>)

soup("p") =  查找所有p元素,返回列表:第1个元素为"<p class='p1'>p1 content",第二个元素为"<p class='p2'>p2 content"。

soup.div("p", recursive=False) =  查找div下直属p元素,返回列表:第1个元素为"<p class='p1'>p1 content",第二个元素为"<p class='p2'>p2 content"。

soup.p = 查找第一个p元素,返回BeautifulSoup对象(<p class='p1'>p1 content)

注意:上述返回列表中的每个元素也是BeautifulSoup对象。可以把返回的BeautifulSoup对象看成是一个原HTML上的子HTML。在这个子对象上的操作方法和最初的对象是一样的。

BeautifulSoup解析HTML

6、soup("p", attrs={"class": "p2"}) = 在soup("p")的基础上加了一个限定条件,可以把查找的范围更精确化。返回值也是一个列表。相当于soup.findAll(...)。属性值还可以接受正则表达式:如上述的"p2"可以被替换为s【s = re.compile(r'fir')】

soup.find("p", attrs={"class": "p2"})  = 返回上面列表中的第一元素。

attrs参数的内容可以有多个,如id,class,name什么都可以加进入,以最大限度的精确查找。

BeautifulSoup解析HTML

7、soup.p['class'] = 返回第一个p元素的class属性列表(['p1', 'first'])

soup.p.text = 返回第一个p元素的内容(p1 content),注意不包含注释的内容

以上就是BeautifulSoup库的基本用法,相信通过大家的举一反三,应该能够完成你想要的功能了。

BeautifulSoup解析HTML

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢