Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从网站上的表中获取信息,其中每个站点的XPATH都不同,Python_Python_Python 2.7_Dom_Xpath_Lxml - Fatal编程技术网

从网站上的表中获取信息,其中每个站点的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')