代码如下:
<div class="browse">
<a href="xxx" > abc </a>
<a href="zzz"> xyz </a>
</div>
我想使用BS4获取数据'xxx'和'zzz'。网页上有几个部门有这样的格式。所有这些链接都不同,它们包含的文本也不同。 怎么做?
答案 0 :(得分:1)
给出带有以下
的文本文件foo.txt<div class="browse">
<a href="xxx" > abc</a></div>
<div class="browse">
<a href="yyy" > abc</a></div>
>>> from bs4 import BeautifulSoup as bs4
>>> html = open("foo.txt").read()
>>> soup = bs4(html)
>>> [a.attrs for sub in soup.findAll(attrs={"class":"browse"}) for a in sub.findAll('a')]
[{'href': 'xxx'}, {'href': 'yyy'}]
答案 1 :(得分:0)
我使用find_all来获取所有具有class =“browse”
的数据
如果你没有用你的代码发布一个简单的例子,我们就无法分辨你做错了什么。以下是您可以执行的操作的示例:
from bs4 import BeautifulSoup
html = """
<div class="browse">
<a href="xxx"> abc</a>
</div>
<div>
<a href="yyy"> abc</a>
</div>
<div class="browse">
<a href="zzz" > abc</a>
</div>
"""
soup = BeautifulSoup(html)
divs = soup.find_all('div', {"class": "browse"})
for div in divs:
print(div.a['href'])
--output:--
xxx
zzz
代码如下:
<div class="browse"> <a href="xxx" > abc</a> .
很好的例子。 :(
如果你的html实际上是这样的:
html = """
<div class="browse">
<a href="xxx"> abc</a>
<div>
<a href="yyy"> abc</a>
<div class="browse">
<a href="zzz" > abc</a>
"""
然后bs4将其解析为:
<html>
<body>
<div class="browse">
<a href="xxx">
abc
</a>
<div>
<a href="yyy">
abc
</a>
<div class="browse">
<a href="zzz">
abc
</a>
</div>
</div>
</div>
</body>
</html>
注意div标签是如何彼此嵌套的。我不知道这是否给你带来麻烦 - 但上面的代码仍然有用。