Python Beautiful Soup 'ResultSet'对象没有'get'属性

0 投票
1 回答
3568 浏览
提问于 2025-04-17 23:07

我想从一个网站上抓取一些链接,并在清理后把它们写入一个文件。网站上的链接看起来是这样的:

<a href="javascript:changeChannel('http://dr01-lh.akamaihd.net/i/dr01_0@147054/index_1700_av-b.m3u8', 20);">DR1</a><br>
<a href="javascript:changeChannel('http://dr02-lh.akamaihd.net/i/dr02_0@147055/index_1700_av-b.m3u8', 21);">DR2</a><br>
<a href="javascript:changeChannel('http://dr03-lh.akamaihd.net/i/dr03_0@147056/index_1700_av-b.m3u8', 701);">DR3</a><br>
<a href="javascript:changeChannel('http://dr06-lh.akamaihd.net/i/dr06_0@147059/index_1700_av-b.m3u8', 31);">DR Ultra</a><br>
<a href="javascript:changeChannel('http://dr04-lh.akamaihd.net/i/dr04_0@147057/index_1700_av-b.m3u8', 38);">DR K</a><br>
<a href="javascript:changeChannel('http://dr05-lh.akamaihd.net/i/dr05_0@147058/index_1700_av-b.m3u8', 50);">DR Ramasjang</a><br>

我可以用这个方法来抓取它们:

links = soup.findAll(href=re.compile("javascript"))

这样我得到了这个输出:

[<a href="javascript:changeChannel('http://dr01-lh.akamaihd.net/i/dr01_0@147054/index_1700_av-b.m3u8', 20);">DR1</a>, <a href="javascript:changeChannel('http://dr02-lh.akamaihd.net/i/dr02_0@147055/index_1700_av-b.m3u8', 21);">DR2</a>, <a href="javascript:changeChannel('http://dr03-lh.akamaihd.net/i/dr03_0@147056/index_1700_av-b.m3u8', 701);">DR3</a>, <a href="javascript:changeChannel('http://dr06-lh.akamaihd.net/i/dr06_0@147059/index_1700_av-b.m3u8', 31);">DR Ultra</a>, <a href="javascript:changeChannel('http://dr04-lh.akamaihd.net/i/dr04_0@147057/index_1700_av-b.m3u8', 38);">DR K</a>, <a href="javascript:changeChannel('http://dr05-lh.akamaihd.net/i/dr05_0@147058/index_1700_av-b.m3u8', 50);">DR Ramasjang</a>]

现在我想把这些链接清理一下,只保留''之间的http://部分,但这就出现问题了。

我试过这个:

fullink = links.get('href')

但是我遇到了这个错误:

'ResultSet' object has no attribute 'get'

那么我该如何从中提取出链接呢?

1 个回答

5

Beautiful Soup的文档里提到:

出现错误:'ResultSet'对象没有'foo'这个属性 - 这通常是因为你以为find_all()会返回一个单独的标签或字符串。其实,find_all()返回的是一个标签和字符串的列表,也就是一个ResultSet对象。你需要遍历这个列表,查看每一个的.foo属性。或者,如果你真的只想要一个结果,那就应该用find()而不是find_all()。

所以你可能想要用 full_links = [x.get("href") for x in links] 这段代码。

撰写回答