【问题标题】:Python BeautifulSoupe4: How to get link from anchor tag without duplicatePython BeautifulSoup4:如何从锚标记获取链接而不重复
【发布时间】:2016-01-10 06:51:50
【问题描述】:
<a href=”link” class=”link_to_img”>
<img src=”dosen’t matter”></img>
</a>
<span>
<a href=”link” class=”link_to_img”>Title Of Image</a>
</span>

正如您所见,当我尝试获取链接时,有两个 &lt;a href=”link” class=”link_to_img”&gt;&lt;/a&gt; 示例:href.findAll('a', 'class': 'link_to_img') 它获取了链接,但它复制了它,我只需要它一次。有没有办法可以在&lt;span&gt;&lt;/span&gt; 中定位&lt;a&gt;&lt;/a&gt;

【问题讨论】:

    标签: python css html beautifulsoup


    【解决方案1】:

    您可以在 findAll() 中使用limit argument

    find_all("a", limit=1)
    

    【讨论】:

    • 谢谢。我需要导入任何东西才能使用限制吗?
    • 还有一个问题我不需要的带有不同链接的标签更多出于简单原因我没有添加它们。我希望得到一个响应,显示如何将特定的标签定位到它的父标签
    • limit 是 findAll() 函数的原生过滤器,因此您无需导入任何内容。我不确定你的第二个问题是什么,但如果你也需要过滤类,你也可以使用 class_="link_to_img" 过滤器(假设 Beautiful Soup 4.1.2 或更高版本)
    • 为什么不使用find("a") 而不是find_all()limit
    【解决方案2】:

    您可以选择带有span &gt; a CSS selector 的链接,这将直接匹配span 标签内的a 标签:

    soup.select("span > a")
    

    你可以额外查看类:

    soup.select("span > a.link_to_img")
    

    如果您使用的是最新的 beautifulsoup4 包,则可以使用 select_one() 让它返回单个 Tag 实例而不是列表:

    soup.select_one("span > a.link_to_img")
    

    【讨论】:

    • 太棒了,我很感激
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2021-12-10
    • 2012-07-16
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    相关资源
    最近更新 更多