我在Python中使用lxml
抓取网页。然而,为了获得表行的数量,我首先得到它们,然后使用len()
函数。我觉得这很浪费,还有其他方法可以获得他们的数量(动态的)进一步刮擦吗?
import lxml.html
doc = ''
try:
doc = lxml.html.parse('url')
except SkipException: pass
if doc:
buf = ''
#get the total number of rows in table
tr = doc.xpath("/html/body/div[1]/div[1]/table[1]/tbody/tr")
table = []
# iterate over the table rows limited to max number
for i in range(3, len(tr)):
# get the rows content
table += doc.xpath("body/div[1]/div[1]/table[1]/tbody/tr[%s]/td" % i)
答案 0 :(得分:0)
from itertools import islice
trs = doc.xpath("/html/body/div[1]/div[1]/table[1]/tbody/tr")
for tr in islice(trs, 3):
for td in tr.xpath('td'):
...whatever...
答案 1 :(得分:0)
您是否尝试使用迭代器方法,如本节所述:http://lxml.de/api.html#iteration?我很确定有这样的方式。找到一些东西的长度然后用(x)范围迭代它永远不是一个优雅的解决方案,我很确定lxml背后的人为你提供了合适的工具。
答案 2 :(得分:0)
您可以使用匹配的tr
元素作为起点,您可以像使用python列表一样迭代它们:
tr = doc.xpath("/html/body/div[1]/div[1]/table[1]/tbody/tr")
for row in tr[3:]:
table += row.findall('td')
上述内容使用.findall()
来抓取所有包含的td
元素,但如果您需要更多控制权,可以使用其他.xpath()
次调用。