Beautiful Soup常见的用法
1. 提取文本
.get_text()
:提取标签内的文本内容,并可以指定分隔符和是否去除空白:
soup.get_text("|", strip=True)
.stripped_strings
:生成器,返回文本列表,可以手动处理列表:
[text for text in soup.stripped_strings]
2. 遍历文档树
使用.prettify()
方法可以输出整个HTML文档的格式化字符串,帮助理解文档结构:
print(soup.prettify())
3. 搜索文档元素
.find()
:查找并返回第一个符合条件的标签:
result = soup.find('tag_name', attrs={'class': 'classname'})
.find_all()
:查找并返回所有符合条件的标签:
results = soup.find_all('tag_name', attrs={'class': 'classname'})
或者直接查找多个标签:
results = soup.find_all(['tag1', 'tag2'])
4. 提取属性和属性值
使用.attrs
属性可以访问标签的属性和属性值:
soup.tag.attrs
5. 其他常用方法
.title.string
:提取<title>
标签中的文本。.p.string
:提取所有<p>
标签中的文本。
css选择器的基本用法
基本的使用方法
在BeautifulSoup中,使用.select()
方法来应用CSS选择器:
results = soup.select('your-css-selector')
这将返回一个列表,其中包含所有匹配的元素。
基本选择器
标签选择器:选择所有指定标签名的元素。
soup.select('p') # 选择所有的<p>标签
类选择器:选择所有具有指定类属性的元素。
soup.select('.className') # 选择所有class属性为"className"的元素
ID选择器:选择具有指定id属性的元素。
soup.select('#idName') # 选择id属性为"idName"的元素
属性选择器
属性存在:选择具有指定属性的所有元素。
soup.select('[type]') # 选择所有具有type属性的元素
属性精确值:选择属性值完全匹配指定值的元素。
soup.select('[type="text"]') # 选择所有type属性为"text"的元素
属性值包含:选择属性值包含指定文本的元素。
soup.select('[href*="example"]') # 选择所有href属性值中包含"example"的元素
属性值以指定值开头:选择属性值以指定文本开头的元素。
soup.select('[href^="https"]') # 选择所有href属性值以"https"开头的元素
属性值以指定值结尾:选择属性值以指定文本结尾的元素。
soup.select('[href$=".pdf"]') # 选择所有href属性值以".pdf"结尾的元素
伪类选择器
:first-child:选择作为其父元素的第一个子元素的元素。
soup.select('p:first-child') # 选择每个父元素下的第一个<p>元素
:nth-child(n):选择作为其父元素的第n个子元素的元素。
soup.select('tr:nth-child(2)') # 选择每个父元素下的第二个<tr>元素
:not(selector):选择不匹配指定选择器的元素。
soup.select('p:not(.className)') # 选择所有不包含class="className"的<p>元素
组合选择器
后代选择器:空格分隔,选择所有后代元素。
soup.select('div p') # 选择<div>元素内部的所有<p>元素
子代选择器:
>
分隔,选择直接子元素。soup.select('ul > li') # 选择<ul>元素的直接<li>子元素
相邻兄弟选择器:
+
分隔,选择紧随其后的兄弟元素。soup.select('h1 + p') # 选择紧跟在<h1>元素后的<p>元素
通用兄弟选择器:
~
分隔,选择所有后续的兄弟元素。soup.select('h1 ~ p') # 选择所有<h1>元素后的<p>元素
提取标签中的属性的两种方式
使用find_all
方法:
find_all
方法可以查找所有匹配的标签,并返回一个列表。然后你可以遍历这个列表来提取href
属性。a_tags = soup.find_all('a') for tag in a_tags: href = tag.get('href') print(href)
使用CSS选择器:
如果你熟悉CSS选择器,可以使用
select
方法来更精确地选择元素。a_tags = soup.select('a[href]') for tag in a_tags: href = tag.get('href') print(href)
评论区