Beautiful Soup是一个Python的一个HTML或XML的解析库,我们用它可以方便地从网页中提取数据。
Beautiful Soup 提供一些简单的、Python 式的函数来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以无须很多代码就可以写出一个完整的应用程序。 Beautifùl Soup 自动将输人文档转换为 Unicode 编码,将输出文档转换为 utf-8 编码。你不需要考虑编码方式,除非文档没有指定具体的编码方式,这时你仅仅需要说明一下原始编码方式就可以了。 Beautiful Soup 已成为和 Ixml、html5lib 一样出色的 Python 解释器,为用户灵活提供不同的解析策略或强劲的速度。
- from bs4 import BeautifulSoup
- import requests
- url = 'https://XXXXXXXX.com' # 替换为你想要爬取的网页的 URL
- response = requests.get(url)
- response.raise_for_status() # 如果请求失败,则抛出异常
- html_content = response.text
soup = BeautifulSoup(html_content, 'lxml') # 使用 lxml 解析器解析 HTML
使用 .find() 或 .find_all() 方法查找标签。
使用 CSS 选择器或标签名作为参数。
- # 使用标签名查找
- p_tags = soup.find_all('p')
-
- # 使用 CSS 选择器查找
- div_with_class = soup.find('div', class_='some-class') # 注意:class 属性在 Python 中是关键字,所以使用 class_ 代替
使用 .string 属性获取单个标签的文本内容(仅当标签内只有一个文本节点时有效)。
使用 .get_text() 方法获取标签及其所有子标签的文本内容。
- # 获取单个标签的文本内容
- content = div_with_class.string
-
- # 获取标签及其所有子标签的文本内容
- all_text = p_tags[0].get_text()
使用 ['attribute_name'] 或 .get('attribute_name') 获取标签的属性值。
- # 获取链接的 href 属性
- href = soup.find('a')['href'] # 注意:如果找不到标签或标签没有该属性,则会抛出 KeyError 异常
-
- # 更安全的方式是使用 .get() 方法,它会在找不到属性时返回 None
- href = soup.find('a').get('href')
使用 for 循环遍历 .find_all() 返回的标签列表。
- for p in soup.find_all('p'):
- print(p.get_text())