2012-12-28 167 views
14

我正在使用PyQuery並希望打印鏈接列表,但無法弄清楚如何從PyQuery語法中的每個鏈接獲取href屬性。在PyQuery中獲取屬性?

這是我的代碼:

e = pq(url=results_url) 
    links = e('li.moredetails a') 
    print len(links) 
    for link in links: 
    print link.attr('href') 

這將打印10,然後提供了以下錯誤:

AttributeError: 'HtmlElement' object has no attribute 'attr' 

我在做什麼錯?

回答

23

PyQuery包裝lxml,讓您使用ElementTree API訪問屬性:

e = pq(url=results_url) 
for link in e('li.moredetails a'): 
    print link.attrib['href'] 

另外,使用PyQuery API上的任何發現元素,將元素包裝在pq()調用中,回顯您需要使用jQuery $()jQuery()來打包DOM元素的方式:

print pq(link).attr('href') 

print pq(link).attr['href'] 

一個更Python的方式來accessess屬性。

你也可以遍歷所有的.items()方法來代替,它返回PyQuery元素代替:

e = pq(url=results_url) 
for link in e('li.moredetails a').items(): 
    print link.attr['href'] 
+0

非常感謝你。 – Richard

+2

pq(link).attr.href也可以工作 – gawel

+0

是否記錄了'pq(...)。attr()'方法?我在API文檔中沒有看到它:https://pythonhosted.org/pyquery/api.html –

2

如jQuery的,包裹鏈接起來:

e = pq(url=results_url) 
links = e('li.moredetails a') 
print len(links) 
for link in links: 
    print pq(link).attr('href')