导航字符串(HTML)到底是什么?

时间:2019-01-06 03:45:28

标签: python html beautifulsoup

我目前正在尝试使用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以及为什么它将导致我的代码引发此类错误的解释都将受到赞赏!

1 个答案:

答案 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元素的确不是。