我在Python下使用BeautifulSoup进行相当多的数据抓取和清理,并经常将.text.strip()
附加到soup.find命令。示例:foo_stuff = soup.find("foo").text.strip()
在某些情况下,soup.find
找不到任何内容,结果.text.strip()
会中断。在我看来,我可以通过以下几种方式解决这个问题:
.find
个查询 - 我不是一个聪明的人,能够以干净的方式构建我的查询。 .text.strip()
上使用try / except语句 - 代码很难看。 .myfind
命令 - 这涉及到修补内容并可能会抛弃协作者。 其他人有没有更好/更聪明的解决方案来解决这个问题?
编辑:现在我正在使用一个无聊的OL'函数来尝试/除.text.strip()
:
def text_strip(soup_search):
if soup_search != None:
return soup_search.text.strip()
else:
return ""
答案 0 :(得分:2)
写一个普通的旧函数怎么样?
def find_stripped(soup, what):
found = soup.find(what)
if found is not None:
return found.text.strip()
# maybe:
# return ""
现在您可以:foo_stuff = find_stripped(soup, "foo")
答案 1 :(得分:2)
我认为最安全的方法是检查.find()
是否返回了tag
类型的实例。
from bs4.element import Tag
foo_stuff = soup.find("foo")
if isinstance(foo_stuff, Tag):
# do something with foo_stuff
答案 2 :(得分:1)
另一种方法是在搜索时使用Beautiful Soup的函数参数:
http://www.crummy.com/software/BeautifulSoup/bs4/doc/#a-function
示例:
tagsWithStrippedText = bs.find_all(tagsAndStripText);
def tagsAndStripText(tag):
if tag.text:
tag.string = tag.text.strip()
return True
我发现它更有表现力。设置字符串会覆盖其中的标记时要小心。