如何在使用Python的BeautifulSoup处理网页时按**class**或**div id**值过滤href链接?
我有一个 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)