如何在使用Python的BeautifulSoup处理网页时按**class**或**div id**值过滤href链接?

1 投票
1 回答
1395 浏览
提问于 2025-04-17 20:29

我有一个 HTML 文件,里面有不同的 div 属性,内容如下:

<div id="meat">             
    <div id="tag_nav" class="font2 pad2">
Comics: 
<a id="tag_nav_random" href="/random">Random</a>
<a id="tag_nav_popular" href="/tag/popular">Most Popular</a>
<a href="/comics">All</a>
<a href="/tag/cats">Cats</a>
<a href="/tag/grammar">Grammar</a>
<a href="/tag/food">Food</a>
<a href="/tag/animals">Animals</a>
<a href="/tag/tech">Tech</a>

<li>
        <div class="bg_comic">
        <a href="/comics/mantis_shrimp"><img src="http://s3.amazonaws.com/theoatmeal-img/thumbnails/mantis_shrimp.png" alt="Why the mantis shrimp is my new favorite animal" class="border0" /></a>
        </div>
        <div class="category_and_view">
    </li>

我想从我的 HTML 页面中提取所有属于 bg_comic 类的链接,其他不同类的 标签我不想要。 我尝试了以下方法,但没有成功:

links=soup.find_all("a",class_="bg_comic")
for tag in links:
    link=tag.get('href',None)

在上面的例子中,link 变量应该是 /comics/mantis_shrimp 这个值,而不是其他任何值。但我的代码什么都没有打印出来。

我哪里出错了?在使用 BeautifulSoup 处理网页时,如何根据 div id 的值来过滤链接呢?

1 个回答

1

在HTML里没有带有 bg_comic 类的 a 标签,但有一个带有 bg_comic 类的 div 标签。

按照下面的方式修改你的代码就能解决问题。

links = soup.find_all("div", class_="bg_comic") # a -> div
for tag in links:
    lilnk = tag.a.get('href', None) # tag.get -> tag.a.get

另外,你也可以使用 CSS选择器

links = soup.select("div.bg_comic a")
for tag in links:
    link = tag.get('href', None)

撰写回答