Python Beautiful Soup 忽略类
我正在用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"]')