首先,我是python和Stack Overflow的新手,所以请客气。
这是我要从中提取数据的html页面的源代码。
网页:http://gbgfotboll.se/information/?scr = table&ftid = 51168该表位于页面底部
<html>
table class="clCommonGrid" cellspacing="0">
<thead>
<tr>
<td colspan="3">Kommande matcher</td>
</tr>
<tr>
<th style="width:1%;">Tid</th>
<th style="width:69%;">Match</th>
<th style="width:30%;">Arena</th>
</tr>
</thead>
<tbody class="clGrid">
<tr class="clTrOdd">
<td nowrap="nowrap" class="no-line-through">
<span class="matchTid"><span>2014-09-26<!-- br ok --> 19:30</span></span>
</td>
<td><a href="?scr=result&fmid=2669197">Guldhedens IK - IF Warta</a></td>
<td><a href="?scr=venue&faid=847">Guldheden Södra 1 Konstgräs</a> </td>
</tr>
<tr class="clTrEven">
<td nowrap="nowrap" class="no-line-through">
<span class="matchTid"><span>2014-09-26<!-- br ok --> 13:00</span></span>
</td>
<td><a href="?scr=result&fmid=2669176">Romelanda UF - IK Virgo</a></td>
<td><a href="?scr=venue&faid=941">Romevi 1 Gräs</a> </td>
</tr>
<tr class="clTrOdd">
<td nowrap="nowrap" class="no-line-through">
<span class="matchTid"><span>2014-09-27<!-- br ok --> 13:00</span></span>
</td>
<td><a href="?scr=result&fmid=2669167">Kode IF - IK Kongahälla</a></td>
<td><a href="?scr=venue&faid=912">Kode IP 1 Gräs</a> </td>
</tr>
<tr class="clTrEven">
<td nowrap="nowrap" class="no-line-through">
<span class="matchTid"><span>2014-09-27<!-- br ok --> 14:00</span></span>
</td>
<td><a href="?scr=result&fmid=2669147">Floda BoIF - Partille IF FK </a></td>
<td><a href="?scr=venue&faid=218">Flodala IP 1</a> </td>
</tr>
</tbody>
</table>
</html>
我需要提取时间:19:30和团队名称:Guldhedens IK-IF Warta表示第一行中的第一个和第二个表格单元格(不是第三个),以及13:00 / Romelanda UF-IK Virgo。第二个表格行等。从所有表格行开始。
如您所见,每个表行在时间之前都有一个日期,因此棘手的部分就来了。我只想从日期等于我运行此代码的日期的那些表行中获取上面提到的时间和团队名称。
到目前为止,我唯一要做的事情并不多,我只能使用以下代码获取时间和团队名称:
import lxml.html
html = lxml.html.parse("http://gbgfotboll.se/information/?scr=table&ftid=51168")
test=html.xpath("//*[@id='content-primary']/table[3]/tbody/tr[1]/td[1]/span/span//text()")
print test
这给了我结果['2014-09-26','19:30']之后,我迷失了如何遍历不同的表行,希望特定的表单元格中的日期与我运行代码的日期相匹配。
我希望您能回答得尽可能多。
因此,感谢@CodeNinja的帮助,我对其进行了一些微调,以获取我想要的东西。我导入时间以获取运行代码的日期。无论如何,这里是我想要的代码。感谢您的帮助!!
import lxml.html
import time
url = "http://gbgfotboll.se/information/?scr=table&ftid=51168"
html = lxml.html.parse(url)
currentDate = (time.strftime("%Y-%m-%d"))
for i in range(12):
xpath1 = ".//*[@id='content-primary']/table[3]/tbody/tr[%d]/td[1]/span/span//text()" %(i+1)
xpath2 = ".//*[@id='content-primary']/table[3]/tbody/tr[%d]/td[2]/a/text()" %(i+1)
time = html.xpath(xpath1)[1]
date = html.xpath(xpath1)[0]
teamName = html.xpath(xpath2)[0]
if date == currentDate:
print time, teamName
因此,这是正确方法的最终版本。这将解析其所有表行,而无需在for循环中使用“ range”。我从其他文章中得到了这个答案:使用python lxml xpath遍历表中的所有行
import lxml.html
from lxml.etree import XPath
url = "http://gbgfotboll.se/information/?scr=table&ftid=51168"
date = '2014-09-27'
rows_xpath = XPath("//*[@id='content-primary']/table[3]/tbody/tr[td[1]/span/span//text()='%s']" % (date))
time_xpath = XPath("td[1]/span/span//text()[2]")
team_xpath = XPath("td[2]/a/text()")
html = lxml.html.parse(url)
for row in rows_xpath(html):
time = time_xpath(row)[0].strip()
team = team_xpath(row)[0]
print time, team
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句