當前位置:
首頁 > 知識 > 5 分鐘掌握智聯招聘網站爬取並保存到 MongoDB 資料庫

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

)

:


                    

print

(

"已保存記錄:"

,

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

()


    

print

(

"Finished, task runs %s seconds."

%

(

end

-

start

))




看完本文有收穫?請轉

發分享給更多人


關注「P

ython開發者」,提升Python技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 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 網站為 「不安全」