1. 程式人生 > >【圖文詳解】scrapy爬蟲與動態頁面——爬取拉勾網職位資訊(2)

【圖文詳解】scrapy爬蟲與動態頁面——爬取拉勾網職位資訊(2)

上次挖了一個坑,今天終於填上了,還記得之前我們做的拉勾爬蟲嗎?那時我們實現了一頁的爬取,今天讓我們再接再厲,實現多頁爬取,順便實現職位和公司的關鍵詞搜尋功能。

之前的內容就不再介紹了,不熟悉的請一定要去看之前的文章,程式碼是在之前的基礎上修改的

開始

還是回到我們熟悉的頁面,這裡,我們熟練的打開了Newwork標籤,我們點下一頁,看會出來什麼結果

果然還是跳出來一個頁面,但是貌似。。網址一樣,我開啟看一下

和之前不一樣也!

一樣的網址,結果不一樣的結果,這怎麼可能!!小夥伴是不是也和我一樣,一臉懵B!

別急,我們繼續看看別的資訊
在preview我們看到了Pageno.2 說明確實不是同樣的內容

看看Header

我們繼續看header,貌似發現了不起的東西。

這個pn不就是pageno的簡寫嗎?(什麼,你怎麼不知道有這個縮寫?)我們可以再開啟一個網頁看看,事實證明,我是對的。

好的,我們現在知道頁碼資訊在這裡了,那要怎麼把這個資訊附加上呢??

Get or Post??

我們知道網頁有兩種方式傳輸資料,get和post,get是把需要傳輸的資料寫到URL上,使用者可以直觀看見,就是我們之前一直使用的(比如搜尋城市,工作經驗,學歷什麼的)。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。使用者看不到這個過程。

scrapy實現post

看來我們得想辦法用scrapy實現post了。
如果你還記得我們之前講request的時候講了request是可以輕鬆實現post的,那scrapy有request嗎?毫無疑問是有的。我們在文件中找到了一個叫FormRequest的物件,它能實現post功能,並給出了例子

我們在我們的之前程式碼中的class中加入一個start_requests函式

def start_requests(self):
        return [scrapy.http.FormRequest('http://www.lagou.com/jobs/positionAjax.json?px=new&city=%E5%8C%97%E4%BA%AC'
, formdata={'pn':'2'},callback=self.parse)]

執行一下,出錯了,才發現,原來目前拉勾的json結構改了,中間加了一個positionResult

修改程式碼:

        jcontent = jdict["content"]
        jposresult = jcontent["positionResult"]
        jresult = jposresult["result"]

再執行一下,和第2頁的一致,說明成功了

這裡再說下,如果你在關鍵詞裡搜尋,你會發現連結也不會變化,說明什麼??說明也是用的post,比如我搜索大資料,可以看到kd變成了大資料,所以我們也可以構造特定關鍵詞的爬蟲了。

實現自動翻頁

我們只要能控制pn就行了,我們新增一個變數curpage讓它執行一次自加1,然後我們還是用之前的yield的方法

if self.curpage <= self.totalPageCount:
    self.curpage += 1
yield scrapy.http.FormRequest('http://www.lagou.com/jobs/positionAjax.json?px=new&city=%E5%8C%97%E4%BA%AC',                                        formdata={'pn':str(self.curpage)},callback=self.parse)

要說明的是,之前json檔案裡是有個totalPageCount屬性的,目前沒了!所以不能直接從json檔案中獲取頁數資訊了,怎麼辦呢?如果你要細心觀察就可以發現有個totalCount屬性,你做實驗可以發現,每頁都是15個,頁數就是totalCount/15取整,如果頁數大於30,只顯示30頁。

  self.totalPageCount = jposresult['totalCount'] /15;
        if  self.totalPageCount > 30:
            self.totalPageCount = 30;

這裡我們爬所有北京有關“大資料”的工作

 formdata={'pn':str(self.curpage),'kd':'大資料'}

好了大工告成!享受你的成果吧!!

相關推薦

圖文scrapy爬蟲動態頁面——職位資訊2

上次挖了一個坑,今天終於填上了,還記得之前我們做的拉勾爬蟲嗎?那時我們實現了一頁的爬取,今天讓我們再接再厲,實現多頁爬取,順便實現職位和公司的關鍵詞搜尋功能。 之前的內容就不再介紹了,不熟悉的請一定要去看之前的文章,程式碼是在之前的基礎上修改的

圖文scrapy爬蟲動態頁面——職位資訊1

5-14更新 注意:目前拉勾網換了json結構,之前是content - result 現在改成了content- positionResult - result,所以大家寫程式碼的時候要特別注意加上

scrapy職位資訊——scrapy初識及lagou爬蟲專案建立

本次以scrapy抓取拉勾網職位資訊作為scrapy學習的一個實戰演練 python版本:3.7.1 框架:scrapy(pip直接安裝可能會報錯,如果是vc++環境不滿足,建議直接安裝一個visual studio一勞永逸,如果報錯缺少前置依賴,就先安裝依賴)     本篇

scrapy職位資訊——對欄位進行提取

上一篇中已經分析了詳情頁的url規則,並且對items.py檔案進行了編寫,定義了我們需要提取的欄位,本篇將具體的items欄位提取出來 這裡主要是涉及到選擇器的一些用法,如果不是很熟,可以參考:scrapy選擇器的使用   依舊是在lagou_c.py檔案中編寫程式碼 首先是匯入Lag

Python 爬蟲-模擬登入知乎-職位資訊

用Python寫爬蟲是很方便的,最近看了xlzd.me的文章,他的文章寫的很到位,提供了很好的思路。因為他的文章部分程式碼省略了。下面是基於他的文章的三個程式碼片段: 基於Python3,Python2的話需要修改下input輸入函式和print的用法。 爬取豆瓣電影top250 爬取拉勾網職位資訊 模擬

Scrapy職位資訊

很多網站都用了一種叫做Ajax(非同步載入)的技術,通常我們會發現這種網頁,打開了,先給你看上面一部分東西,然後剩下的東西再慢慢載入,也就是區域性載入。所以你可以看到很多網頁,瀏覽器中的網址沒變,但是資料照樣是可以更新的。這對我們正確爬取資料造成了一定影響,我們

Python scrapy 招聘資訊

週末折騰了好久,終於成功把拉鉤網的招聘資訊爬取下來了。現在總結一下! 環境: windows 8.1 + python 3.5.0 首先使用 scrapy 建立一個專案: E:\mypy> scrapy startproject lgjob 建立後目錄結構:

爬蟲學習之17:網網招聘資訊非同步載入+Cookie模擬登陸

         很多網站需要通過提交表單來進行登陸或相應的操作,可以用requests庫的POST方法,通過觀測表單原始碼和逆向工程來填寫表單獲取網頁資訊。本程式碼以獲取拉勾網Python相關招聘職位為例作為練習。開啟拉鉤網,F12進入瀏覽器開發者工具,可以發現網站使用了A

python爬蟲: 職位並分析

0. 前言 本文從拉勾網爬取深圳市資料分析的職位資訊,並以CSV格式儲存至電腦, 之後進行資料清洗, 生成詞雲,進行描述統計和迴歸分析,最終得出結論. 1. 用到的軟體包 Python版本: Python3.6 requests: 下載網

圖文HDFS基本原理

合並操作 ear 系統性能 重要 logs 允許 積累 帶寬 文件系統 本文主要詳述了HDFS的組成結構,客戶端上傳下載的過程,以及HDFS的高可用和聯邦HDFS等內容。若有不當之處還請留言指出。 當數據集大小超過一臺獨立的物理計算機的存儲能力時,就有必要對它進行分區,並存

JDBC連線池分頁

一、連線池 1.由來: 一個使用者至少要用到一個連線。當用戶過多時,需要建立巨大數量的連線物件,這會使資料庫承受極大的壓力,為了解決這種現象,出現了資料庫連線池。 2.定義: 在使用者和資料庫之間建立一個”池”,這個池中有若干個連線物件,當用戶想要連線資

通過終端命令列進行WebDav伺服器配置,實現使用PUT進行檔案上傳圖文

HTTP的常見方法 》GET        獲取指定資源 》POST      2M 向指定資源提交資料進行處理請求,在RESTful風格中用於新增資源 》HEAD            獲取指定資源頭部資訊 》PUT        替換指定資源(不支援瀏覽器操作) 》DE

H.264/AVC視訊編解碼技術十二、解析H.264碼流的巨集塊結構

《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼

爬蟲相關爬蟲的安卓招聘資訊

我爬取了30頁拉勾上安卓的招聘資料告訴你 安卓崗位究竟要一個什麼樣的人 我知道沒圖你們是不會看的 如圖:以上是抓取了30頁拉勾上關於招聘安卓相關的內容 然後根據詞頻 製作出詞雲圖  出現最多的詞是 開發經驗 整體流程總共分為2步 1.爬蟲爬取相關的招聘資訊 2.根

scrapy職位信息——scrapy初識及lagou爬蟲項目建立

報錯 中間鍵 方式 set 分享圖片 生成 pytho 薪酬 color 本次以scrapy抓取拉勾網職位信息作為scrapy學習的一個實戰演練 python版本:3.7.1 框架:scrapy(pip直接安裝可能會報錯,如果是vc++環境不滿足,建議直接安裝一個visua

python 爬蟲2-正則表達式抓職位信息

headers mode data .cn 保存 time exc href ace import requestsimport re #正則表達式import time import pandas #保存成 CSV #header={‘User-Agent‘:‘M

ruby 爬蟲職位信息,產生詞雲報告

content 數據持久化 lag works wid spa 代碼 職位 要求 思路:1.獲取拉勾網搜索到職位的頁數    2.調用接口獲取職位id    3.根據職位id訪問頁面,匹配出關鍵字    url訪問采用unirest,由於拉鉤反爬蟲,短時間內頻繁訪問會被

Python爬蟲資料分析崗位資料

1 JSON介紹 JSON(JavaScript Object Notation)已經成為通過HTTP請求在Web瀏覽器和其他應用程式之間傳送資料的標準格式之一。比CSV格式更加靈活。Json資料格式,非常接近於有效的Pyhton程式碼,其特點是:JSON物件所

python 爬蟲所有上市公司公告資訊

。,。前面我們已經瞭解了python中多執行緒,selenium,requests等爬蟲基本操作的知識,現在我們準備編寫一個規模較大的爬蟲,目的是爬取所有上市公司2015年至今的公告資訊。 相較於前面幾個簡單的爬蟲功能程式碼,公告資訊爬蟲需要考慮更多的問題,現在可以預見到的

scrapypython職位+Mysql+視覺化

在進行爬取目標網站中為遇到一個問題,爬取5頁資料之後會出錯,設定了每一次請求的隨機超時間10-20->time.sleep(random.randint(10, 20)),同樣會被拉勾網禁止請求資料,可能被輕度判定為爬取,所以可以設定每一次的隨機超時間為20-30秒,就可以解決這個問題。