BS4 + Python3:无法爬网树:'NavigableString'对象没有属性'has_attr'




我是Python的新手(我只知道powershell(,我正在尝试用BS4+Python3学习Web爬网。

下面是我练习的一个简单练习:

<h1 class="entry-title">
<a href="test1.html">test1</a></h1>
<h1 class="entry-title">
<a href="test2.html" rel="bookmark">test2</a></h1>

我想做的是只获取具有属性"rel"的详细信息(href和.string(

这是我的代码

for h1_Tag in soup.find_all(("h1", { "class" : "entry-title" })):
    for a_Tag in h1_Tag.contents:
        if a_Tag.has_attr('rel'):
           print (a_Tag)

但我得到了:AttributeError:"NavigableString"对象没有属性"has_attr">

我做错了什么?感谢您的帮助。

谢谢!

您正在迭代所有内容,包括NavigableString对象;例如文本。

如果要查找具有rel属性的所有元素,请搜索它们:

for h1_Tag in soup.find_all(("h1", { "class" : "entry-title" })):
    for a_Tag in h1_Tag.find_all('a', rel=True):
       print(a_Tag)

rel=True关键字参数将搜索限制为具有该属性的元素;将跳过不具有rel属性的<a>标记。

另一种选择是使用SoupStrainer。这将允许您根据预定义的条件解析文档。使用Python 2.7和BeautifulSoup 4.3.2,因此逻辑相似。

from bs4 import BeautifulSoup as bsoup, SoupStrainer as strain
ofile = open("test.html")
strain = strain(rel=True)
soup = bsoup(ofile, parse_only=strain)
print soup

结果:

<a href="test2.html" rel="bookmark">test2</a>
[Finished in 0.2s]

如果这有帮助,请告诉我们。

相关内容

最新更新