我是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]
如果这有帮助,请告诉我们。