从网站上的一个表中获取信息,其中每个站点的XPATH都不同,Python

2024-04-16 19:00:28 发布

您现在位置:Python中文网/ 问答频道 /正文

以本网站为例:

http://gbgfotboll.se/information/?scr=table&ftid=51168

我使用此代码从第二个表中获取信息:

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]

对于本网站:

http://gbgfotboll.se/serier/?scr=table&ftid=57108

行需要如下所示:

rowss = '//div[@id="content-primary"]/table[1]/tbody/tr'[0]

那么,不管表将位于哪个表索引,如果有一种方法可以获得所需的信息,我要问的是什么呢?你知道吗


Tags: columnstextid网站tablecontentrowsdraw
1条回答
网友
1楼 · 发布于 2024-04-16 19:00:28

一种方法是通过其class属性进行选择(所有3个类都是必需的):

xpatheval('//div[@id="content-primary"]/table[@class="clCommonGrid clTblStandings clTblWithFullToggle"]/tbody/tr'

另一种方法是在该表中选择一个子元素,您知道该子元素只存在于该特定类型的表中。例如,GM-IM头可能非常特定于该类型的表,因此我导航到它,然后沿着树向上走,最终得到与您相同的行:

xpatheval('//div[@id="content-primary"]//tr[th="GM-IM"]/../../tbody/tr')

相关问题 更多 >