1. 程式人生 > >爬蟲之抓取 Boss直聘 資料到 Excel 中

爬蟲之抓取 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 # 排程器。是

爬蟲進階:Scrapyboss、拉勾心得經驗

關於使用Scrapy的體會,最明顯的感受就是這種模板化、工程化的腳手架體系,可以說是拿來即可開箱便用,大多僅需按一定的規則套路配置,剩下的就是專注於編寫跟爬蟲業務有關的程式碼。絕大多數的反反爬蟲策略,大多有以下幾種: 忽略robots.txt協議 新增隨機請求

PyhtonBOSS職位描述和資料清洗,很簡單沒有那麼難

一、抓取詳細的職位描述資訊 詳情頁分析 Python學習資料或者需要程式碼、視訊加Python學習群:960410445   在詳情頁中,比較重要的就是職位描述和工作地址這兩個 由於在頁面程式碼中崗位職責和任職要求是在一個 div 中的,所以在抓的時候就不太好分,

python3 + scrapy boss崗位

前言:本文為記錄工程實現過程,會引用其他文章,如果又不清晰的地方可以檢視原文章。本文主旨在於記錄,所以部分作者瞭解的部分可能不會介紹而直接操作,如果有疑問請留言或者直接使用搜索引擎。 引用: windows安裝scrapy 建立第一個scrapy工程 一、安裝scrapy 管理員模式開啟power

Python的scrapyboss

在我們的專案中,單單分析一個51job網站的工作職位可能爬取結果不太理想,所以我又爬取了boss直聘網的工作,不過boss直聘的網站一次只能展示300個職位,所以我們一次也只能爬取300個職位。 jobbossspider.py: # -*- coding: utf-8 -*- import

Python的scrapyboss網站

在我們的專案中,單單分析一個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