2017-02-25 85 views
0

我在網上抓取與lxml庫的python。並且,我試圖從棒球網站http://mlb.mlb.com/mlb/standings/exhibition.jsp?ymd=20161002刮掉一些數據。 出於某種原因,我的代碼在之前打印的內容後打印出一個空列表。任何關於這個問題的幫助都會很棒!Web Scraping​​標籤問題 - Python 3與Lxml

from lxml import html 
import requests 

page = requests.get('http://mlb.mlb.com/mlb/standings/exhibition.jsp?ymd=20161002') 
tree = html.fromstring(page.content) 
#This will create a list of buyers: 
##buyers = tree.xpath('//div[@title="buyer-name"]/text()') 
#This will create a list of prices 
prices = tree.xpath('//td[@class="tg_w"]/text()') 

print("Wins: ", prices) 
print() 
##print("Buyers: ", buyers) 
+1

我的猜測是你正在抓取的頁面不包含表格元素(td),它們是通過javascript/ajax加載的,因此你可能會查找mlb.mlb.com的API。 – suhain

回答

0

HTML!= XML。一些html5標籤可能會混淆XML解析器。

嘗試BeautifulSoup並將解析器設置爲html5lib

+0

不是,'lxml .html'實際上是一個HTML解析器:http://lxml.de/lxmlhtml.html。另外,使用XML解析器解析格式錯誤的XML將返回錯誤而不是空的結果。 –

+0

@MathiasMüller確實如此。解析器成功地解析了html5,但是一些自封閉標籤(如'
'或'')會使結構搞砸。如果您將bs4解析器設置爲「lxml」,然後打印出結果,您將看到完全相同的結果。 –

+0

不,自閉標籤不會使結構搞砸,即使在XML中,自封閉(或未封閉)元素標籤在這裏也不是問題。問題中所描述問題的可能解釋是a)該元素由Javascript生成或b)目標元素位於命名空間中。 –