0

lxml我用Python抓取网页。然而,要获取表格行数,我首先将它们全部获取,然后使用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)
4

3 回答 3

0

您是否尝试使用迭代器方法,如本节所述:http: //lxml.de/api.html#iteration?我很确定有这样的方法。找到某个东西的长度,然后用 (x)range 对其进行迭代从来都不是一个优雅的解决方案,我很确定 lxml 背后的人为您提供了正确的工具。

于 2012-09-22T14:45:15.873 回答
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()如果您需要更多控制,可以使用进一步的调用。

于 2012-09-22T15:00:50.923 回答
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...
于 2012-09-22T14:37:09.437 回答