Python 在pyquery中迭代对象

Python 在pyquery中迭代对象,python,pyquery,Python,Pyquery,我正在用Python的pyquery抓取一个页面,它返回的类型让我有些困惑,尤其是如何迭代结果列表 如果我的HTML看起来有点像这样: <div class="formwrap">blah blah <h3>Something interesting</h3></div> <div class="formwrap">more rubbish <h3>Something else interesting</h3>&

我正在用Python的pyquery抓取一个页面,它返回的类型让我有些困惑,尤其是如何迭代结果列表

如果我的HTML看起来有点像这样:

<div class="formwrap">blah blah <h3>Something interesting</h3></div>
<div class="formwrap">more rubbish <h3>Something else interesting</h3></div>
from pyquery import PyQuery as pq

def get_h3_contents(index, node):
    d = pq(node)
    d.find('h3').text()

formwraps.each(get_h3_contents)
for i in range(len(formwraps)):
    print(formwraps.eq(i))
    ...
这将产生:

<class 'pyquery.pyquery.PyQuery'>
<type 'list'>
<class 'pyquery.pyquery.PyQuery'>
Something interesting something else interesting

我从未使用过pyquery,但是语法错误的根源是Python中的lambda有点有限,您只能在其中使用一个表达式(因此没有像print这样的语句)。你可以 使用函数绕过此限制,例如:

def my_print(x):
    print x

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

我想你可以这样做:

<div class="formwrap">blah blah <h3>Something interesting</h3></div>
<div class="formwrap">more rubbish <h3>Something else interesting</h3></div>
from pyquery import PyQuery as pq

def get_h3_contents(index, node):
    d = pq(node)
    d.find('h3').text()

formwraps.each(get_h3_contents)
for i in range(len(formwraps)):
    print(formwraps.eq(i))
    ...

如果不是原始海报,希望这对其他人有所帮助。

我认为您可以像这样迭代pyquery:

<div class="formwrap">blah blah <h3>Something interesting</h3></div>
<div class="formwrap">more rubbish <h3>Something else interesting</h3></div>
from pyquery import PyQuery as pq

def get_h3_contents(index, node):
    d = pq(node)
    d.find('h3').text()

formwraps.each(get_h3_contents)
for i in range(len(formwraps)):
    print(formwraps.eq(i))
    ...
您也可以不使用以下方法执行此操作:

由于(),您可以使用
PyQuery
对象的
items()
作为
PyQuery
对象遍历每个项目:

print(type(formwraps.items()))
for my_div in formwraps.items():
    print(my_div("h3").text())

方法
items()
返回一个
generator
,这将在Python 2和Python 3上工作。

最近的pyquery验证允许您使用.items()