BeautifulSoup的find和find_all不按预期工作

2 投票
1 回答
1698 浏览
提问于 2025-04-19 00:21

我刚开始使用BeautifulSoup,遇到了一些问题。我在下面设置了一个HTML片段,并创建了一个BeautifulSoup对象:

html_snippet = '<p class="course"><span class="text84">Ae 100. Research in Aerospace. </span><span class="text85">Units to be arranged in accordance with work accomplished. </span><span class="text83">Open to suitably qualified undergraduates and first-year graduate students under the direction of the staff. Credit is based on the satisfactory completion of a substantive research report, which must be approved by the Ae 100 adviser and by the option representative. </span> </p>'
subject = BeautifulSoup(html_snippet)

我尝试了几种查找(find)和查找所有(find_all)操作,但得到的结果要么什么都没有,要么是一个空列表:

subject.find(text = 'A') 
subject.find(text = 'Research')
subject.next_element.find('A')
subject.find_all(text = 'A')

之前我从电脑上的一个HTML文件创建BeautifulSoup对象时,查找操作都很顺利。但是,当我通过urllib2从网上读取网页的HTML片段时,就出现了问题。

有没有人能指出问题出在哪里?

1 个回答

4

这样传递参数:

import re
subject.find(text=re.compile('A'))

默认情况下,text 过滤器会匹配整个内容。传入一个正则表达式可以让你匹配到部分内容。

编辑:如果你只想匹配以 A 开头的内容,可以使用以下代码:

subject.find(text=re.compile('^A'))

如果你想匹配包含以 A 开头的单词的内容,可以使用:

subject.find_all(text = re.compile(r'\bA'))

很难更具体地了解你在寻找什么,如果我误解了你的意思,请告诉我。

撰写回答