爬取智聯招聘信息並且存入數據庫

任務爬取智聯頁面的招聘信息並且存入數據庫。

由於是初次嘗試 這裏選擇了固定的頁面存入數據庫。


首先確定需要爬取的頁面

http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全國

%2B廣東&p=###

### 這裏填寫爬取的頁面, 後期在程序裏面自己選擇。

 首先 我們打開頁面http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全國

%2B廣東&p=1 查看信息,我們選擇谷歌瀏覽器來幫助篩選。如圖

f2902d2bc5795de60991aa2ee1b67685.png

我們發現我們需要的東西位置在 newlist 類下面

679b12f681ae451669dfd81d78f5b3de.png

我們利用BS4 來解析和分析頁面。

resp = requests.get(start_yemian_html,headers=headers)

soup = bs(resp.text,"html.parser")

#獲取工作地點

place=soup.find_all(attrs={"class":"newlist"})

for i in place:

#工作名稱

zwmcold1 = i.find(attrs={"class":"zwmc"}).get_text()

zwmc2 = zwmcold1.replace("\n"," ")

zwmc3 = zwmc2.replace(" ","")


因爲這樣獲取的zwmcold1 有空格和空行所以用replace來替換掉,這樣就獲得了最後的zwmc3(職位名稱)。同樣的道理 我們可以這樣獲取 工作地點,工資水平已經公司名稱,

#公司名稱

gsmc1 = i.find(attrs={"class":"gsmc"}).get_text()

gsmc = gsmc1.replace("\n"," ")

#職位薪水

zwxz1 = i.find(attrs={"class":"zwyx"}).get_text()

zwxz = zwxz1.replace("\n"," ")

#工作地點


gzdd1 = i.find(attrs={"class":"gzdd"}).get_text()

gzdd = gzdd1.replace("\n"," ")



好了。以上我們已經用最簡單的方法抓取了智聯的招聘信息,下面我們需要把這些信息放入數據庫裏面。

我們首先定義一個數據庫的方法:

def writetosjk(zwmc3,gsmc,zwxz,gzdd):

#創建數據庫鏈接

conn =pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="zfno11",db="job",charset='utf8')

        #創建遊標

        #for i in range(1,10):

sql = '''insert into job 

                    (jobname,comname,salary,jobplace)  

                values(%s, %s, %s, %s)'''

cursor = conn.cursor()

try:

cursor.execute(sql,(zwmc3,gsmc,zwxz,gzdd))

        #提交,不然無法保存新建或者修改的數據

except MySQLdb.Error: 

print("數據庫執行語句異常")

finally:

conn.commit()

        #關閉遊標

cursor.close()

conn.close()

由於我們已經知道了我們需要抓取的信息,以及要存儲的信息,所以這裏方法的參數已經寫死,

zwmc3,gsmc,zwxz,gzdd 到時候我們調用方法,直接傳遞工資名稱,公司名稱,職位名稱,工作地點。


下面就是完整的代碼:

import pymysql

import re

import requests

import urllib

import bs4

from urllib import request

from bs4 import BeautifulSoup as bs


#數據庫定義

def writetosjk(zwmc3,gsmc,zwxz,gzdd):

#創建數據庫鏈接

conn =pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="zfno11",db="job",charset='utf8')

        #創建遊標

        #for i in range(1,10):

sql = '''insert into job 

                    (jobname,comname,salary,jobplace)  

                values(%s, %s, %s, %s)'''

cursor = conn.cursor()

try:

cursor.execute(sql,(zwmc3,gsmc,zwxz,gzdd))

        #提交,不然無法保存新建或者修改的數據

except MySQLdb.Error: 

print("數據庫執行語句異常")

finally:

conn.commit()

        #關閉遊標

cursor.close()

conn.close()



#第一步,獲取頁面信息並且保存信息

def get_info_save():

choice=int(input("爬取特定頁面或者頁面範圍爬取 1 特定頁面,2指定頁面範圍"))

if choice == 1:

start_yemian=input("請輸入爬去的頁數")

start_yemian_html="http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全國%2B廣東&p="+start_yemian

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36"}

resp = requests.get(start_yemian_html,headers=headers)

soup = bs(resp.text,"html.parser")

#獲取工作地點

place=soup.find_all(attrs={"class":"newlist"})

# place=soup.find_all(attrs={"class":"newlist_list_content"})

for i in place:

#工作名稱

zwmcold1 = i.find(attrs={"class":"zwmc"}).get_text()

zwmc2 = zwmcold1.replace("\n"," ")

zwmc3 = zwmc2.replace(" ","")

#公司名稱

gsmc1 = i.find(attrs={"class":"gsmc"}).get_text()

gsmc = gsmc1.replace("\n"," ")

#職位薪水

zwxz1 = i.find(attrs={"class":"zwyx"}).get_text()

zwxz = zwxz1.replace("\n"," ")

#工作地點

gzdd1 = i.find(attrs={"class":"gzdd"}).get_text()

gzdd = gzdd1.replace("\n"," ")

writetosjk(zwmc3,gsmc,zwxz,gzdd)

else:

start_yemian=input("請輸入開始爬去的頁數")

end_yemian=input("請輸入結束爬去的頁數")

count=int(start_yemian)

while count<= int(end_yemian):

start_yemian_html="http://sou.zhaopin.com/jobs/searchresult.ashx?jl=全國%2B廣東&p="+str(count)

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36"}

resp = requests.get(start_yemian_html,headers=headers)

soup = bs(resp.text,"html.parser")

#獲取工作地點

place=soup.find_all(attrs={"class":"newlist"})

#       place=soup.find_all(attrs={"class":"newlist_list_content"})

for i in place:

#工作名稱

zwmcold1 = i.find(attrs={"class":"zwmc"}).get_text()

zwmc2 = zwmcold1.replace("\n"," ")

zwmc3 = zwmc2.replace(" ","")

#公司名稱

gsmc1 = i.find(attrs={"class":"gsmc"}).get_text()

gsmc = gsmc1.replace("\n"," ")

#職位薪水

zwxz1 = i.find(attrs={"class":"zwyx"}).get_text()

zwxz = zwxz1.replace("\n"," ")

#工作地點


gzdd1 = i.find(attrs={"class":"gzdd"}).get_text()

gzdd = gzdd1.replace("\n"," ")

writetosjk(zwmc3,gsmc,zwxz,gzdd)

print("第 %s 頁爬取完畢並且存入數據庫"%(count))

count+=1

 注意可能存在的問題:

我們可以查詢到網頁頁面的編碼,一般爲UTF-8。 我們把數據存入數據庫的時候。,默認的數據庫(MYSQL)編碼爲Latin1,不支持中文。所以要把編碼改爲UTF-8, 我這邊修改了UTF-8編碼還是報錯:

ebb80beb93c18fcf4d019deca6feccd6.png最後百度發現問題,UTF8暫用3個字節空間。移動設備上有些標籤符號。暫用4個字節空間,所以需要把編碼改爲UTF8MB4


sudo find / -name my.cnf 找到配置文件(使用配置文件修改更快)

在原文中添加以下內容:(mysql和client是原來配置文件裏面沒有的需要自己手動添加)

[client] default-character-set = utf8mb4 [mysql]default-character-set = utf8mb4 [mysqld]character-set-client-handshake = FALSEcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'

最後解決。


OK 接下來測試下程序

fccb9a643f1d16f6a1d4200356d88558.png

392e568a8413b57f420144a0693afe82.png


















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章