【问题标题】:How to filter href links by **class** or **div id** values when processing a webpage using BeautifulSoup in Python?在 Python 中使用 BeautifulSoup 处理网页时,如何按 **class** 或 **div id** 值过滤 href 链接?
【发布时间】:2014-03-02 12:10:03
【问题描述】:

我有一个具有不同 classdiv 属性的 html 文件,如下所示

<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 处理网页时,我们如何通过 classdiv id 值过滤链接?

【问题讨论】:

    标签: python python-2.7 beautifulsoup


    【解决方案1】:

    html 中没有带有bg_comic 类的a 标记,但是带有bg_comicdiv 标记。

    如下修改您的代码将解决您的问题。

    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 selector

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

    【讨论】:

    • 非常感谢。它是双向的。我是 BeautifulSoup 的新手,我尝试寻找更多示例来使用 find_all 并获取汤的方法。但是什么都找不到。您能否分享一些链接,我将在其中获得有关网络提取和处理、模式匹配等的更多信息?
    • @AjimBagwan,我建议你阅读Python tutorial。在那之后?见What's now?。书?我不知道。
    • @AjimBagwan,对于 BeautifulSoup,请参阅 BeautifulSoup documentaiton
    • 谢谢你,奇怪的名字。对于一切。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2018-11-21
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多