2017-08-31 57 views
3

我是BeautifulSoup4的新手,并且遇到了一个似乎很基本的问题。我只能通过身份证找到,但不能按班上课。例如,我在看它有HTML在它下面的部分站点:只能通过id找到,而不能通过班级找到BeautidulSoup4(Python3.x)

enter image description here

现在,以下工作:

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

而下面发现什么:

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

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

只是为了完成,虽然我认为没关系,但我通过使用selenium包的page_source方法获得了html。

编辑Here是这种页面的一个例子。如果我们检查上表,包括玩家的位置,年龄等,我们会得到上面的html快照。

+2

我假设您在发布此问题时在第二行中发生了错字? '{'class:'main-container'}' – DMan

+0

@Dan,是的,谢谢你,修正它 – splinter

+0

这两行应该返回至少一个标记。你能包含更多的代码和html数据吗? –

回答

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

的伟大工程,正如你可以看到我的作品在这两个解析器。