1.get_text
- get text() 会删除文档中的所有标记,并返回一个仅包含文本的 Unicode 字符串。例如,如果你正在处理一个包含许多超链接、段落和其他标记的大文本块,所有这些标记都将被剥离,只留下一个无标记的文本块。
- 请记住,在 BeautifulSoup 对象中找到你要找的内容要比在文本块中容易得多。调用.get_text()应该是你最后要做的事情,尤其是在打印、存储或处理最终数据之前。一般来说,您应尽可能长时间地保留文档的标记结构。
nameList = bs.findAll('span', {'class': 'green'})
for name in nameList:
print(name.get_text())
2.BeautifulSoup的find()和find_all()
1)函数形式
- find_all(tag, attributes, recursive, text, limit, keywords)
- find(tag, attributes, recursive, text, keywords)
2)函数参数解释
tag:如span、h1、h2;
titles = bs.find_all(['h1', 'h2','h3','h4','h5','h6'])
print([title for title in titles])
attributes:表示该内容的属性或者的样式,如代码中{'class':{'green', 'red'}}部分;
allText = bs.find_all('span', {'class':{'green', 'red'}})
print([text for text in allText])
recursive:是一个布尔参数,如果参数为True,会检索所有的层级;如果参数为False,则只会检索第一层的tags。该参数默认为True。
text:文本参数的不同之处在于,它根据标记的文本内容而不是标记本身的属性进行匹配。例如,如果要查找示例页面中 "王子 "被标签包围的次数。
nameList = bs.find_all(text='the prince')
limit:是find_all()的参数,当limit=1时,find_all()与find()的效果一样,都是寻找第一个符合条件的数据;
3.next_siblings()
next_siblings
是一个Beautiful Soup库中的方法,它允许你在文档树中获取当前元素之后的所有同级元素(即具有相同父元素的其他元素)。这个方法返回一个生成器对象,通过迭代该生成器对象,你可以逐个访问当前元素之后的所有同级元素。
例如,如果你有一个HTML文档如下:
<html>
<head>
<title>Example</title>
</head>
<body>
<div id="content">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<p>Paragraph 3</p>
</div>
</body>
</html>
假设你正在使用Beautiful Soup来解析这个文档,并且你已经选择了第一个 <p>
元素,那么你可以使用 .next_siblings
方法来获取该元素之后的所有 <p>
元素。例如:
from bs4 import BeautifulSoup
html_doc = """
<html>
<head>
<title>Example</title>
</head>
<body>
<div id="content">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<p>Paragraph 3</p>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
first_p = soup.find('p') # 选择第一个 <p> 元素
for sibling in first_p.next_siblings:
print(sibling)
上述代码将打印出第一个 <p>
元素之后的所有 <p>
元素的文本内容:
<p>Paragraph 2</p>
<p>Paragraph 3</p>
这样,你就可以逐个访问并处理当前元素之后的同级元素。
4.RegEx
4.1Re module
正则表达通常需要借助于Re module来实现。Re module中常用的表达式:
4.2 原始字符r
在 Python 中,前缀 r
表示一个"原始字符串"(raw string)。使用原始字符串时,Python 解释器会将字符串中的转义字符(如 \n
, \t
)视为普通字符,而不是特殊字符。这在处理正则表达式时尤其有用,因为正则表达式中常常包含反斜杠 \
,而原始字符串会使得反斜杠不被转义。
例如,如果你有一个正则表达式模式是 "\b"
,用来匹配单词边界,但是你希望在字符串中直接表示这个模式而不是转义字符,你可以使用原始字符串来定义这个模式,如 r"\b"
。
4.3 常用的正则表达符号
5.re.compile()
re.compile()
是 Python 中 re
模块中的一个函数,用于将正则表达式编译成一个可重复使用的正则表达式对象。通常,当你需要在代码中多次使用同一个正则表达式时,使用 re.compile()
可以提高匹配效率。
使用 re.compile()
的基本语法是:
re.compile(pattern, flags=0)
pattern
是一个字符串,表示要编译的正则表达式模式。flags
是一个可选参数,用于指定正则表达式的匹配选项。例如,可以通过传递re.IGNORECASE
来忽略大小写。
re.compile()
返回一个正则表达式对象,你可以使用这个对象的方法进行匹配操作,比如 search()
、match()
、findall()
等。
例如,假设你有一个需要多次使用的正则表达式模式,你可以使用 re.compile()
编译它,然后多次调用该对象的方法进行匹配:
import re
# 编译正则表达式模式
pattern = re.compile(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b')
# 使用编译后的正则表达式对象进行匹配
email1 = "example@example.com"
email2 = "another_example@example.co.uk"
if pattern.match(email1):
print("Valid email")
if pattern.match(email2):
print("Valid email")
在这个例子中,re.compile()
编译了一个用于匹配电子邮件地址的正则表达式模式,然后使用这个编译后的正则表达式对象进行了两次匹配。