5 分鐘掌握智聯招聘網站爬取並保存到 MongoDB 資料庫
(點擊
上方藍字
,快速關注我們)
來源: lemon 的自薦投稿(微信公號:Python數據之道)
如有好文章投稿,請點擊 → 這裡了解詳情
前言
本次主題分兩篇文章來介紹:
一、數據採集
二、數據分析
第一篇先來介紹數據採集,即用python爬取網站數據。
1 運行環境和python庫
先說下運行環境:
python3.5
windows 7, 64位系統
python庫
本次智聯招聘的網站爬取,主要涉及以下一些python庫:
requests
BeautifulSoup
multiprocessing
pymongo
itertools
2 爬取的主要步驟
根據關鍵字、城市、以及頁面編號生成需要爬取的網頁鏈接
用requests獲取相應的網頁內容
用BeautifulSoup解析,獲取需要的關鍵信息
將爬取的信息存入MongoDB資料庫中,插入新記錄或更新已有記錄
用multiprocessing啟動多進程進行爬取,提高運行效率
3 文件組成
信息配置文件「zhilian_kw_config.py」
爬蟲主運行文件「zhilian_kw_spider.py」
在配置文件中設置需要爬取的信息,然後運行主程序進行內容抓取。
配置文件「zhilian_kw_config.py」的內容如下:
# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON"
TOTAL_PAGE_NUMBER
=
90
# PAGE_NUMBER: total number of pages,可進行修改
KEYWORDS
=
[
"大數據"
,
"python"
,
"投資經理"
]
# 需爬取的關鍵字可以自己添加或修改
# 爬取主要城市的記錄
ADDRESS
=
[
"全國"
,
"北京"
,
"上海"
,
"廣州"
,
"深圳"
,
"天津"
,
"武漢"
,
"西安"
,
"成都"
,
"大連"
,
"長春"
,
"瀋陽"
,
"南京"
,
"濟南"
,
"青島"
,
"杭州"
,
"蘇州"
,
"無錫"
,
"寧波"
,
"重慶"
,
"鄭州"
,
"長沙"
,
"福州"
,
"廈門"
,
"哈爾濱"
,
"石家莊"
,
"合肥"
,
"惠州"
,
"太原"
,
"昆明"
,
"煙台"
,
"佛山"
,
"南昌"
,
"貴陽"
,
"南寧"
]
MONGO_URI
=
"localhost"
MONGO_DB
=
"zhilian"
爬蟲主運行文件「zhilian_kw_spider.py」的內容如下:
# Code based on Python 3.x
# _*_ coding: utf-8 _*_
# __Author: "LEMON"
from
datetime
import
datetime
from
urllib
.
parse
import
urlencode
from
multiprocessing
import
Pool
import
requests
from
bs4
import
BeautifulSoup
import
pymongo
from
zhilian
.
zhilian_kw_config
import
*
import
time
from
itertools
import
product
client
=
pymongo
.
MongoClient
(
MONGO_URI
)
db
=
client
[
MONGO_DB
]
def
download
(
url
)
:
headers
=
{
"User-Agent"
:
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
}
response
=
requests
.
get
(
url
,
headers
=
headers
)
return
response
.
text
def
get_content
(
html
)
:
# 記錄保存日期
date
=
datetime
.
now
().
date
()
date
=
datetime
.
strftime
(
date
,
"%Y-%m-%d"
)
# 轉變成str
soup
=
BeautifulSoup
(
html
,
"lxml"
)
body
=
soup
.
body
data_main
=
body
.
find
(
"div"
,
{
"class"
:
"newlist_list_content"
})
if
data_main
:
tables
=
data_main
.
find_all
(
"table"
)
for
i
,
table_info
in
enumerate
(
tables
)
:
if
i
==
0
:
continue
tds
=
table_info
.
find
(
"tr"
).
find_all
(
"td"
)
zwmc
=
tds
[
0
].
find
(
"a"
).
get_text
()
# 職位名稱
zw_link
=
tds
[
0
].
find
(
"a"
).
get
(
"href"
)
# 職位鏈接
fkl
=
tds
[
1
].
find
(
"span"
).
get_text
()
# 反饋率
gsmc
=
tds
[
2
].
find
(
"a"
).
get_text
()
# 公司名稱
zwyx
=
tds
[
3
].
get_text
()
# 職位月薪
gzdd
=
tds
[
4
].
get_text
()
# 工作地點
gbsj
=
tds
[
5
].
find
(
"span"
).
get_text
()
# 發布日期
tr_brief
=
table_info
.
find
(
"tr"
,
{
"class"
:
"newlist_tr_detail"
})
# 招聘簡介
brief
=
tr_brief
.
find
(
"li"
,
{
"class"
:
"newlist_deatil_last"
}).
get_text
()
# 用生成器獲取信息
yield
{
"zwmc"
:
zwmc
,
# 職位名稱
"fkl"
:
fkl
,
# 反饋率
"gsmc"
:
gsmc
,
# 公司名稱
"zwyx"
:
zwyx
,
# 職位月薪
"gzdd"
:
gzdd
,
# 工作地點
"gbsj"
:
gbsj
,
# 公布時間
"brief"
:
brief
,
# 招聘簡介
"zw_link"
:
zw_link
,
# 網頁鏈接
"save_date"
:
date
# 記錄信息保存的日期
}
def
main
(
args
)
:
basic_url
=
"招聘(求職)盡在智聯招聘?"
for
keyword
in
KEYWORDS
:
mongo_table
=
db
[
keyword
]
paras
=
{
"jl"
:
args
[
0
],
"kw"
:
keyword
,
"p"
:
args
[
1
]
# 第X頁
}
url
=
basic_url
+
urlencode
(
paras
)
# print(url)
html
=
download
(
url
)
# print(html)
if
html
:
data
=
get_content
(
html
)
for
item
in
data
:
if
mongo_table
.
update
({
"zw_link"
:
item
[
"zw_link"
]},
{
"$set"
:
item
},
True
)
:
(
"已保存記錄:"
,
item
)
if
__name__
==
"__main__"
:
start
=
time
.
time
()
number_list
=
list
(
range
(
TOTAL_PAGE_NUMBER
))
args
=
product
(
ADDRESS
,
number_list
)
pool
=
Pool
()
pool
.
map
(
main
,
args
)
# 多進程運行
end
=
time
.
time
()
(
"Finished, task runs %s seconds."
%
(
end
-
start
))
看完本文有收穫?請轉
發分享給更多人
關注「P
ython開發者」,提升Python技能


※如果老婆和女朋友她們是程序……
※數據分析師掙多少錢?爬一家招聘網站給你看!
※python 最快 web 框架 Sanic 快速入門
※金融數據分析全新升級 | 學好風控,日進斗金
TAG:Python開發者 |
※Google Chrome將標記所有HTTP網站為不安全鏈接
※科技調查網站The Markup獲2000萬美元融資,Craigslist創始人投資
※全球頂級評測網站AnandTech:華為MateBook X Pro筆記本時代已到
※新iPhone現身跑分網站:搭載4GB運存
※谷歌將Material Design 2用於相冊網站
※新型Mac加密貨幣挖礦惡意軟體正通過MacUpdate網站分發
※圖庫服務商SmugMug收購圖片分享網站Flickr
※Google Chrome 67穩定版更新:多數網站支持免密登陸
※微軟即將停止支持Microsoft Band手環 關閉網站和App
※Chrome 68瀏覽器體驗:不安全網站提醒、Material Design UI初體驗
※疑似AMD Flute SoC現身評分網站,或為Project Scarlett核心
※谷歌自研Fuchsia系統網站上線 取代Android和Chrome OS
※ApsaraClouder雲計算專項技能認證超大流量網站的負載均衡考試
※榮耀V20贏權威硬體評測網站AnandTech打call 旗艦性能引關注
※加密貨幣數據網站CoinMarketCap發布首款App可追蹤幣價
※電商門戶網站商品品類多級聯動SpringBoot+Thymeleaf實現
※WordPress的Total Donations插件存在漏洞,使任何人都能登錄網站
※全球最大模擬器網站EmuParadise關閉所有下載
※3D資源必備網站,Sketchfab推出3D模型商店正式版
※Chrome 將標記所有 HTTP 網站為 「不安全」