我目前正在尝试使用Python 2.7的BeautifulSoup(bs4)从网页上抓取文本。我的原始代码如下:
string = ''
a = soup.find('div',attrs={"id":"pressrelease"})
[x.extract() for x in a.findAll('script')]
[x.extract() for x in a.findAll("span", {'class':'hidden'})]
for element in a:
try:
string += element.get_text()
except Exception as e: print(e)
尽管我的代码确实为我提供了所需的文本,但它还会吐出以下错误:'NavigableString'对象没有属性'get_text'。我想实现一种功能,如果代码遇到异常,该功能将保存URL,但是在这种情况下,我不希望保存URL,因为即使它抛出异常,也已成功抓取了页面。因此,我试图更好地理解错误的确切含义(以便我可以决定是否有意忽略此情况)。我已经尝试过YouTube,SO,Google,但到目前为止我还没有找到任何东西。官方的bs4文档(https://www.crummy.com/software/BeautifulSoup/bs4/doc/)上有一节,但老实说,它已经超越了我(我是新手)。
任何外行关于什么是navigablestring以及为什么它将导致我的代码引发此类错误的解释都将受到赞赏!
答案 0 :(得分:1)
NavigableString
是HTML文档中的少量文本。参见the docs。您搜索的标签内至少有一个项目是一些文字,可能是空白。
字符串不能包含文本,它们是文本,所以它们没有get_text
方法,因此尝试调用这种方法是错误的。 / p>
在尝试调用每个项目之前,您可以检查每个项目是否为bs4.element.Tag
。
get_text()
请注意,我将迭代变量更改为for item in a:
if type(item) is bs4.element.Tag:
string += item.get_text()
,因为您实际上将其命名为item
的想法是,至少在一个变量中,它实际上是HTML元素的确不是。