lxml web解析内容的长度

时间:2012-09-22 14:20:52

标签: python lxml scrape

我在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)

3 个答案:

答案 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()次调用。