2015-09-02 70 views
1

我想解析HTML頁面並獲取具有特定屬性的項目。我正在使用lxml.cssselect進行這項工作。lxml.cssselect CSSSelector不支持屬性

我似乎無法讓它與屬性選擇器一起工作。例如,以下選擇器:p[itemprop="articleBody"]this page上不返回任何內容。使用Firefox或Chrome中的相同選擇器工作。

當我嘗試沒有屬性的選擇器時,它們可以工作。

我使用html翻譯器創建CSSSelector。

這種選擇器是不是被lxml.cssselect所支持?我無法在文檔中找到任何參考。

+0

你介意發佈你的代碼嗎? – gtlambert

回答

1

我沒有lxml.cssselect的專業知識(我有一個快速去,甚至無法設置元素樹,所以一直無法複製你的確切問題)。不過,我已經成功使用了可能對您有用的等效lxml方法。

from lxml import html 
import requests 

url = 'http://abcnews.go.com/US/wireStory/man-jail-writing-racist-graffiti-refugees-homes-33488053' 
page = requests.get(url) 

tree = html.fromstring(page.text) 
p_elements = tree.cssselect('p[itemprop="articleBody"]') 
print(p_elements) 

輸出:

[<Element p at 0xa503ae8>, 
<Element p at 0xa503db8>, 
<Element p at 0xa503bd8>, 
<Element p at 0xa54b1d8>, 
<Element p at 0xa54b0e8>, 
<Element p at 0xa54b138>, 
<Element p at 0xa54b188>] 

通常,使用lxml當我發現,選擇與XPath元素是遠遠比CSS選擇更加靈活。

+0

ARGH!這是我正在處理的其他人的代碼。原來,他們使用lxml.html.clean.clean_html來清理HTML。默認行爲(他們使用的)是放棄所有'不安全'的屬性,包括這個。 – zmbq