Python Beautiful Soup 忽略类

0 投票
2 回答
921 浏览
提问于 2025-04-17 22:27

我正在用Beautiful Soup从一个网站上抓取一些链接。

这些链接都在一个叫做col-sm-4的div类里面,不过在这个类下面还有另一个div,它的id是fyfy,我需要忽略这个div下面的所有链接。

现在我的代码看起来是这样的,但它也抓取了id为fyfy的链接,而我想把这些链接去掉。

divtag = soup.find("div","col-sm-4 well")
links = divtag.findAll("a")

编辑:下面是网站的html。我只需要抓取javascript的链接,其他的要忽略。

<div class="col-sm-4 well">

<div id="fyfy" style="display:none;">
<strong><p>Manglende plugin?</p></strong>
<a href="http://someserver.com/misc/plugin/YouSee.msi" class="btn btn-primary">Windows</a><br>
<a href="http://blapd.org/trw/yousee.pkg" class="btn btn-primary">OSX</a> <br>
<a href="https://discussions.apple.com/thread/5491044" class="btn btn-primary">OSX Fix (hvis ingen lyd/billede)</a><br>
<br>
<br>
<strong><p>TV-GLAD på andre enheder</p></strong>
<a href="http://blapd.org/trw/apple.html" class="btn btn-primary">På OSX med Safari?</a> <br>
<a href="http://blapd.org/trw/m" class="btn btn-primary">Mobilside</a><br>
<a href="http://blapd.be/file/sxV18.zip" class="btn btn-primary">XBMC plugin</a><br>
<br>
</div>
<a class="btn btn-warning" onClick="showHideFyfy();" id="fyfyknap">Vis Info</a>

<br>
<br>
<strong>DR Kanaler<br></strong>
<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>
<br>
</div>

2 个回答

1

我来回答这个问题,因为昨天没有人回答:

你可以直接在 soup 上使用 CSS 选择器:

soup.select('.col-sm-4 > a[href]')
Out[20]: 
[<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>]

这段代码的意思是:选择 col-sm-4 类的 直接 子元素中,带有 href 属性的 a 标签。你可以在 文档里 了解更多关于 select 的内容。我加了这个 href 过滤器,因为我想你不想要这个标签:

<a class="btn btn-warning" onClick="showHideFyfy();" id="fyfyknap">Vis Info</a>

如果你想要这个标签,只需去掉 [href] 过滤器就可以了。

0

好的,我通过去掉 .col-sm-4 并搜索 javascript:changeChannel 让它工作了,像这样:

divtag = soup.select('a[href^="javascript:changeChannel"]') 

撰写回答