1. 程式人生 > >pyquery不能根據標籤(strong, span)獲取元素

pyquery不能根據標籤(strong, span)獲取元素

最近在做淘寶美食資訊爬取練習的時候,發現用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屬性時,是不能用標籤來獲取元素包括他的子孫節點,但是可以用標籤的其他屬性獲取。

最後,我們在獲取元素時,能儘量用標籤的屬性獲取就儘量不用標籤。