python爬虫---bs4 模块

全称:Bautiful Soup,此模块是第三方库,因此需要单独下载

安装方法:

pip install bs4

由于 BS4 解析页面时需要依赖文档解析器,所以还需要安装 lxml 作为解析库:

pip install lxml

另外,在我们使用bs4这个模块的时候,我们需要创造一个BeautifulSoup对象,该对象常用解析器有:

  • html.parser
  • lxml
  • xml
  • html5lib

BeautifulSoup默认支持Python的标准HTML解析库,但是它也支持一些第三方的解析库

解析器 使用方法 优势 劣势
python标准库 BeautifulSoup(markup,“html.parser”) python内置标准库,执行速度适中,文档容错能力强 python2.7.3 or 3.2.2以前的版本中文档容错能力差
lxml HTML 解析器 BeautifulSoup(markup,“lxml”) 速度快,文档容错能力强 需要C语言库
lxml xml 解析器 BeautifulSoup(markup,“xml”); BeautifulSoup(“lxml”,“xml”) 速度快,唯一支持xml的解析器 需要C语言库
html5lib BeautifulSoup(markup,“html5lib”) 最好的容错性 速度慢

BeautifulSoup

● 用法示例:

BeautifulSoup(url.text,'html.parser')    # "url.text"为被解析内容,"html.parser"为解析器

其中,第一个参数为需要解析的内容,第二个参数为需要使用的解析器

查找节点

有两种方式查找,一个是find,一个是find_all
● 书写格式 find( “需要查找的标签名” , attrs={属性:属性名}) 用法示例:

# 查找单个标签
html.find("div",attrs={
    
    "class":"v7W49e"})
html.find_all("div",attrs={
    
    "class":"v7W49e"})

# 查找多个标签
html.find_all([a,h3])

# 查找ul标签下的所有a标签
html.find("ul",attrs={
    
    "class":"v7W49e"}).find_all('a')

获取文本

  • bs4中获取标签中的文本常用有两种方法:

    方法 解释
    a.text get_text()是Beautiful Soup对象的方法,用于获取指定标签及其子标签中的所有文本内容,并将它们合并成一个字符串。如果一个标签内包含了多个子标签,get_text()会将它们的文本内容合并到一个字符串中,不会保留子标签之间的任何分隔符。get_text()的调用方式为p.get_text(),其中p是Beautiful Soup对象找到的特定标签
    a.get_text() text是Beautiful Soup标签对象的属性,用于获取该标签中直接包含的文本内容,不包括子标签内的文本内容。如果一个标签内包含了多个子标签,text只会返回该标签直接包含的文本内容,不包括子标签的文本内容。text的调用方式为p.text,其中p是Beautiful Soup对象找到的特定标签。
  • 示例:

    <p>
        这是一个段落。
        <strong>粗体文本</strong>
        <em>斜体文本</em>
    </p>
    

    使用p.get_text()会得到合并后的文本内容:这是一个段落。粗体文本斜体文本

    p.text只会得到该段落标签直接包含的文本内容:这是一个段落。

    子标签内的文本内容并不包含在p.text

获取属性值:

BeautifulSoup4 (bs4) 中,获取标签的属性值可以使用以下两种方法:

  1. 使用 tag.get(attribute) 方法:该方法可以获取标签的指定属性值。如果属性不存在,则返回 None
  2. 使用 tag['attribute'] 或者 tag.attribute:直接通过方括号或点号来获取标签的属性值。如果属性不存在,使用方括号方式会报错,而使用点号方式会返回 None
  • 示例:
<a class="link" href="xxx.xxx.xxx" target="_blank">Example Website</a>

使用python提取a标签中的herf属性

from bs4 import BeautifulSoup

data = '<a class="link" href="xxx.xxx.xxx" target="_blank">Example Website</a>'

# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(data, 'html.parser')

# 使用 get 方法获取属性值
tag = soup.find('a')
value = tag.get('href')
print(value)

# 使用方括号获取属性值
brackets = tag['href']
print(brackets)

# 使用点号获取属性值
dot = tag.href
print(dot)

注意:如果标签不存在指定的属性,使用方括号方式会报错,而使用 get() 方法或点号方式会返回 None。因此,在使用方括号获取属性值之前,最好确保属性存在,或者使用 get() 方法来安全地获取属性值。

猜你喜欢

转载自blog.csdn.net/m0_55994898/article/details/132147519