无法使用BeautifulSoup4(Python3.x)按类查找元素,只能按id查找。

3

我是BeautifulSoup4的新手,遇到了一个看起来很基础的问题。我只能通过id查找,而不能通过class查找。例如,我正在查看一个网站,其中包含以下html部分:

enter image description here

现在,以下内容可以正常工作:
page_soup.findAll('div', {'id': 'page-content'})

而以下内容找不到:
page_soup.findAll('div', {'class': 'main-container'})

所以我的问题是:'class'和'id'属性有不同的处理方式吗?如果是这样,那么按类名搜索的正确方法是什么?
只是为了完整起见,虽然我认为这并不重要,但我使用selenium包的page_source方法获得了html。
编辑:这里是这样一个页面的示例。如果我们检查上面的表格,包括球员的位置、年龄等等,那么我们就会得到上面的html快照。

2
你在发布这个问题时第二行应该是打错了吧?{'class: 'main-container'} - Dominic K
@DMan,是的,谢谢,已经修复了。 - splinter
这两行代码应该至少返回一个标签。你能包含更多的代码和HTML数据吗? - t.m.adam
1
你所做的看起来是正确的。我猜你不能给我们页面的URL? - Bill Bell
1
你的页面是否有iframe元素?也许你找不到一个元素是因为它位于iframe内部。 - Breaks Software
显示剩余4条评论
1个回答

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)]'

如您所见,它在两个解析器中都可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接