看這篇文章前,我強烈建議你先把右側分類下面python爬蟲下面的其餘文章看一下,至少看一下爬蟲基礎和scrapy的,否則可能有些東西不能理解css
5-14更新html
注意:目前拉勾網換了json結構,以前是`content` - `result` 如今改爲了`content`- `positionResult` - `result`,因此你們寫代碼的時候要特別注意加上一層`positionResult`的解析。java
如今不少網站都用了一種叫作Ajax(異步加載)的技術,就是說,網頁打開了,先給你看上面一部分東西,而後剩下的東西再慢慢加載。
因此你能夠看到不少網頁,都是慢慢的刷出來的,或者有些網站隨着你的移動,不少信息才慢慢加載出來。這樣的網頁有個好處,就是網頁加載速度特別快(由於不用一次加載所有內容)。python
可是這對咱們寫爬蟲就不方便了,由於你老是爬不到你想要的東西!數據庫
咱們舉個例子,我由於最近想分析拉勾網有關職位狀況的數據,因此我上了他們網站:(注意!爬取的內容僅限於學術交流!請勿用於商業用途!)
http://www.lagou.com/zhaopin/json
能夠看到,這裏有不少職位信息。注意,這裏當咱們點下一頁markdown
咱們能夠發現,網頁地址沒有更新就直接加載出來了!!網絡
這明顯就是一個動態頁面,咱們寫個爬蟲來爬一下網頁,看看能獲得什麼內容,如今應該能很快寫出(搭出)一個這樣的爬蟲吧?(其實啥也沒有)python爬蟲
能夠看到輸出,你能夠把全部源代碼瀏覽一遍,裏面沒有任何有關職位的信息!異步
若是你以爲不直觀,我教你一招,咱們簡單的把它輸出到一個html看看
就是這麼個狀況。。關鍵部分呢!空的!!!
這時候要怎麼辦呢?難道信息就爬不了嗎??
固然不是,你要想,它只要是顯示到網頁上了,就確定在某個地方,只是咱們沒找到而已。
只不過,這個時候,咱們就要費點功夫了。咱們仍是回到剛纔的網頁上去點F12,這時候,咱們用network功能
這時候你可能看到裏面沒東西,這是由於它只記錄打開後的網絡資源的信息。
咱們按F5刷新一下。
你能夠看到開始唰唰的刷出東西來了……太快了,我眼睛有點跟不上了,咱們等它停下來,咱們隨便點個資源,會出現右邊的框,咱們切換到response
而後咱們就開始找可疑的網頁資源。首先,圖片,css什麼之類的能夠跳過,這裏有個訣竅,就是通常來講,這類數據都會用json存,因此咱們嘗試在過濾器中輸入json
咱們發現了2個資源感受特別像,其中有個名字直接有position,咱們點擊右鍵,在新標籤頁打開看看
雖然看上去很亂(密集恐懼症估計忍不了)可是實際上頗有條理,全是鍵值對應的,這就是json格式,特別適合網頁數據交換。
這裏咱們發現就是這個了!全部職位信息都在裏面,咱們趕忙記錄下它的網址
經過觀察網頁地址能夠發現推測出:
http://www.lagou.com/jobs/positionAjax.json?這一段是固定的,剩下的咱們發現上面有個北京
咱們把這裏改爲上海看看,能夠看見又出來一個網頁內容,恰好和以前網頁把工做地改爲上海,對應的內容一致
因此咱們能夠得出結論,這裏city標籤就表明着你選的工做地點,那咱們要是把工做經驗,學歷要求,什麼都選上呢??能夠直接看到,網址就變了不少
import time
time.time()
由於這個網頁的格式是用的json,那麼咱們能夠用json格式很好的讀出內容。
這裏咱們切換成到preview下,而後點content——result,能夠發現出先一個列表,再點開就能夠看到每一個職位的內容。爲何要從這裏看?有個好處就是知道這個json文件的層級結構,方便等下編碼。
整個處理的代碼就那麼幾句話,能夠可出,這裏徹底和剛纔的層級結構是一致的。先content而後result而後是每一個職位的信息。
jdict = json.loads(response.body)
jcontent = jdict["content"]
jresult = jcontent["result"]
for each in jresult:
print each['city']
print each['companyName']
print each['companySize']
print each['positionName']
print each['positionType']
print each['salary']
print ''
固然仍是要引入json
import json
咱們能夠運行看看效果
而後,咱們能夠把信息存到文件或者數據庫了,那就是以前學過的內容了。
加入你須要的內容
看你是須要存入數據庫仍是文件,以前都說過了
若是須要加入數據庫,這裏加上數據庫操做,若是須要寫入文件,可能不用修改這個文件
把數據加入item,而後yield,你們應該很熟悉了
可是,這裏還只爬了一個網頁的內容,對於更多頁面的內容,怎麼獲取呢?我在下篇博客會有介紹,有興趣的童鞋能夠本身試試看若是獲取下一頁的內容,用上面教的查找資源的辦法。