Beautifulsoup:可以从HTML或XML文件中提取数据的Python库。

beautifulsoup 是一个解析器,可以特定的解析出内容,省去了我们编写正则表达式的麻烦。

1、导入模块

from bs4 import BeautifulSoup

2、Beautifulsoup 使用

在这之前可以先了解一下 Beautifulsoup 解析器,这里解析器使用 python 的内置标准库——

html.parser

soup = BeautifulSoup(解析内容, 解析器)

soup = BeautifulSoup(r.content, 'html.parser')

2.1 标签名查找

使用标签名来获取结点:

  • soup.标签名

使用标签名来获取结点标签名:

  • soup.标签.name(name——主要用于非标签名式筛选时,获取结果的标签名)

使用标签名来获取结点属性:

  • soup.标签.attrs(获取全部属性)
  • soup.标签.attrs[属性名](获取指定属性)
  • soup.标签[属性名](获取指定属性)
  • soup.标签.get(属性名)

使用标签名来获取结点的文本内容:

  • soup.标签.text
  • soup.标签.string
  • soup.标签.get_text()

嵌套方法:

  • soup.ul.li(ul标签下的li标签)
from bs4 import BeautifulSoup

html = """
<html>
    <head>
        <meta charset="UTF-8">
        <title>BeautifulSoup</title>
    </head>
    <body>
        <div id="one">123</p>
        <p class="two">456</p>
        <p>999</p>
        <a href="http://www.baidu.com" title="789">000</a>
    </body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
# 获取结点
print("-------------------获取结点--------------------")
print(soup.head)  # 获取head标签——<head><meta charset="utf-8"/><title>BeautifulSoup</title></head>
print(soup.p)  # 返回第一个p标签——<p>456</p>
# 获取结点名
print("-------------------获取结点名-------------------")
print(soup.head.name)  # head
# 获取文本内容
print("-------------------获取文本内容-----------------")
print(soup.title.string)  # 返回title的内容——BeautifulSoup
print(soup.title.text)  # 返回title的内容——BeautifulSoup
print(soup.title.get_text())  # 返回title的内容——BeautifulSoup
# 获取属性
print("-------------------获取属性--------------------")
print(soup.p.attrs)  # 以字典形式返回标签内容——{'class': ['two']}
print(soup.p.attrs['class'])  # 以列表形式返回标签的值——['two']
print(soup.p['class'])  # 以列表形式返回标签的值——['two']
t = soup.title
print(t.text)   # BeautifulSoup
print(type(t))  # <class 'bs4.element.Tag'>
print(t.name)  # title
# 嵌套选择
print(soup.head.title.string)   # BeautifulSoup

2.2 find\find_all查找

soup = BeautifulSoup(r.content, 'html.parser')
data_list = soup.find('div', class_='zbgg_table').find_all('tr')
for data in data_list:
    url = data.find_all('div', class_='list-content-between')[0].find('a')['href']
    Title = data.find_all('div', class_='list-content-between')[0].find('a')['title']
    BTypeName = (data.find_all('div', class_='list-content-between')[0].find('a')
                                 .find('font').get_text()[1:-1])
    PubDate = (data.find_all('div', class_='list-content-between')[0]
                               .find('span', class_='list-content-end').get_text()).strip()

find:根据参数找对应的标签,但只返回第一个符合条件的结果。

find_all:根据参数来找对应的标签,返回所有符合条件的结果。

2.3 select筛选——select使用CSS选择规则

soup.select('标签名')——根据标签来筛选出指定标签。

soup.select('#xxxx')——根据id筛选出指定标签,返回值是一个列表。

soup.select('.xxxx')——根据class筛选出指定标签,返回值也是一个列表。

soup.select('#xxxx .xxxx')——id下的class的标签,返回值也是一个列表,例如:

soup.select('.class1 #id2')就是class=class1标签下id=id2的标签

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐