从网站上的表中获取信息,其中每个站点的XPATH都不同,Python
以本网站为例: 我使用此代码从第二个表中获取信息:从网站上的表中获取信息,其中每个站点的XPATH都不同,Python,python,python-2.7,dom,xpath,lxml,Python,Python 2.7,Dom,Xpath,Lxml,以本网站为例: 我使用此代码从第二个表中获取信息: for url in urlList: request = net.Request(url) response = net.urlopen(request) data = response.read() dom = lxml.html.parse(BytesIO(data)) #all table rows xpatheval = etree.XPathDocumentEvaluator
for url in urlList:
request = net.Request(url)
response = net.urlopen(request)
data = response.read()
dom = lxml.html.parse(BytesIO(data))
#all table rows
xpatheval = etree.XPathDocumentEvaluator(dom)
rows = xpatheval('//div[@id="content-primary"]/table[2]/tbody/tr')
divName = xpatheval('//*[@id="content-primary"]/h1//text()')[0]
trash, divisionName = divName.rsplit("- ")
dict[divisionName] = {}
for id,row in enumerate(rows):
columns = row.findall("td")
teamName = columns[0].find("a").text, # Lag
print teamName
teamName
playedGames = columns[1].text, # S
wins = columns[2].text,
draw = columns[3].text,
lost = columns[4].text,
dif = columns[6].text, # GM-IM
points = columns[7].text, # P - last column
dict[divisionName].update({id :{"teamName":columns[0].find("a").text, "playedGames":playedGames, "wins":wins, "draw":draw, "lost":lost, "dif":dif, "points":points }})
对于该网站,行有表[2]
有关本网站:
这些行需要如下所示:
rowss = '//div[@id="content-primary"]/table[1]/tbody/tr'[0]
因此,我想问的是,是否有一种方法可以获取我所需的信息,而不管该表将位于哪个表索引?一种方法是通过其
类
属性进行选择(所有3个类都是必需的):
另一种方法是在该表中选择一个子元素,您知道该子元素只存在于该特定类型的表中。例如,GM-IM
标题可能非常特定于该类型的表,因此我导航到它,然后沿着树向上移动,最终得到与您相同的行:
xpatheval('//div[@id="content-primary"]//tr[th="GM-IM"]/../../tbody/tr')
哇,你是个天才,尝试了第二种选择,因为我不确定类名是否总是相同的。假设它们是相同的,它们之间有速度差异吗?@AppDev I没有对这些方法进行任何评测。但是,我怀疑这将是应用程序中的瓶颈,因为您的带宽仍然有限。我建议不要过早地优化。但是,如果确定是瓶颈,请考虑运行一些<代码> TimeTime/Cuff>实验。
xpatheval('//div[@id="content-primary"]//tr[th="GM-IM"]/../../tbody/tr')