这就是我所拥有的:
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文本?
答案 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