我用python的pyquery来抓取一个页面,我对它返回的类型有点困惑,特别是如何遍历结果列表。
如果我的HTML看起来有点像这样:

<div class="formwrap">blah blah <h3>Something interesting</h3></div>
<div class="formwrap">more rubbish <h3>Something else interesting</h3></div>

如何逐个获取<h3>标记的内部以便处理它们?我正在尝试:
results_page = pq(response.read())
formwraps = results_page(".formwrap")
print type(formwraps)
print type([formwraps])
for my_div in [formwraps]:
    print type(my_div)
    print my_div("h3").text()

这将产生:
<class 'pyquery.pyquery.PyQuery'>
<type 'list'>
<class 'pyquery.pyquery.PyQuery'>
Something interesting something else interesting

看起来没有真正的迭代在进行。如何单独拉出每个元素?
来自新手的额外问题:方括号在做什么?它似乎将一个特殊的PyQuery对象转换为一个列表。[a]是标准的python操作符吗?
------更新-----
我找到了一个‘每个’function in the pyquery docs。但是,我不明白如何使用它来满足我的需要。假设我只想打印出[]的内容。这会产生语法错误:为什么?
formwraps.each(lambda e: print e("h3").text())

最佳答案

我从来没有使用过pyquery,但是语法错误的根源是python中的lambda有点有限,您只能在内部使用一个expresion(所以没有像print这样的语句)。你可以
使用函数规避此限制,例如:

def my_print(x):
    print x

formwraps.each(lambda e: my_print(e("h3").text()))

10-06 14:25