2017-04-19 101 views
1

我有一个问题,刮这个链接http://www.kooora.com/?c=12640&cm=m, 我想获得所有在表#contentTable,但它不会返回所有这些。 当我检查浏览器中的html时,发现第二个标签后面有一个标签,代码在此之后读取标签。Beautifulsoup没有得到所有tr在表

#get teams 
url='http://www.kooora.com/?c=12640&cm=m' 
urlopen=urllib2.urlopen(url) 

bso=BeautifulSoup(urlopen.read(),'html5lib') 

tcontenttable=bso.find('table',attrs={'id':'contentTable'}).find('tbody') 
print len(tcontenttable.find_all('tr')) # only 5 

它返回只有5个,但是它要超过5

回答

0

的原因可能是该网页是不是(按https://validator.w3.org/nu/?doc=http%3A%2F%2Fwww.kooora.com%2F%3Fc%3D12640%26cm%3Dm)有效的HTML。

特别是验证说:

Error: End tag td seen, but there were open elements.

From line 147, column 5321; to line 147, column 5325

你可以使用正则表达式来提取已知模式,而不是BeautifulSoup在这种情况下会更好。

+0

我同意你的看法,但使用正则表达式非常耗时,因为我有很多数据来提取它。我试图改变解析器,使用“lxml”,但没有解决问题。 – nabaz

+0

另一个解析器没有帮助也就不足为奇了;他们都会遇到格式不正确的问题。 这就是我提出正则表达式的原因,因为您可以编写更轻松的解析规则来允许某些类型的错误。我不明白为什么你需要提取的数据量会阻止你使用正则表达式。你为什么认为他们是“耗时”? – Dietmar

+0

我刚刚发现问题所在,我想提取的一些数据是由JavaScript动态生成的,也就是为什么美丽的汤没有读取所有的tr。我想我需要寻找模块来解析动态创建的标签,我试过正则表达式,但我得到了相同的结果。 – nabaz