爬蟲實戰(zhàn)——拉勾網(wǎng)

閑來無事掂名,想看看拉勾上關(guān)于的Python的招聘信息

于是。哟沫。饺蔑。爬下來唄

  • 話不多說,直接開始

不對嗜诀,首先還是說一下主要使用到的技術(shù)棧猾警,這里我沒有使用requests庫孔祸,而是使用selenium爬的

  • why ?

我喜歡唄~

  • selenium爬蟲原理

其實原理也沒啥好說的发皿,和平時爬蟲的時候原理都是一樣的崔慧,就是模擬瀏覽器上網(wǎng)唄

  • 分析:

其實,拉勾網(wǎng)是非常好爬的穴墅,首先進(jìn)入拉勾網(wǎng)(www.lagou.com)惶室,并搜索python 回車

拉勾網(wǎng)搜索python
拉勾網(wǎng)搜索python

為什么說拉勾網(wǎng)好爬,原因之一在圖中我已經(jīng)標(biāo)注出來了封救,就是不需要登錄,原因之二請見下文

在chrome瀏覽器按f12捣作,查看網(wǎng)頁源碼

瀏覽器查看F12

此時會發(fā)現(xiàn)誉结,Network下什么都沒有,那是因為沒有請求券躁,此時惩坑,需要再此刷新頁面,就會有了

Network

注意此時也拜,我們選擇箭頭所指的位置以舒,這里的數(shù)據(jù)是通過ajax發(fā)送過來的,這里就說一下蔓钟,拉勾網(wǎng)容易爬的原因之二,因為所有的數(shù)據(jù)在ajax里都能找到卵贱,只需要爬去這里的json數(shù)據(jù)就行了滥沫,但是我沒有這樣做,因為不屑于(裝)這么爬(B)键俱,開頭就說了這次爬蟲使用的是selenium兰绣,所以需要分析網(wǎng)頁的html。因此编振,這里的數(shù)據(jù)不是重點(diǎn)缀辩,我們看網(wǎng)頁

Elements

點(diǎn)擊Elements,查看網(wǎng)頁源碼踪央,再點(diǎn)擊左上角的小箭頭(我標(biāo)注的紅色小箭頭)所指的按鈕臀玄,再選中網(wǎng)頁中的元素,即可快速定位到該元素所在的源碼位置畅蹂,到此時镐牺,其實我們已經(jīng)找到想爬數(shù)據(jù)的所在位置了,在代碼中使用selenium自帶的xpath解析出來就可以了魁莉,接下來就是代碼實現(xiàn)了

  • 話不多說直接上源碼:
import json
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time


class Lagou(object):
    def __init__(self, search_name):
        self.start_url = "https://www.lagou.com/jobs/list_{}?px=default&city=%E5%8C%97%E4%BA%AC#filterBox"
        self.search_name = search_name
        self.chrome_options = Options()
        self.chrome_options.add_argument('--headless')
        self.driver = webdriver.Chrome(chrome_options=self.chrome_options)
        self.content_header = ["positionName", "businessZones", "CreateTime", "companyShortName", "salary", "workYear"]

    def get_content_list(self):  # 提取數(shù)據(jù)
        li_list = self.driver.find_elements_by_xpath('//li[contains(@class, "con_list_item")]')
        content_list = []
        for li in li_list:
            item_list = []
            item_list.append(li.find_element_by_tag_name("h3").text)
            item_list.append(li.find_element_by_tag_name("em").text)
            item_list.append(li.find_elements_by_xpath(".//span[@class='format-time']")[0].text)
            item_list.append(li.find_elements_by_xpath(".//div[@class='company_name']")[0].text)
            item_list.append(li.find_elements_by_xpath(".//span[@class='money']")[0].text)
            item_list.append(li.find_elements_by_xpath(".//div[@class='li_b_l']")[0].text)

            # print(item_list)
            content_list.append(item_list)

        # 下一頁
        next_url = self.driver.find_elements_by_xpath("http://span[@class='pager_next ']")
        next_url = next_url[0] if len(next_url) > 0 else None
        return content_list, next_url

    def save_content_list(self, content_list):
        with open(self.search_name + "_data.csv", "a", encoding='utf-8') as f:
            for content in content_list:
                print(content)
                for item in content:
                    if isinstance(item, str):
                        if '睬涧,' in item:
                            item.replace(",", "|")
                    f.write(item + ",")
                f.write('\n')

    def run(self):
        # 發(fā)送請求
        self.driver.get(self.start_url.format(self.search_name))

        # 提取數(shù)據(jù)
        content_list, next_url = self.get_content_list()

        # 保存數(shù)據(jù)
        self.save_content_list(content_list)

        # 翻頁
        while next_url is not None:
            next_url.click()
            time.sleep(6)
            content_list, next_url = self.get_content_list()
            self.save_content_list(content_list)


if __name__ == '__main__':
    lagou = Lagou("python")
    lagou.run()
    # 翻頁

因為大多數(shù)時候募胃,我們爬數(shù)據(jù)都是有目的的,在這里畦浓,我將數(shù)據(jù)轉(zhuǎn)化成了csv格式保存的痹束,只需要按需修改即可啦。

源碼中讶请,是將爬去下來的數(shù)據(jù)保存在文件中祷嘶,這個文件被保存在當(dāng)前的項目路徑下,亦可按需修改

另外夺溢,我在最后又將源碼進(jìn)行修改论巍,通過分析網(wǎng)頁的url,發(fā)現(xiàn)搜索關(guān)鍵詞可以在url中修改风响,因此這里使用了format將其扣出嘉汰,只需要在實例化對象的時候,傳入想搜索的關(guān)鍵詞即可爬取到相關(guān)的職位

寫在最后:

通過這次爬蟲状勤,雖然很慢鞋怀。但是不得不承認(rèn),selenium更像是在模擬人真實的操作瀏覽器查看網(wǎng)頁持搜,因此此種方法不易被反爬蟲發(fā)現(xiàn)密似,但是是真的慢(用requests爬去json數(shù)據(jù),450條同樣的數(shù)據(jù)大概只需要30秒葫盼,而我用這種方案足足花了5分鐘)

另外残腌,selenium還有很多其他玩法,感興趣的朋友贫导,不妨開發(fā)腦洞废累,玩一下

好吧,暫時就說這么多脱盲,有空再聊邑滨,peace~


微信公眾號:TechBoard
個人博客:www.limiao.tech

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市钱反,隨后出現(xiàn)的幾起案子掖看,更是在濱河造成了極大的恐慌,老刑警劉巖面哥,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哎壳,死亡現(xiàn)場離奇詭異,居然都是意外死亡尚卫,警方通過查閱死者的電腦和手機(jī)归榕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吱涉,“玉大人刹泄,你說我怎么就攤上這事外里。” “怎么了特石?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵盅蝗,是天一觀的道長。 經(jīng)常有香客問我姆蘸,道長墩莫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任逞敷,我火速辦了婚禮狂秦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘推捐。我一直安慰自己裂问,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布玖姑。 她就那樣靜靜地躺著愕秫,像睡著了一般慨菱。 火紅的嫁衣襯著肌膚如雪焰络。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天符喝,我揣著相機(jī)與錄音闪彼,去河邊找鬼。 笑死协饲,一個胖子當(dāng)著我的面吹牛畏腕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茉稠,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼而线!你這毒婦竟也來了铭污?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤膀篮,失蹤者是張志新(化名)和其女友劉穎嘹狞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體誓竿,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡磅网,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了筷屡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涧偷。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡簸喂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嫂丙,到底是詐尸還是另有隱情娘赴,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布跟啤,位于F島的核電站诽表,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏隅肥。R本人自食惡果不足惜竿奏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腥放。 院中可真熱鬧泛啸,春花似錦、人聲如沸秃症。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽种柑。三九已至岗仑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聚请,已是汗流浹背荠雕。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驶赏,地道東北人炸卑。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像煤傍,于是被迫代替她去往敵國和親盖文。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,152評論 25 707
  • 用兩張圖告訴你蚯姆,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料五续? 從這篇文章中你...
    hw1212閱讀 12,727評論 2 59
  • 今天晚上突然意識到2017只剩下10天了,我開始總結(jié)反思自己的錯誤蒋失。 首先人際關(guān)系返帕。也許我真的不需要很多朋友,但是...
    Renatayaaaa閱讀 201評論 2 1
  • 添加(返回新的數(shù)組長度) 末尾添加 arr.push(els) 開頭添加 arr.unshift(els) 刪除(...
    追卓2018閱讀 435評論 0 0
  • 我常常在想 回到過去 今天會不會不一樣篙挽? 天邊的晚霞真美 宛似一道血殷的傷痕 但它是黃昏代名詞 迎來的是黑暗 此時...