2017-02-25 119 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)目标元素位于命名空间中。 –