python - 在Python中使用BeautifulSoup处理网页时,如何通过**class**或**div id**值过滤href链接?

标签 python python-2.7 beautifulsoup

我有一个具有不同 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 值过滤链接?

最佳答案

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)

关于python - 在Python中使用BeautifulSoup处理网页时,如何通过**class**或**div id**值过滤href链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22127346/

相关文章:

python - 在 python 中的列表中定位列表元素的最快方法是什么?

python - 在原始 HTML 文件上写回 Beautifulsoup 时出错

Python-将键值对添加到数组中的字典中

python - 查找与不同年份匹配的所有月份、日期和时间,并取它们的平均值

python - ipython 不工作

python - 使用 Beautiful Soup 从 XML 返回嵌套属性

python - 保留 BeautifulSoup 选择顺序

python - 如何对 patsy 矩阵进行 sm.Logit 回归?

python - 使用多个分隔符和条件拆分字符串

sql - 在 python 中防止 SQL 注入(inject)