我正在用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看起来没有真正的迭代在进行。如何逐个拉出每个元素?
一个新手提出的额外问题:[a]周围的方括号是做什么的?它看起来像是将一个特殊的Pyquery对象转换为一个列表。[]是标准的Python运算符吗?
-更新
我找到了一个“each”function in the pyquery docs。然而,我不知道如何使用它来做我想要的事情。假设我只想打印出<h3>的内容。这会产生一个语法错误:为什么?
formwraps.each(lambda e: print e("h3").text())发布于 2010-07-13 19:02:43
我从来没有使用过pyquery,但是语法错误的来源是Python中的lambdas是有限的,你只能在其中使用一个表达式(所以没有像print这样的语句)。您可以使用函数绕过此限制,例如:
def my_print(x):
print x
formwraps.each(lambda e: my_print(e("h3").text()))发布于 2013-07-03 10:03:53
由于pyquery 1.2.3 (commit),您可以使用PyQuery对象的items()作为PyQuery对象遍历每个项目:
print(type(formwraps.items()))
for my_div in formwraps.items():
print(my_div("h3").text())方法items()返回一个generator,这在Python2和Python3上都有效。
发布于 2011-08-20 00:55:03
我认为你可以这样做:
from pyquery import PyQuery as pq
def get_h3_contents(index, node):
d = pq(node)
d.find('h3').text()
formwraps.each(get_h3_contents)希望这能帮助到一些人,如果不是原始海报的话。
https://stackoverflow.com/questions/3236208
复制相似问题