【Python行業分析2】BOSS直聘招聘信息獲取之爬蟲工具分析

文中使用的組件庫僅限於Python語言,由於最近收到一些同學的留言說,按照網上的教程一步一步的學習,卻頻繁的出現報錯,很多情況是因爲版本不一致的問題導致的,我會在文中描述示例的庫版本號,新手同學還需多加留意。

爬蟲程序分析

我們可以使用很多方式來完成一個爬蟲程序的編寫,可以使用比較完善的爬蟲框架(博主是並沒有使用過這方面的框架,只會些小打小鬧的,所以不過多描述),也可以使用request、aiohttp、BeautifulSoup庫實現基礎的爬蟲功能,我們後面的學習也是基於這幾個庫迭代完成的。

Python主流的爬蟲框架

你以爲Python爬蟲框架只有Scrapy麼,Python中還有些主流的爬蟲框架我們在此簡答介紹下

1.Scrapy

Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。。用這個框架可以輕鬆爬下來如亞馬遜商品信息之類的數據。

項目地址:https://scrapy.org/

在這裏插入圖片描述

2.PySpider

pyspider 是一個用python實現的功能強大的網絡爬蟲系統,能在瀏覽器界面上進行腳本的編寫,功能的調度和爬取結果的實時查看,後端使用常用的數據庫進行爬取結果的存儲,還能定時設置任務與任務優先級等。

項目地址:https://github.com/binux/pyspider

在這裏插入圖片描述

3.Crawley

Crawley可以高速爬取對應網站的內容,支持關係和非關係數據庫,數據可以導出爲JSON、XML等。

項目地址:http://project.crawley-cloud.com/

在這裏插入圖片描述

4.Portia

Portia是一個開源可視化爬蟲工具,可讓您在不需要任何編程知識的情況下爬取網站!簡單地註釋您感興趣的頁面,Portia將創建一個蜘蛛來從類似的頁面提取數據。

項目地址:https://github.com/scrapinghub/portia

在這裏插入圖片描述

5.Newspaper

Newspaper可以用來提取新聞、文章和內容分析。使用多線程,支持10多種語言等。

項目地址:https://github.com/codelucas/newspaper

在這裏插入圖片描述

6.Beautiful Soup

Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫.它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式.Beautiful Soup會幫你節省數小時甚至數天的工作時間。

項目地址:https://www.crummy.com/software/BeautifulSoup/bs4/doc/

在這裏插入圖片描述

7.Grab

Grab是一個用於構建Web刮板的Python框架。藉助Grab,您可以構建各種複雜的網頁抓取工具,從簡單的5行腳本到處理數百萬個網頁的複雜異步網站抓取工具。Grab提供一個API用於執行網絡請求和處理接收到的內容,例如與HTML文檔的DOM樹進行交互。

項目地址:http://docs.grablib.org/en/latest/#grab-spider-user-manual

在這裏插入圖片描述

8.Cola

Cola是一個分佈式的爬蟲框架,對於用戶來說,只需編寫幾個特定的函數,而無需關注分佈式運行的細節。任務會自動分配到多臺機器上,整個過程對用戶是透明的。

項目地址:https://github.com/chineking/cola

基於Cola實現的爬蟲位於contrib/目錄下。目前實現了四個爬蟲:

  • wiki:維基百科。
  • weibo:新浪微博爬蟲。從初始用戶出發,然後是其關注和粉絲,依次類推,抓取指定個數的新浪微博用戶的微博、個人信息、關注和粉絲。其中,用戶微博只獲取了內容、讚的個數、轉發和評論的個數等等,而沒有具體去獲取此微博被轉發和評論的內容。
  • generic(unstable):通用爬蟲,只需配置,而無需修改代碼。目前Cola實現了一個抽取器(cola/core/extractor),能夠從網頁正文中自動抽取主要內容,即去除類似邊欄和底腳等內容。但是,此抽取器目前準確度還不夠,效率也不夠高,所以需要謹慎使用。
  • weibosearch(unstable):新浪微博搜索的爬蟲。這個爬蟲使用cola.core.opener.SpynnerOpener,基於spynner實現了一個Opener能夠執行JavaScript和Ajax代碼。目前這個爬蟲存在的問題是:新浪微博可能會將其識別成機器人,因此有可能會讓輸入驗證碼。

到此,想要學框架的同學可以準備關閉網頁了。

先了解下後面爬取需要的模塊

Requests 模塊

幫助文檔:https://requests.readthedocs.io/en/master/

雖然Python的標準庫中 urllib2 模塊已經包含了平常我們使用的大多數功能,但是它的 API 使用起來讓人感覺不太好,而 Requests 自稱 “HTTP for Humans”,說明使用更簡潔方便。

Requests 繼承了urllib2的所有特性。Requests支持HTTP連接保持和連接池,支持使用cookie保持會話,支持文件上傳,支持自動確定響應內容的編碼,支持國際化的 URL 和 POST 數據自動編碼。

核心功能:

  • Keep-Alive & 連接池
  • 國際化域名和 URL
  • 帶持久 Cookie 的會話
  • 瀏覽器式的 SSL 認證
  • 自動內容解碼
  • 基本/摘要式的身份認證
  • 優雅的 key/value Cookie
  • 自動解壓
  • Unicode 響應體
  • HTTP(S) 代理支持
  • 文件分塊上傳
  • 流下載
  • 連接超時
  • 分塊請求
  • 支持 .netrc

Requests 支持 Python 2.6—2.7以及3.3—3.7,而且能在 PyPy 下完美運行。

簡單的頁面獲取

我們來嘗試獲取BOSS的首頁。

# Python3.7
# requests==2.23.0
import requests


def run():
    req = requests.get('https://www.zhipin.com')
    if req.status_code == 200:
        print(req.content.decode("utf-8"))


if __name__ == "__main__":
    run()

BOSS首頁獲取到的部分信息
在這裏插入圖片描述

aiohttp 模塊

aiohttp是一個爲Python提供異步HTTP 客戶端/服務端編程,基於asyncio(Python用於支持異步編程的標準庫)的異步庫。由於是基於asyncio的,所以支持 Python 3.5+,如果你使用的是Python 3.4, 請將await替換成yield from,將async 替換成帶有 @corotine裝飾器的def。

幫助文檔:https://docs.aiohttp.org/en/stable/

核心功能:

  • 同時支持客戶端使用和服務端使用。
  • 同時支持服務端WebSockets組件和客戶端WebSockets組件,開箱即用。
  • web服務器具有中間件,信號組件和可插拔路由的功能。

簡單的頁面獲取

我們還是來獲取BOSS的首頁。

# Python3.7
# aiohttp==3.6.3
import aiohttp


async def run():
    async with aiohttp.ClientSession() as session:
        async with session.get('https://www.zhipin.com') as resp:
            assert resp.status == 200
            print(await resp.text())


if __name__ == "__main__":
    asyncio.run(run())

BOSS首頁獲取到的部分信息
在這裏插入圖片描述

bs4模塊

Beautiful Soup 4.4.0 文檔

Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫。
它能夠通過你喜歡的轉換器實現慣用的文檔導航,查找,修改文檔的方式。Beautiful Soup會幫你節省數小時甚至數天的工作時間。

  • Beautiful Soup 4 支持 Python2.x 和Python3.x
  • Beautiful Soup3 支持 Python2.x
  • Beautiful Soup 4兼容Beautiful Soup3的功能

幫助文檔:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

簡單的頁面數據提取

我們還是來提取BOSS的title。

# Python3.7
# requests==2.23.0
import requests


def run():
    req = requests.get('https://www.zhipin.com')
    if req.status_code == 200:
        content = req.content.decode("utf-8")
        content = bs(content, "html.parser")
        print(content.find("title").text)


if __name__ == "__main__":
    run()

在這裏插入圖片描述

BOSS招聘信息爬取

到此我們需要的基本工具就介紹完了,點波關注,後面會繼續分享 如何將這些工具運用到實戰中。

微信搜一搜關注博主領取更多學習諮詢在這裏插入圖片描述

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