使用 python、LXML 和 XPATH 从网站上的 table 中提取信息
Extracting information from a table on a website using python, LXML & XPATH
经过大量的努力,我从这个网站的 table 中提取了一些我需要的信息:
http://gbgfotboll.se/serier/?scr=table&ftid=57108
从 table "Kommande Matcher"(第二个 table)我设法提取了日期和团队名称。
但现在我完全无法从第一个 table:
中提取出来
第一栏"Lag"
第二栏"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。此外,您可以通过 class 属性获取目标 table,如下所示:
# 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
经过大量的努力,我从这个网站的 table 中提取了一些我需要的信息:
http://gbgfotboll.se/serier/?scr=table&ftid=57108
从 table "Kommande Matcher"(第二个 table)我设法提取了日期和团队名称。
但现在我完全无法从第一个 table:
中提取出来第一栏"Lag"
第二栏"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。此外,您可以通过 class 属性获取目标 table,如下所示:
# 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