前言
上篇文章 PyQuery (一) 回顧。今天來介紹具體 PyQuery 的使用方法。
窮遊網目標與分析
開始之前,按照之前的套路一步步來。
一、先確立目標。
我們要爬取的目標是:
- 日本的城市
- 去過的人數
- 城市的詳情景點
二、看源碼,分析元素節點。
F12 查看當前網頁源代碼:
https://place.qyer.com/japan/citylist-0-0-1/
選中下圖區域,可以看到這是一個 ul 標簽,class 爲 plcCitylist 。
- ul:unordered list,“無序列表”的意思。
在這個無序標簽裏,有許多 li 標簽,class 爲 item+數字。
- li:list item,“列表項”的意思。
城市名字:包含在 a 標簽中。
去過的人數:包含在 h3 標簽中,且在 p 標簽中,class 爲 beenton 中。
詳情景點:包含在 h3 標簽中,且在 p 標簽中,class 爲 pois 中,且在 a 標簽中。
- h3:給文本增加主標題的語義。(顯示在頁面上標題變粗)
- p:段落標簽
以上分析完了,其實單純分析節點很簡單。重點在于代碼如何使用。
PyQuery代碼詳講
依然是分步驟來提取我們想要的。
回憶一下,用 PyQuery 請求到源代碼,拿到實例對象。
from pyquery import PyQuery as pq doc = pq(‘https://place.qyer.com/japan/citylist-0-0-1’)
1. css選擇器,提取外層 ul
ul_city = doc(‘.plcCitylist’)
基于 css 選擇器,獲取 class=”plcCitylist” 的 ul 節點元素。因爲 class 值唯一,上面說過了。
在 JQuery 的語法中, . 代表著類選擇器的寫法,而 # 代表著 id 選擇器的寫法。所以直接用 .值 ,直接可以獲取當前標簽元素節點,如下:
當然,如果當標簽不唯一時,你也可以這樣操作,在.前面聲明具體標簽:
ul_city = doc(‘ul.plcCitylist’)
但需要注意的是,盡管我們 print 打印是你看到的文字,它們實際上並不是 str 類型的字符串,而是 PyQuery 這個類型。
3. 遍曆單獨的 li 元素節點
當我們獲取 ul 下面的 li 元素節點時,匹配到的肯定是多個。此時想要逐個解析 li ,並且獲取到 li 中的城市名稱等抓取信息如何做呢?
for li in lis.items():
通過調用 PyQuery 對象的 items 方法,即可逐層遍曆相同元素,就像我們的 list 一樣。
4. 標簽多個 class 確定唯一值的選擇器寫法
仔細看我們 li 節點中的 h3 標簽,class 裏面是有兩個值的。
<h3 class = “title fontYaHei”>………….
通過這兩個值的唯一性,我們可以直接定位到 h3 元素。
h3 = li(‘.title.fontYaHei’)
5. PyQuery 屬性選擇節點
如果你用不慣以上的所有獲取節點元素的方法, PyQuery 還提供了一個便利的方法,即通過標簽元素的屬性進行定位元素。
a_city = h3(‘a’).attr(‘data-bn-ipg’, ‘place-citylist-mix-name-1’)
h3(‘a’) 獲取的是 h3 標簽裏 a 標簽的元素節點。 使用 .attr 時,後面兩個參數說明 a 標簽原本的屬性由如下組成:
<a data-bn-ipg = “place-citylist-mix-name-1”>………….
attr 第一個參數是標簽屬性的名字,第二個參數則是屬性具體的值。
成果展示
最終的成果展示如下:
選成文本,完成即可,自己就換行顯示了。






