2017-04-19 105 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