【Python爬蟲實戰】為啥學Python,BOSS告訴你

目標:獲取BOSS直聘上武漢Python工資情況

url=「【武漢Python招聘】2017年武漢Python最新人才招聘信息-BOSS直聘」

環境:Python3.5,Pycharm

需要提前安裝的庫:requests,BeautifulSoup4,lxml

1、首先打開目標網頁,尋找我們需要的headers

F12——F5——Network,招聘網站反爬還是有的,有次爬拉鉤就被封了。。

2、尋找我們需要的信息

可以發現工資「9K-16K」在「<span class="red">9K-16K</span>」下,待會使用BeautifulSoup4就會很簡單。

現在準備工作都已經做完了,下面開始寫代碼了。

3、寫代碼

import requestsfrom bs4 import BeautifulSoup

首先引入模塊

url = http://www.zhipin.com/job_detail/?query=Python&scity=101200100&source=2headers = { Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8, Accept-Language:zh-CN,zh;q=0.8, Host:www.zhipin.com, User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36,}

在請求加上頭信息,偽裝成瀏覽器訪問

a = requests.get(url,headers=headers)soup = BeautifulSoup(a.text,lxml)

下一步使用requests獲取網頁信息,定製請求頭。關於 BeautifulSoup的解析器,官方這樣說

BeautifulSoup 第一個參數應該是要被解析的文檔字元串或是文件句柄,第二個參數用來標識怎樣解析文檔.如果第二個參數為空,那麼Beautiful Soup根據當前系統安裝的庫自動選擇解析器,解析器的優先數序: lxml, html5lib, Python標準庫.在下面兩種條件下解析器優先順序會變化:

  • 要解析的文檔是什麼類型: 目前支持, 「html」, 「xml」, 和 「html5」
  • 指定使用哪種解析器: 目前支持, 「lxml」, 「html5lib」, 和 「html.parser」

現在我們已經獲得了我們想要的網頁數據,下一步就是從中找出工資情況。

先前一經發現工資的位置<span class="red">9K-16K</span>

b = soup.find_all("span",class_="red")print(b)

[<span class="red">10K-15K</span>, <span class="red">9K-16K</span>, <span class="red">10K-20K</span>, <span class="red">10K-20K</span>, <span class="red">6K-12K</span>, <span class="red">8K-16K</span>, <span class="red">15K-30K</span>, <span class="red">10K-15K</span>, <span class="red">8K-11K</span>, <span class="red">8K-16K</span>, <span class="red">15K-16K</span>, <span class="red">12K-18K</span>, <span class="red">10K-15K</span>, <span class="red">8K-15K</span>, <span class="red">8K-15K</span>]

結果中包含有標籤,BeautifulSoup提供一種很簡潔的辦法 get_text()

C:Python35python.exe D:/Backup/桌面/77/爬蟲.pyTraceback (most recent call last): File "D:/Backup/桌面/77/爬蟲.py", line 18, in <module> print(b.get_text())AttributeError: ResultSet object has no attribute get_text

可是直接使用卻出錯,提示「ResultSet object has no attribute get_text」

只好換一種方法

b = soup.find_all("span",class_="red")#print(b)for i in b: c = i.get_text("|", strip=True) print(c)

得到結果

這只是抓取了一頁的數據,有15個,其實數據太少,但是該如何進行多頁爬取?粗略看看工資基本在10K左右,那麼運營崗位工資如何。

只需修改url就可以,結果為:

簡直沒法比,作為一個文科生,不會什麼特長,想養活自己還是學點技術吧。

完整代碼 github.com/zhangslob/-P

小問題:為什麼直接使用「print(b.get_text())」會出錯??如何進行多頁爬取?想對這兩組數據進行可視化,如何處理?

(這問題我真的不會)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------開了個專欄「Python網路爬蟲經驗分享」,想分享下自己的學習過程知乎專欄

下一期準備用爬蟲「輪逛乎」,希望更多朋友可以交流,用半天寫下這個篇文章,有多半時間都是在錯誤和查詢文檔中度過的,有人交流會不會好些呢~~

推薦閱讀:快速上手 - Requests 2.10.0 文檔,Beautiful Soup 4.2.0 文檔

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

作者:張世潤

博客專欄:崔斯特的博客專欄

知乎專欄:Python練習題介紹

大家也可以加小編微信:tszhihu (備註:Python),拉大家到 Python愛好者社區 微信群,可以跟各位老師互相交流。謝謝。

也可以關注微信公眾號:Python愛好者社區


推薦閱讀:

MATLAB Graph Object(1): 爬數據
python是否可對進行了blob加密的視頻進行爬取操作呢?
網易雲課堂Excel課程爬蟲思路
拿諾貝爾獎可以長壽?——從爬蟲到簡單數據分析
Python 網路爬蟲——如何在登陸情況下下載文檔

TAG:Python | 网页爬虫 |