爬蟲之抓取 Boss直聘 資料到 Excel 中
宣告:此部落格爬取的資料只為學習爬蟲使用,絕非廣告
程式介紹
檔案目錄
├── Zhipin_spider # 資料夾
│ ├── spider_main.py # 排程器。是爬蟲的入口,管理各個類
│ ├── html_downloader.py # 下載器,負責網頁內容的下載
│ ├── html_parser.py # 解析器,負責解析資料,獲取有價值的資料
│ └── html_outputer.py # 輸出,將獲取到的資料輸出
│
使用依賴
- 採用
Requests
請求資料 - 使用
BeautifulSoup
解析資料 - 使用
xlsxwriter
Excel
檔案中
書寫流程
排程器 –> 網頁下載器 –> 網頁解析器 –> 輸出
每個模組介紹
網頁下載器
- 使用
Requests
框架請求資料 - 新增
header
模擬瀏覽器訪問 - 使用
try...except...
捕捉異常
網頁下載器核心程式碼
# -*- coding: utf-8 -*-
# @Time : 2018/1/7 上午11:46
# @Author : Mazy
# @File : html_downloader.py
# @Software: PyCharm
import requests
import ssl
class HtmlDownloader(object):
# 通過 url + 頁碼 + 關鍵詞 獲取資料
def get_page(self, baseUrl, page_num, keyword):
try:
#
param = {"query": keyword, "city": "101010100", "page": page_num}
# 設定請求頭,模擬瀏覽器訪問
header = {
'User-Agent': r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)'
r'Chrome/45.0.2454.85 Safari/537.36 115Browser/6.0.3',
'Referer': r'http://www.zhipin.com/job_detail/',
'Connection': 'keep-alive'
}
result = requests.get(baseUrl, params=param, headers=header)
# print(result.text)
return result.text
except Exception as err:
print(err)
print("Boss直聘爬取失敗")
return None
網頁解析器
- 使用
BeautifulSoup
提取資料 - 將每一條資料儲存到列表中,再將每一頁的資料用一個大的列表包裹,形成一個二維列表
網頁解析器核心程式碼
# -*- coding: utf-8 -*-
# @Time : 2018/1/7 上午11:47
# @Author : Mazy
# @File : html_parser.py
# @Software: PyCharm
from bs4 import BeautifulSoup
class HtmlParser(object):
def parse(self, html_content):
if html_content is None:
return None
soup = BeautifulSoup(html_content, 'html.parser')
# 獲取公司的列表
companies = soup.find('div', class_='job-list').select('ul > li')
results = []
for com in companies:
res = self.get_one_company(com)
results.append(res)
return results
def get_one_company(self, soup):
company_soup = soup.find('div', class_="info-company")
# company name
com_name = company_soup.find('a').text
# company desc
com_desc = company_soup.find('p').text
primary_soup = soup.find('div', class_="info-primary")
# job name
all = primary_soup.find('h3', class_="name").a.text
sala = primary_soup.find('h3', class_="name").a.span.text
job = all.replace(sala, "")
# salary
salary = primary_soup.find('h3', class_="name").a.span.text
# conpany require
job_require = primary_soup.find('p').text
return [com_name, job, salary, job_require, com_desc]
資料輸出到 Excel 檔案中
- 1、使用
xlwt -> Workbook
框架將資料儲存到Excel
- 2、使用
xlsxwriter
框架將資料儲存到Excel
- 以上方法【二選一】
輸出核心程式碼
# -*- coding: utf-8 -*-
# @Time : 2018/1/7 上午11:47
# @Author : Mazy
# @File : html_outputer.py
# @Software: PyCharm
from xlwt import Workbook, Worksheet
import xlsxwriter
class HtmlOutputer(object):
# 使用 xlwt 將資料存到 Excel
def save_to_excel(self, results, tag_name, file_name):
book = Workbook(encoding="utf-8")
tmp = book.add_sheet('sheet')
times = len(results) + 1
for i in range(times):
if i==0 :
for tag_name_i in tag_name:
tmp.write(i, tag_name.index(tag_name_i), tag_name_i)
else:
for tag_list in range(len(tag_name)):
tmp.write(i, tag_list, str(results[i-1][tag_list]))
book.save(r'/Users/bai/Desktop/%s.xls' % file_name)
# 使用 xlsxwriter 將資料存到 Excel
def save_to_excel_other_way(self, results, tag_names, file_name):
book = xlsxwriter.Workbook(R'/Users/bai/Desktop/%s.xls' % file_name)
tmp = book.add_worksheet()
row_num = len(results)
for i in range(1, row_num+1):
if i == 1:
tag_pos = 'A%s' % i
tmp.write_row(tag_pos, tag_names)
else:
con_pos = 'A%s' % i
content = results[i-1]
tmp.write_row(con_pos, content)
book.close()
排程器
- 主要負責管理 網頁下載器、網頁解析器和輸出之間的排程
排程器核心程式碼
# -*- coding: utf-8 -*-
# @Time : 2018/1/7 上午11:47
# @Author : Mazy
# @File : spider_main.py
# @Software: PyCharm
from Zhipin_spider import html_downloader, html_parser, html_outputer
import time
import random
class BOSS_Main(object):
def __init__(self):
self.downloader = html_downloader.HtmlDownloader()
self.parser = html_parser.HtmlParser()
self.outputer = html_outputer.HtmlOutputer()
def start(self,keyword, baseURL, page_count):
all_coms = []
for i in range(1, page_count+1):
# 新增延遲
time.sleep(random.uniform(1, 5))
# 獲取網頁內容
content = self.downloader.get_page(baseURL, i, keyword)
# 解析資料
com_results = self.parser.parse(content)
print("正在抓取第 %d 頁資料, 有 %d 條資料" % (i, len(com_results)))
# 儲存資料到列表
for com in com_results:
all_coms.append(com)
print(len(all_coms))
print(all_coms)
tag_name = ['公司名稱', '職位名稱', '工資', '所需學歷', '公司介紹']
# self.outputer.save_to_excel(all_coms, tag_name, "test")
# 輸出
self.outputer.save_to_excel_other_way(all_coms, tag_name, "boss1")
# 程式的入口
if __name__ == "__main__":
keyword = input('請輸入抓取的關鍵詞:\n')
page_counts = input("請輸入抓取總頁數:\n")
baseURL = "http://www.zhipin.com/job_detail/"
bosszp = BOSS_Main()
bosszp.start(keyword, baseURL, int(page_counts))
DEMO傳送門
相關推薦
爬蟲之抓取 Boss直聘 資料到 Excel 中
宣告:此部落格爬取的資料只為學習爬蟲使用,絕非廣告 程式介紹 檔案目錄 ├── Zhipin_spider # 資料夾 │ ├── spider_main.py # 排程器。是
爬蟲進階:Scrapy抓取boss直聘、拉勾心得經驗
關於使用Scrapy的體會,最明顯的感受就是這種模板化、工程化的腳手架體系,可以說是拿來即可開箱便用,大多僅需按一定的規則套路配置,剩下的就是專注於編寫跟爬蟲業務有關的程式碼。絕大多數的反反爬蟲策略,大多有以下幾種: 忽略robots.txt協議 新增隨機請求
Pyhton抓取BOSS直聘職位描述和資料清洗,很簡單沒有那麼難
一、抓取詳細的職位描述資訊 詳情頁分析 Python學習資料或者需要程式碼、視訊加Python學習群:960410445 在詳情頁中,比較重要的就是職位描述和工作地址這兩個 由於在頁面程式碼中崗位職責和任職要求是在一個 div 中的,所以在抓的時候就不太好分,
python3 + scrapy 抓取boss直聘崗位
前言:本文為記錄工程實現過程,會引用其他文章,如果又不清晰的地方可以檢視原文章。本文主旨在於記錄,所以部分作者瞭解的部分可能不會介紹而直接操作,如果有疑問請留言或者直接使用搜索引擎。 引用: windows安裝scrapy 建立第一個scrapy工程 一、安裝scrapy 管理員模式開啟power
Python的scrapy之爬取boss直聘
在我們的專案中,單單分析一個51job網站的工作職位可能爬取結果不太理想,所以我又爬取了boss直聘網的工作,不過boss直聘的網站一次只能展示300個職位,所以我們一次也只能爬取300個職位。 jobbossspider.py: # -*- coding: utf-8 -*- import
Python的scrapy之爬取boss直聘網站
在我們的專案中,單單分析一個51job網站的工作職位可能爬取結果不太理想,所以我又爬取了boss直聘網的工作,不過boss直聘的網站一次只能展示300個職位,所以我們一次也只能爬取300個職位。 jobbossspider.py: # -*- coding: utf-8 -*- import scrapy
簡易python爬蟲爬取boss直聘職位,並寫入excel
python爬蟲寫入excel1,默認城市是杭州,代碼如下#! -*-coding:utf-8 -*-from urllib import request, parsefrom bs4 import BeautifulSoupimport datetimeimport xlwt starttime = dat
[python爬蟲]爬取boss直聘並且存到Mysql資料庫裡
導包 import chardet,re,json,pymysql from urllib import request,parse from piaot import * Mysql def sql(sql_z): # 開啟資料庫連線
python爬蟲之抓取代理伺服器IP
轉載請標明出處: http://blog.csdn.net/hesong1120/article/details/78990975 本文出自:hesong的專欄 前言 使用爬蟲爬取網站的資訊常常會遇到的問題是,你的爬蟲行為被對方識別了,對方把你的IP遮蔽了,返回
python--boss直聘資料視覺化
python 資料視覺化 本文中主要使用matplotlib和Pandas對資料進行視覺化 資料來源:爬取的BOOS直聘資料分析資料 資料展示 本文中針對以上資料,對salary,company_info,work_time,education這幾個資訊進行資料視覺化,做出
Python網路爬蟲之抓取訂餐資訊
本文以大眾點評網為例,獲取頁面的餐館資訊,以達到練習使用python的目的。 1.抓取大眾點評網中關村附近的餐館有哪些 import urllib.request import re def fetchFood(url):
WireShark學習之抓取和分析HTTP資料包
1. 設定過濾條件 - 指定網路協議http 2. 開啟Chrome瀏覽器輸入網址 - 在瀏覽器輸入https://sspai.com/post/30292 3. 在抓獲得包中得到兩個資料包,分別是HTTP請求以及HTTP響應
Python爬蟲之抓取貓眼電影TOP100
執行平臺:windowsPython版本:Python 3.7.0IDE:Sublime Text瀏覽器:Chrome瀏覽器思路: 1.檢視網頁原始碼 2.抓取單頁內容 3.正則表示式提取資訊
python爬取boss直聘原始碼
說明:登入boss直聘、獲取推薦牛人資訊、篩選牛人,然後進行溝通,目前只能做到溝通,還不能進行繼續交流。 圖片驗證碼目前只能將驗證碼圖片儲存到本地,通過圖片管理器開啟之後手工輸入。 一次登入後,可在會話失效前多次執行牛人推薦溝通 import requests from
pyspider爬蟲框架之boss直聘招聘資訊爬取
需求 需求: 1、 遍歷首頁所有職位分類 2、 點選進入職位分類詳情頁,按照地區抓取,職位名稱,月薪,經驗年限要求,學歷要求,招聘公司,所屬行業,輪次,人數(規模),釋出時間 3、 點選進入職位詳情頁,抓取該職位的技能標籤。 程式碼 程式碼有註釋
BOSS直聘網站資料分析崗位資訊爬取
感謝BOSS直聘上比較可靠的招聘資訊,讓我們有機會對資料分析崗位進行簡單的爬取與分析。 語言:Python3 目錄 一、資訊爬取 二、資料分析 2.1 資料解析 2.2 資料分析 2.2.1 資料清洗
python3.X爬蟲針對拉鉤,直聘,大街等招聘網站的簡歷爬蟲抓取心得總結一 (ide pycharm執行)
在面對登陸問題的網站例如向拉鉤,大街網,直聘等需要進行模擬登陸的問題, 這裡我才用的selenium+chrome的方式,進行獲取cookies 然後轉化成requests中的cookie 再進行具體的內容的抓取 這裡裡面遇到問題如下:
“鼓上蚤”帶你實戰之Boss直聘爬蟲
1 . 前言2 . 資料需求3 . 分析頁面1前言目前來說,在網際網路招聘界有一個“蓬勃生長”的“招聘小巨頭”,也就是我們這期被爬的第一“男豬腳”----Boss直聘logo.png,為什麼說它是小巨頭呢,也是因為其成立於2014年,短短兩三年的時間,憑藉其“讓Boss主動找你”的職業
python爬蟲之利用scrapy框架抓取新浪天氣資料
scrapy中文官方文件:點選開啟連結Scrapy是Python開發的一個快速、高層次的螢幕抓取和web抓取框架,用於抓取web站點並從頁面中提取結構化的資料。Scrapy用途廣泛,可以用於資料探勘、監測和自動化測試,Scrapy吸引人的地方在於它是一個框架,任何人都可以根據
java 開發用到網路爬蟲,抓取汽車之家網站全部資料經歷
經歷了兩個禮拜的折騰,某某知名網站的資料終於到手了。犯罪沒被發現這種心情感覺很爽。 說一下我的犯罪經歷,之前公司總是抓取某某網站資料,可能是被發現了。某某網站改變了策略。通過各種技術終止了我們的行為,導致我們的抓取功能報錯,逐步跟蹤,發現我們之前是在人家的網站,通過Webh