我一直无法找到一种简单的方法,我一直关注this 我写了以下内容,
##just comments before this
import lxml,requests
23 page = requests.get('https://finalexams.rutgers.edu.html')
24
25 tree = html.fromstring(page.text)
26
27 tableRow = tree.xpath('//tr/text() ' )
28
29 print 'Rows' , tableRow
该脚本需要解析像这样的表行并取出它们内部的东西,但可能存在无限量的表行。我不知道如何访问嵌套标签,它们没有唯一的名称或ID供我查找。
如何编写一个for循环来获取每个表行并让我抓住它们的各个部分?
<tr>
<td> 04264</td>
<td>01:198:205</td>
<td>01</td>
<td>INTR DISCRET STRCT I</td>
<td>C</td>
<td>Dec 17, 2014: 8:00 AM - 11:00 AM </td>
</tr>
<tr>
<td> 09907</td>
<td>01:198:214</td>
<td>01</td>
<td>SYSTEMS PROGRAMMING</td>
<td>C</td>
<td>Dec 18, 2014: 8:00 PM - 11:00 PM </td>
</tr>
答案 0 :(得分:3)
如果您想要找到tr
元素本身而不是其(空)文本,只需搜索tr
元素,而不是文本:
rows = tree.xpath('//tr')
然后你可以迭代它们:
for row in rows:
然后你可以搜索每一个td
元素(例如,使用row.xpath
或row.findall
等),或者假设他们所有的孩子都是{{1元素(因为它们碰巧在这种情况下):
td
然后你可以做任何你想对每一栏做的事情,比如提取它的文字:
for column in row:
答案 1 :(得分:0)
迭代所有tr
代码,并为每一行的td
代码制作内循环,例如:
from lxml.html import fromstring
data = """
your html here
"""
root = fromstring(data)
for index, row in enumerate(root.xpath('//table/tr')):
print "Row #%s" % index
for cell in row.findall('td'):
print cell.text.strip()
print "----"
打印:
Row #0
04264
01:198:205
01
INTR DISCRET STRCT I
C
Dec 17, 2014: 8:00 AM - 11:00 AM
----
Row #1
09907
01:198:214
01
SYSTEMS PROGRAMMING
C
Dec 18, 2014: 8:00 PM - 11:00 PM
----