【问题标题】:Can only find by id, not by class, with BeautidulSoup4 (Python3.x)BeautidulSoup4 (Python3.x) 只能按 id 查找,不能按类查找
【发布时间】:2018-02-09 23:58:21
【问题描述】:

我是BeautifulSoup4 的新手,遇到了一个看起来很简单的问题。我只能通过 id 找到,但不能按类找到。例如,我正在查看一个包含以下 html 部分的网站:

现在,以下工作:

page_soup.findAll('div', {'id': 'page-content'})

而以下内容一无所获:

page_soup.findAll('div', {'class': 'main-container'})

所以我的问题是:'class' 的处理方式与 'id' 属性不同吗?如果是这样,按类名搜索的正确方法是什么?

只是为了补全,虽然我觉得没关系,我还是通过selenium包的page_source方法获取了html。

编辑Here 是此类页面的一个示例。如果我们检查上面的表格,包括玩家的位置、年龄等,那么我们就得到了上面的 html 快照。

【问题讨论】:

  • 我假设您在发布此问题时在第二行输入了错字? {'class: 'main-container'}
  • @DMan,是的,谢谢,已修复
  • 这两行都应该返回至少一个标签。能否包含更多代码和 html 数据?
  • 你所做的看起来是对的。我假设你不能给我们页面的网址?
  • 你的页面有 iframe 元素吗?也许你没有得到一个元素,因为它位于 iframe 内。

标签: python-3.x selenium beautifulsoup web-crawler html-parsing


【解决方案1】:

以下是我运行的命令,它对我很有用

In [1]: from bs4 import BeautifulSoup

In [2]: import requests

In [3]: res = requests.get("http://www.spotrac.com/mlb/atlanta-braves/freddie-freeman-7359/")

In [4]: soup = BeautifulSoup(res.text,"lxml")

In [5]: len(soup.findAll('div', {'class': 'main-container'}))
Out[5]: 1

In [6]:  soup = BeautifulSoup(res.text,"html5lib")

In [7]: len(soup.findAll('div', {'class': 'main-container'}))
Out[7]: 1

In [8]: import sys; sys.version
Out[8]: '3.6.2 (default, Jul 17 2017, 16:44:45) \n[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)]'

如您所见,它在两个解析器中都适用于我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多