pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...
爬蟲神器之PyQuery實用教程(二),50行代碼爬取窮游網(wǎng)
前言
上篇文章 PyQuery (一) 回顧。今天來介紹具體 PyQuery 的使用方法。
窮游網(wǎng)目標與分析
開始之前,按照之前的套路一步步來。
一、先確立目標。
我們要爬取的目標是:
二、看源碼,分析元素節(jié)點。
F12 查看當前網(wǎng)頁源代碼:
https://place.qyer.com/japan/citylist-0-0-1/選中下圖區(qū)域,可以看到這是一個 ul 標簽,class 為 plcCitylist 。
- ul:unordered list,“無序列表”的意思。
class 為 plcCitylist ,全局檢索一下,ul 標簽的 class 值唯一:
在這個無序標簽里,有許多 li 標簽,class 為 item+數(shù)字。
- li:list item,“列表項”的意思。
繼續(xù)分析。
有了上面兩個基礎(chǔ)結(jié)構(gòu),來看下其中要提取的詳細信息,下圖:
城市名字:包含在 a 標簽中。
去過的人數(shù):包含在 h3 標簽中,且在 p 標簽中,class 為 beenton 中。
詳情景點:包含在 h3 標簽中,且在 p 標簽中,class 為 pois 中,且在 a 標簽中。
- h3:給文本增加主標題的語義。(顯示在頁面上標題變粗)
- p:段落標簽
以上分析完了,其實單純分析節(jié)點很簡單。重點在于代碼如何使用。
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 節(jié)點元素。因為 class 值唯一,上面說過了。
在 JQuery 的語法中, . 代表著類選擇器的寫法,而 # 代表著 id 選擇器的寫法。所以直接用 .值 ,直接可以獲取當前標簽元素節(jié)點,如下:
當然,如果當標簽不唯一時,你也可以這樣操作,在.前面聲明具體標簽:
ul_city = doc('ul.plcCitylist')2. 提取 ul 里層 li 節(jié)點元素
lis = ul_city('li')根據(jù) ul_city 得到的節(jié)點變量,用括號加子標簽的形式即可獲取。
但需要注意的是,盡管我們 print 打印是你看到的文字,它們實際上并不是 str 類型的字符串,而是 PyQuery 這個類型。
3. 遍歷單獨的 li 元素節(jié)點
當我們獲取 ul 下面的 li 元素節(jié)點時,匹配到的肯定是多個。此時想要逐個解析 li ,并且獲取到 li 中的城市名稱等抓取信息如何做呢?
for li in lis.items():通過調(diào)用 PyQuery 對象的 items 方法,即可逐層遍歷相同元素,就像我們的 list 一樣。
4. 標簽多個 class 確定唯一值的選擇器寫法
仔細看我們 li 節(jié)點中的 h3 標簽,class 里面是有兩個值的。
<h3 class = "title fontYaHei">.............通過這兩個值的唯一性,我們可以直接定位到 h3 元素。
h3 = li('.title.fontYaHei')5. PyQuery 屬性選擇節(jié)點
如果你用不慣以上的所有獲取節(jié)點元素的方法, PyQuery 還提供了一個便利的方法,即通過標簽元素的屬性進行定位元素。
a_city = h3('a').attr('data-bn-ipg', 'place-citylist-mix-name-1')h3('a') 獲取的是 h3 標簽里 a 標簽的元素節(jié)點。 使用 .attr 時,后面兩個參數(shù)說明 a 標簽原本的屬性由如下組成:
<a data-bn-ipg = "place-citylist-mix-name-1">.............attr 第一個參數(shù)是標簽屬性的名字,第二個參數(shù)則是屬性具體的值。
6. PyQuery 節(jié)點元素提取文本內(nèi)容
以上內(nèi)容操作的都是標簽元素的節(jié)點,而非本文內(nèi)容,想要提取文本內(nèi)容,則調(diào)用 xx.text() 方法,節(jié)點轉(zhuǎn)為字符串。
p_person_nums = li('p')('.beento') print(p_person_nums.text())成果展示
最終的成果展示如下:
寫入 Excel 之后,可以看到第二行的數(shù)據(jù)都在一行,不方便美觀,即使我代碼中做了換行的操作。
所以程序跑完后,需要手動操作下 Excel ,讓換行符生效,如下操作:
選中一列,然后數(shù)據(jù) -> 分列:
選成文本,完成即可,自己就換行顯示了。
獲取到的信息寫入 Excel 中。比如你想去哪個國家游玩,自己查攻略,通過這種方式來解決信息的整理,也是一種不錯的高效方法。
總結(jié)
以上提到的 6 點,便是 PyQuery 常用到的基礎(chǔ)方法。如果還有想了解具體詳情的小伙伴,可以自行去官網(wǎng)查閱具體使用技巧。
實戰(zhàn)中進步,學完 PyQuery 的用法,是否覺得學會了一個高效的解析節(jié)點的方法庫呢?
關(guān)于本篇文章的全部源代碼,去除空行約 50 行,非常簡短,已經(jīng)上傳到 github 了。
有想學習的朋友,可以后臺回復 "窮游" 二字,即可獲取源碼地址。
總結(jié)
以上是生活随笔為你收集整理的pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的虚拟机部署项目,在虚拟机上部
- 下一篇: java 调用jira_java中通过J