【问题标题】:Python & BeautifulSoup : How to extract a tags' value which is in many others tags?Python & BeautifulSoup:如何提取许多其他标签中的标签值?
【发布时间】:2017-10-24 17:28:45
【问题描述】:
<a href="link" target="_blank" class="xXx text-user topic-author" sl-processed="1">
    diamonds
</a>

我想用 BeautifulSoup 提取“a”标签中的伪“钻石”。

我尝试了很多东西,但总是返回“无”。

对我来说应该起作用的是这个

 txt = soup.find('a', {'class': 'xXx text-user topic-author'})
 print (txt)

【问题讨论】:

  • 请分享您的尝试。
  • @eLRuLL 对不起,我已经编辑了!
  • 你对钻石这个词很感兴趣?
  • @jlaur 是的,我是。
  • 将html加载到一个名为soup的对象中。 a = 汤。钻石 = a.text.strip()

标签: python css beautifulsoup


【解决方案1】:

整个页面中作者的 css 类看起来并不相同,因此您需要进行一些过滤。

作者元素有多个 css 类,但它们有一些相似之处。

下面的代码将打印出作者。它首先抓住了作者所在的元素。问题是这个 css 类 (JvCare) 用于许多事情。页面的元素计数返回 98,但只有 25 个作者姓名,因此之后需要进行一些过滤。

import requests
from bs4 import BeautifulSoup

url = "http://www.jeuxvideo.com/forums/0-7059-0-1-0-1-0-another-war.htm"
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
JvCs = soup.find_all('span', attrs={'class': 'JvCare'})
for j in JvCs:
    if 'topic-author' in j['class']:
        print(j.text.strip())

j['class'] 为 JvCs 列表中的 98 个元素中的每一个返回不同 css 类的列表。作者姓名所在的那些,有一个名为'topic-author'的css-class。

所以我们只检查 'topic-author' 是否在 j['class'] 为 98 个元素中的每一个返回的列表中。如果是,请打印作者姓名。

希望这可以帮助您走得更远。

编辑: 对于涉及两个或多个 css 选择器的情况,似乎有一种更聪明的方法(在非常棒的 docs for BeautifulSoup 中提到)。在这些情况下,文档建议使用 .select 方法。在你的情况下是这样的:

author_list = soup.select('span.JvCare.topic-author')
for author in author_list:
    print(author.text.strip())

【讨论】:

  • 谢谢,它工作得很好。我已将作者放入列表中。我敢肯定,如果我们可以这样称呼它,您的帖子将对我的其他 css“选择器”有所帮助。非常感谢。
猜你喜欢
  • 2018-04-23
  • 1970-01-01
  • 2018-06-14
  • 2018-12-12
  • 2020-01-07
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多