使用python、LXML和;XPATH

使用python、LXML和;XPATH,python,python-2.7,parsing,xpath,lxml,Python,Python 2.7,Parsing,Xpath,Lxml,经过大量的努力,我从这个网站的表格中提取了一些我需要的信息: 从表“Kommande Matcher”(第二个表)中,我设法提取了日期和团队名称 但现在,我完全无法从第一张表中提取: 第一列“滞后” 第二栏“S” 6h栏“GM-IM” 最后一列“p” 有什么想法吗,谢谢我刚刚做到了: from io import BytesIO import urllib2 as net from lxml import etree import lxml.html request = net.

经过大量的努力,我从这个网站的表格中提取了一些我需要的信息:

从表“Kommande Matcher”(第二个表)中,我设法提取了日期和团队名称

但现在,我完全无法从第一张表中提取:

  • 第一列“滞后”

  • 第二栏“S”

  • 6h栏“GM-IM”

  • 最后一列“p”

有什么想法吗,谢谢

我刚刚做到了:

from io import BytesIO
import urllib2 as net
from lxml import etree
import lxml.html    

request = net.Request("http://gbgfotboll.se/serier/?scr=table&ftid=57108")
response = net.urlopen(request)
data = response.read()

collected = [] #list-tuple of [(col1, col2...), (col1, col2...)]
dom = lxml.html.parse(BytesIO(data))
#all table rows    
xpatheval = etree.XPathDocumentEvaluator(dom)
rows = xpatheval('//div[@id="content-primary"]/table[1]/tbody/tr')

for row in rows:
    columns = row.findall("td")
    collected.append((
        columns[0].find("a").text.encode("utf8"), # Lag
        columns[1].text, # S
        columns[5].text, # GM-IM
        columns[7].text, # P - last column
    ))

for i in collected: print i
您可以直接在lxml.html.parse()中传递URL,而不是调用urllib2。此外,您还可以按类属性获取目标表,如下所示:

# new version
from lxml import etree
import lxml.html    

collected = [] #list-tuple of [(col1, col2...), (col1, col2...)]
dom = lxml.html.parse("http://gbgfotboll.se/serier/?scr=table&ftid=57108")
#all table rows
xpatheval = etree.XPathDocumentEvaluator(dom)
rows = xpatheval("""//div[@id="content-primary"]/table[
    contains(concat(" ", @class, " "), " clTblStandings ")]/tbody/tr""")

for row in rows:
    columns = row.findall("td")
    collected.append((
        columns[0].find("a").text.encode("utf8"), # Lag
        columns[1].text, # S
        columns[5].text, # GM-IM
        columns[7].text, # P - last column
    ))

for i in collected: print i

它很有魅力,谢谢你!你的P.S.是什么意思?我不明白?一个简单的问题。我看到您使用了表[1]的行。我认为网站的表会从2个表动态地更改为3个表,这意味着表可能是表2或表1。有没有办法解决这一问题,以便它仍然可以找到正确的表table@hamzah大概如果“表[1]”始终位于DOM上的第一个位置,则没有问题。但是,如果目标表在DOM上的显示顺序不同于1,则可以按类属性获取目标表:table[@class=“clTblStandings”],而不是table[1]。我已经编辑了我的anwser。看一看!嘿你可以看看这篇文章吗。我知道它是同一个网站,也许你可以在这里帮助我@费利普斯马丁斯