如何进一步过滤ResultSet的结果?

4 投票
3 回答
4532 浏览
提问于 2025-04-17 21:21

我想要获取一个HTML文档中所有链接的列表。我正在使用Beautiful Soup这个工具来解析我的HTML文件。

print soup.body.find_all('a', attrs={'data-tag':'Homepage Library'})[0]

我得到的结果是:

<a class="m0 vl" data-tag="Homepage Library" href="/video?lang=pl&amp;format=lite&amp;v=AZpftzD9jVs" title="abc">
        text
    </a>

我只对href=""这一部分感兴趣。所以我希望结果只返回href的值。

我不太确定该如何修改这个查询,以便只返回href的部分。

3 个回答

0

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程可能会涉及到很多步骤,比如连接到数据库、查询数据、处理数据等等。

有些时候,我们可能会遇到错误,比如说连接不上数据库,或者查询的数据格式不对。这些错误可能会让程序崩溃,或者让我们得到错误的结果。

为了避免这些问题,我们可以使用一些技巧,比如在代码中加入错误处理的部分。这样,当出现问题的时候,程序不会直接崩溃,而是会给我们一个提示,告诉我们哪里出错了。

总之,处理数据的时候要小心,确保每一步都能顺利进行,这样才能让我们的程序运行得更好。

for link in soup.find_all('a', attrs={'data-tag':'Homepage Library'}):
    print(link.get('href'))
4

使用 attrs

links = soup.body.find_all('a', attrs={'data-tag':'Homepage Library'})
print [link.attrs['href'] for link in links]

或者,可以把元素当作字典来直接获取属性:

links = soup.body.find_all('a', attrs={'data-tag':'Homepage Library'})
print [link['href'] for link in links]

示例:

from bs4 import BeautifulSoup


page = """<body>
<a href="link1">text1</a>
<a href="link2">text2</a>
<a href="link3">text3</a>
<a href="link4">text4</a>
</body>"""

soup = BeautifulSoup(page)
links = soup.body.find_all('a')
print [link.attrs['href'] for link in links]

输出结果:

['link1', 'link2', 'link3', 'link4']

希望这对你有帮助。

2

最后这个对我有效:

soup.body.find_all('a', attrs={'data-tag':'Homepage Library'}).attrs["href"]

撰写回答