如何避免BeautifulSoup出现“ NavigableString”错误并进入href文本?

时间:2019-11-10 03:27:31

标签: beautifulsoup

这就是我所拥有的:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

url = "http://python.beispiel.programmierenlernen.io/index.php"
doc = requests.get(url).content
soup = BeautifulSoup(doc, "html.parser")

for i in soup.find("div", {"class":"navigation"}):
    print(i)

当前“ i”的打印输出为:

<a class="btn btn-primary" href="index.php?page=2">Zur nächsten Seite!</a>

我想打印href链接“ index.php?page = 2”。 当我尝试对“ i”使用BeautifulSoups的“查找”,“选择”或“属性”方法时,出现错误。例如

print(i.attrs["href"])

我得到:

AttributeError: 'NavigableString' object has no attribute 'attrs'

如何避免BeautifulSoup出现“ NavigableString”错误并获取href文本?

1 个答案:

答案 0 :(得分:2)

问题似乎是for i in soup.find。如果仅查找一个元素,则无需迭代该元素,并且如果您正在查找多个元素,则find_all而不是find可能符合目的。

更具体地说,这是两种方法。除了上面提到的内容外,请注意,i是一个div,其中包含所需的a作为孩子,因此我们需要采取额外的步骤(使用xpath)。

import requests
from bs4 import BeautifulSoup

url = "http://python.beispiel.programmierenlernen.io/index.php"
doc = requests.get(url).content
soup = BeautifulSoup(doc, "html.parser")

for i in soup.find_all("div", {"class": "navigation"}):
    print(i.find("a", href=True)["href"])

print(soup.find("div", {"class": "navigation"})
          .find("a", href=True)["href"])

输出:

index.php?page=2
index.php?page=2