結束 txt進程_Python多進程抓取拉鉤網十萬數據

轉載:Python多進程抓取拉鉤網十萬數據

準備

安裝Mongodb數據庫

其實不是一定要使用MongoDB,大家完全可以使用MySQL或者Redis,全看大家喜好。這篇文章我們的例子是Mongodb,所以大家需要下載它。

在Windows中。由于MongoDB默認的數據目錄為C:datadb,建議大家直接在安裝的時候更改默認路徑為C:MongoDB.

然后創建如下目錄文件:

C:datalogmongod.log //用于存儲數據庫的日志

C:datadb //用于存儲數據庫數據

然后在C:MongoDB文件夾下(安裝 Mongodb 路徑)創建配置文件mongod.cfg。并且在配置文件里寫入以下配置:

2e16a0fa362678e1bd8548f6b84e2d4f.png

大家記住要打開文件后綴名,不然我們可能創建了一個mongod.cfg.txt文件。

最后我們需要打開管理員權限的 CMD 窗口,執行如下命令,安裝數據庫成服務:

"C:mongodbbinmongod.exe"--config "C:mongodbmongod.cfg"--install

設置為服務后,需要在管理員權限打開的windows cmd窗口用服務的方式啟動或停止MongoDB。

net start mongodb //啟動mongodb服務

net stop mongodb //關閉mongodb服務

好了,安裝好Mongodb數據庫后,我們需要安裝PyMongo,它是MongoDB的Python接口開發包。

pip install pymongo

推薦下我自己創建的Python學習交流群960410445

開始

準備完成后,我們就開始瀏覽拉勾網。我們可以發現拉勾網所有的招聘職位都在左側分類里。如圖:

b5d15a6fdade3ddea54c32567a014a80.png

我們先獲取首頁HTML文件:

1da3d2b571a03c798322da8694eec19b.png

然后我們打開開發者工具,找到招聘職業的位置。

85815e3b688d071ebcb5b381ab361536.png

大家還記得BeautifulSoup的CSS選擇器吧,我們直接使用.select()方法獲取標簽信息。

038adfcc2d86924c02a64f1514ccbaab.png

輸出結果:

[<a class="curr"href="https://www.lagou.com/zhaopin/Java/"data-lg-tj-cid="idnull"data-lg-tj-id="4O00"data-lg-tj-no="0101">Java</a>, <a class="curr"href="https://www.lagou.com/zhaopin/C%2B%2B/"data-lg-tj-cid="idnull"data-lg-tj-id="4O00"data-lg-tj-no="0102">C++</a>, # ... 省略部分 https://www.lagou.com/zhaopin/fengxiankongzhizongjian/" data-lg-tj-cid="idnull" data-lg-tj-id="4U00" data-lg-tj-no="0404">風控總監, https://www.lagou.com/zhaopin/zongcaifuzongcai/" data-lg-tj-cid="idnull" data-lg-tj-id="4U00" data-lg-tj-no="0405">副總裁]
260

獲取到所有職位標簽的a標簽后,我們只需要提取標簽的href屬性和標簽內內容,就可以獲得到職位的招聘鏈接和招聘職位的名稱了。我們準備信息生成一個字典。方便我們后續程序的調用。

00598221849da2b764d843b016c84ab5.png

這里我們用zip函數,同時迭代兩個list。生成一個鍵值對。

接下來我們可以隨意點擊一個職位分類,分析招聘頁面的信息。

分頁

我們首先來分析下網站頁數信息。經過我的觀察,每個職位的招聘信息最多不超過 30 頁。也就是說,我們只要從第 1 頁循環到第 30 頁,就可以得到所有招聘信息了。但是也可以看到有的職位招聘信息,頁數并不到 30 頁。以下圖為例:

12f01037f98204bf84709c38d24003bc.png

如果我們訪問頁面:https://www.lagou.com/zhaopin/Java/31/

也就是第 31 頁。我們會得到 404 頁面。所以我們需要在訪問到404頁面時進行過濾。

ifresp.status_code ==404:

pass

這樣我們就可以放心的 30 頁循環獲得每一頁招聘信息了。

我們的每一頁url使用format拼接出來:

link ='{}{}/'.format(url, str(pages))

獲取信息

e78f05f5a642d16503d1bc9ae105254d.png

b62be6992bc032a6f9183ddac9acdd8d.png

獲取到全部信息后,我們同樣的把他們組成鍵值對字典。

64896cb6d293dc668793d28d57dac2dd.png

組成字典的目的是方便我們將全部信息保存到數據庫。

保存數據

保存數據庫前我們需要配置數據庫信息:

bed31058fa1d3bc0fa78e019297062db.png

這里我們導入了pymongo庫,并且與MongoDB建立連接,這里是默認連接本地的MongoDB數據。創建并選擇一個數據庫lagou,并在這個數據庫中,創建一個table,即url_list。然后,我們進行數據的保存:

ifurl_list.insert_one(data):

print('保存數據庫成功', data)

如果保存成功,打印出成功信息。

多線程爬取

十萬多條數據是不是抓取的有點慢,有辦法,我們使用多進程同時抓取。由于Python的歷史遺留問題,多線程在Python中始終是個美麗的夢。

6d7286a56f436bacae23b29a1c559961.png

我們把之前提取職位招聘信息的代碼,寫成一個函數,方便我們調用。這里的parse_link()就是這個函數,他就收職位的 url 和所有頁數為參數。我們get_alllink_data()函數里面使用for循環 30 頁的數據。然后這個作為主函數傳給多進程內部調用。

f354b13fb2055733745a415aea31bf99.png

這里是一個pool進程池,我們調用進程池的map方法.

map(func, iterable[,chunksize=None])

多進程Pool類中的map方法,與Python內置的map函數用法行為基本一致。它會使進程阻塞,直到返回結果。需要注意,雖然第二個參數是一個迭代器,但在實際使用中,必須在整個隊列都就緒后,程序才會運行子進程。join()

方法等待子進程結束后再繼續往下運行,通常用于進程間的同步.

反爬蟲處理

如果大家就這樣整理完代碼,直接就開始抓取的話。相信在抓取的不久后就會出現程序中止不走了。我剛剛第一次中止后,我以為是網站限制了我的 ip。于是我做了如下改動。

88dc17fa28a0326c86146960e133cb5b.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533705.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533705.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533705.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機休眠怎么喚醒,電腦休眠后,就無法喚醒了?怎么辦?快速教你解決這個問題...

電腦是目前人們生活、工作中使用最多的電子產品之一&#xff0c;我們都經常會使用到電腦。但是如果電腦在一段時間后不使用&#xff0c;電腦就會自動進入休眠狀態&#xff0c;而在進入休眠狀態的之后&#xff0c;只有當我們將電腦喚醒了&#xff0c;電腦才能夠回到菜單界面當中…

python爬蟲爬取音樂單曲_Python爬取qq音樂的過程實例

一、前言qq music上的音樂還是不少的&#xff0c;有些時候想要下載好聽的音樂&#xff0c;但有每次在網頁下載都是煩人的登錄什么的。于是&#xff0c;來了個qqmusic的爬蟲。至少我覺得for循環爬蟲&#xff0c;最核心的應該就是找到待爬元素所在url吧。二、Python爬取QQ音樂單曲…

python按照日期篩選數據_日期時間范圍上的Python篩選器?

我有一些包含開始時間和結束時間的數據&#xff08;datetime格式&#xff09;&#xff0c;我想根據更受限制的日期范圍計算持續時間&#xff08;以小時為單位&#xff09;。但到目前為止&#xff0c;我還沒有成功。&#xff08;對python還是個業余愛好者。&#xff09; 示例&am…

計算機2級u盤作弊,一種帶LED指示燈的計算機考試防U盤作弊裝置制造方法及圖紙...

【技術實現步驟摘要】一種帶LED指示燈的計算機考試防U盤作弊裝置本申請是申請日為2016年4月1日&#xff0c;申請號為2016102009851&#xff0c;專利技術名稱為“一種防U盤舞弊的計算機考試裝置”的專利技術專利的分案申請。本專利技術涉及一種防止計算機考試抄襲作弊的裝置&…

python類定義的講解_python面向對象、自定義類等使用實例講解

python 面向對象相對別的語言來說缺少兩個功能&#xff1a; 1、python不具備重載&#xff0c;重載是指在同一個類中&#xff0c;使得方法有相同的名稱&#xff0c;但是有不同的參數列表&#xff0c;但由于python函數具有強大的參數處理功能&#xff0c;因此這不是一個問題。 2、…

ubutun 更換網絡源_「ubuntu腳本1」開啟ssh替換第三方源開啟tab鍵補齊屏蔽nouveau

Ubuntu初始化腳本,安裝顯卡驅動專用初始化腳本替換apt源為國內清華源,增加docker-ce國內源開啟tab鍵補齊桌面版開啟ssh僅支持Ubuntu16/18桌面版安裝gcc make屏蔽nouveau 自動重啟服務器生效#!/bin/bash #檢測網絡是否通暢 ping -w 5 qq.com || { echo "網絡異常,腳本終止&…

地理信息系統軟件測試培訓,地理信息系統軟件測試方法技術方案

本發明專利技術涉及一種軟件測試方法。更具體地說&#xff0c;本發明專利技術涉及一種地理信息系統軟件測試方法&#xff0c;包括&#xff1a;編寫測試用例文檔并腳本化形成測試腳本&#xff1b;結合路徑分析方法設置測試用例&#xff0c;按照測試用例配套至少一組測試原始數據…

matlab meshgrid函數_matlab入門(三)圖像可視化

matlab圖像可視化基本要求(1)掌握圖形窗口的創建與控制&#xff0c;以及圖形窗口的基本操作&#xff1b;(2)熟練掌握二維和三維繪圖基本的命令、線型控制&#xff1b;(3)初步掌握用特殊的圖形來表現特殊數據的性質&#xff0c;如面積圖、直方 圖、餅圖等。(4)掌握坐標軸的控制和…

hashmap remove 沒釋放內存_java從零開始手寫 redis(13)HashMap 源碼原理詳解

為什么學習 HashMap 源碼&#xff1f;作為一名 java 開發&#xff0c;基本上最常用的數據結構就是 HashMap 和 List&#xff0c;jdk 的 HashMap 設計還是非常值得深入學習的。無論是在面試還是工作中&#xff0c;知道原理都對會我們有很大的幫助。本篇的內容較長&#xff0c;建…

南京高中計算機老師,南京市教育局召開中小學教師信息技術應用能力提升工程2.0市級專家組工作會議...

2021年3月2日上午&#xff0c;南京市中小學教師信息技術應用能力提升工程2.0市級專家組工作會議在雨花臺區教師發展中心召開。市教育局副局長祁壽東出席會議并講話&#xff0c;市教研室、教科所、電教館、教師發展學院主要負責同志&#xff0c;市級專家團隊成員及各區教師發展中…

python計算執行時間的函數_[python] 統計函數運行時間

第一種&#xff1a; import time def time_me(fn): #fn 是要修飾/修改 的函數 def _wrapper(*args, **kwargs): #這個 _wrapper(*args, **kwargs) 則代指fn, *args 代表一般變量參數&#xff0c; **kwargs代表 字典&#xff0c;哈希等參數 start time.perf_counter() fn(*args…

arthas 排查內存溢出_Java 應用線上問題排查思路、常用工具小結

前言本文總結了一些常見的線上應急現象和對應排查步驟和工具。分享的主要目的是想讓對線上問題接觸少的同學有個預先認知&#xff0c;免得在遇到實際問題時手忙腳亂。畢竟作者自己也是從手忙腳亂時走過來的。只不過這里先提示一下。在線上應急過程中要記住&#xff0c;只有一個…

計算機個性化定制服務課題,服務網絡的構建與面向增量式需求的動態定制方法-計算機科學與技術專業論文.docx...

服務網絡的構建與面向增量式需求的動態定制方法-計算機科學與技術專業論文Classified Index: TP315 U.D.C: 681.3Dissertation for the Master’s Degree in EngineeringSERVICE NETWORK CONSTRUCTION AND DYNAMIC CUSTOMIZATION METHOD FOR SUBJECTIVE CHANGES OF CUSTOMER RE…

flutter listview 滾動到指定位置_Flutter 布局原理及實戰

1. Flutter UI架構Flutter將視圖數據抽象成為三個部分&#xff0c;即Widget樹、Element樹和RenderObject樹。Widget樹&#xff1a;控件的配置信息&#xff0c;不涉及渲染&#xff0c;更新代價極低。RenderObject樹&#xff1a;真正的UI渲染樹&#xff0c;負責渲染UI&#xff0c…

計算機的屏幕約是16平方分米嗎,小明的臥室有16平方分米對不對

小明的臥室有16平方分米對不對不對&#xff0c;應該是16平方米不對錯! 16平方分米太小了不對&#xff0c;那么小怎么可能住人。不正確應該是16平方米xiao ming de wo shi you 1 6 ping fang fen mi dui bu dui32平方分米涂上每平方分米的96克油漆,需要幾克32平方分米需要油漆30…

python引用傳遞_python 是值傳遞還是引用傳遞 知乎

展開全部 那要看數據類型了&#xff0c;21135261int&#xff0c;float&#xff0c;str這種就是傳值&#xff0c;list&#xff0c;dict&#xff0c;類的實例&#xff0c;自定義對象都是穿4102引用。 下面1653是示例代碼&#xff1a;def change(int1,float1,str1,dict1,obj1,list…

雷神開機logo更改_國產外星人雷神再發新品 911MT逐影者RTX2060光追游戲本評測

隨著NVIDIA發布了筆記本20系顯卡之后&#xff0c;宣示著全民進入了“RTX光線追蹤時代”&#xff0c;各種新款的游戲也紛紛宣布支持“光線追蹤”技術來吸引更多的玩家&#xff0c;似乎現在游戲本上沒有個“RTX”貼紙就已經不好意思跟別人打招呼了。說到2019年的RTX新品&#xff…

AJAX框架衣柜內部布局,?最合理的衣柜內部布局解析,3大細節不容小覷

時常有業主或者朋友問小輕&#xff0c;最合理的衣柜內部布局應該是怎樣的&#xff0c;確實這對于非業內人士一般都是不太清楚的&#xff0c;即使有的朋友已經有了豐富的生活經驗&#xff0c;甚至是業內人士也不一定對此完全了解。那么到底最合理的衣柜內部布局是怎樣的呢&#…

python爬取數據保存為csv時生成編號_將爬取到到數據以CSV格式存儲

CSV文件存儲 CSV&#xff0c;全稱為Comma-Separated Values&#xff0c;中文可以叫做逗號分隔值或字符分隔值&#xff0c;其文件以純文本形式存儲表格數據。該文件是一個字符序列&#xff0c;可以由任意數目的記錄組成&#xff0c;記錄間以某種換行符分隔。每條記錄由字段組成&…

博達3956交換機配置手冊_網絡設備維保淺談之交換機維保

隨著信息化的飛速發展&#xff0c;交換機作為信息流通的承載者&#xff0c;是應用最為廣泛的網絡設備之一&#xff0c;其作用不言而喻。因此&#xff0c;在日產使用中&#xff0c;要注意交換機這種核心的設備的維護與保養&#xff0c;以免引發故障。交換機運維需要注意哪些問題…