【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就可以,結果為:
完整代碼 https://github.com/zhangslob/-Python-Python-BOSS-/blob/master/test.py
小問題:為什麼直接使用「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 網路爬蟲——如何在登陸情況下下載文檔