pyquery不能根據標籤(strong, span)獲取元素
阿新 • • 發佈:2018-12-11
最近在做淘寶美食資訊爬取練習的時候,發現用pyquery根據標籤不能獲取元素。後來發現主要是因為標籤裡面包含了
xmlns="http://www.w3.org/1999/xhtml"屬性,去掉這個屬性,或者用標籤的其他屬性就可以獲取到元素資訊.
在這裡舉一個?:
html = """ <div xmlns="http://www.w3.org/1999/xhtml" class="price g_price g_price-highlight"> <span> ¥ </span> <strong> 58.90 </strong> </div> """ from pyquery import PyQuery as pq doc = pq(html) div = doc('div').text() print('div:',div) div_class = doc('.price').text() print('div_class:', div_class)
輸出結果如下,第一個結果是用div標籤,第二是用div標籤裡面的class屬性:
div:
div_class: ¥
58.90
當我們把xmlns屬性去掉以後,兩者輸出的結果是一樣的:
div: ¥ 58.90
div_class: ¥ 58.90
同時xmlns還會影響子孫節點,我們可以看到下面的語句輸出的結果為空:
print('strong:',doc('.price strong').text())
當我們去掉div的xmlns屬性時,再次列印上面的結果,就會看見下面的結果 .
strong:58.90
有時候在網頁的原始碼裡面可能看不見這個屬性,直接print標籤也是看不到的;當該標籤沒有其他屬性可以使用時,可以用該標籤的父標籤然後列印.html(),可以看到該標籤的這個隱藏屬性。
所以當標籤存在xmlns屬性時,是不能用標籤來獲取元素包括他的子孫節點,但是可以用標籤的其他屬性獲取。
最後,我們在獲取元素時,能儘量用標籤的屬性獲取就儘量不用標籤。