零基礎學 Python 爬蟲 I:了解爬蟲基礎

2021-02-23 高級農民工

人生苦短,我用 Python

引言

各位同學大家好,好久不見(可能只有一兩天沒見:囧)~~~

先講一件事情,昨天為啥沒更新。

emmmmmmmmm,當然是因為加班啦,快到年底了,公司項目比較忙,最近的更新頻率會有下降,請各位海涵。

廢話不多說,開始今天的正題,從題目大家應該已經猜到了,小編要開始更新一個新的系列《小白學 Python 爬蟲》,介於大家水平參差不齊,建議沒有 Python 基礎第一次接觸的同學先看下小編之前更新的《小白學 Python 系列》,大致了解下 Python 的語法規則以及一些基礎用法。

先自己吹一波水,這個系列小編計劃做成長期更新系列,目前 Python 爬蟲涉及到的第三方的類庫有些多,還會有很多有關 web 編程方面的基礎知識,因面向的群體主要是小白,這些內容都需要一一介紹,這會是一個大的系列。額,遠超之前的 Python 基礎。

額,忘了件事兒,再加一句題外話,最近公眾號後臺留言有點略多,很多同學的問題來不及回復就被留言衝的看不到了,這裡請大家有問題可以添加小編的個人微信:allen_6174(放心加,這個是小編的個人生活微信號,和工作號是分開的)。

算了,順便再打個廣告吧:本爬蟲系列文章後續將於公眾號首發,個人博客站次日同步,第三方博客平臺不定期同步,泥萌要不要關注我一下呢?

什麼是爬蟲?

不管是作為程式設計師還是小白,對爬蟲這個詞應該都不陌生,畢竟最近也發生了很多事情,很多人因為某些事情都進去了,具體情況我就不提了,容易被和諧。有想知道的同學可以翻一翻我之前公眾號轉的一篇文章《只因寫了一段爬蟲,公司200多人被抓!》。最近的網絡報導此類的新聞還有很多。

在正式內容開始之前,提醒各位讀者敬畏法律,熱愛生活。

老規矩,先百度一波看看百度釋義:

網絡爬蟲(又稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取全球資訊網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。

講點接地氣的就是我們把平時使用的網絡看成是一張大蜘蛛網,每個站點看做是這張網上面的一個一個的節點,爬蟲好比是一隻蜘蛛,在這張網上面按照一定的或者已經設計好的路線,找到目標節點獲取所需資源。

為什麼使用爬蟲

平時我們在上網的時候,看到一些感興趣的網絡資源,可以使用複製黏貼的方式將這些資源下載回來,比如看知乎的時候,一些回答很精彩的高贊回答,數據量小的時候,我們動動滑鼠右鍵也就搞定了,但是如果這種數據量非常大,有時候可以大到超出你的想像,再用滑鼠右鍵複製黏貼就有些捉襟見肘了。

這時,我們就需要勤勞的爬蟲出馬了,爬蟲這種「生物」,可以全天候24小時候不間斷工作,只需提供必要的網絡和電力,就可以一直勤勞的工作下去,讓你解放雙手,再也無需人工使用 CV 大法了。

可以看出,爬蟲非常適合幫我們做兩類事情:

大量數據的提取,在一定規則條件下。

完全自動化,無需人工過多幹預。

想像一下,當老闆讓你搜索某類信息時,寫一隻勤勞的小爬蟲,自己在旁邊泡上一杯清茶,拿起手機開始愉快的玩耍,時不時的看這隻爬蟲有沒有完成工作,這場景一下讓我想起了萬惡的資本家壓榨勞動力。

爬蟲的核心

什麼是爬蟲,講點通俗易懂的,爬蟲就是爬取網頁,從中按照一定規則提取信息,重複以上過程自動化重複完成的程序。

一隻爬蟲,第一件事情就是要爬取網頁,這裡主要是指獲取網頁的原始碼。在網頁的原始碼裡,會含有我們所需要的信息,而我們要做的事情就是從原始碼中將這些信息提取出來。

我們請求網頁的時候, Python 為我們提供了很多庫來做這件事情,比如官方提供的 urllib ,以及第三方提供的 requests 、 Aiohttp 等。

我們可以使用這些庫來發送 HTTP 請求,獲取響應的數據,得到響應之後,我們只需要解析其中 body 部分的數據,就可以獲得網頁的原始碼。

獲取到原始碼以後,我們接下來的工作就是解析原始碼,從中提取出我們需要的數據。

提取數據最基礎也是最常用的是使用正則表達式的方式的,但是這種方式比較複雜,也比較容易出錯,不過不得不說,一個正則表達式寫的非常厲害的人,完全用不著下面的這些解析類庫,這是一個萬能的方法。

悄悄的說一句,小編的正則表達式寫的也不好,才會使用到這些由第三方提供的類庫。

用於提取數據的類庫有 Beautiful Soup 、 pyquery 、 lxml 等等。使用這些庫,我們可以高效快速地從 HTML 中提取網頁信息,如節點的屬性、文本值等。

從原始碼中提取到數據以後,我們會對數據進行保存,這裡的保存形式多種多樣,可以直接保存成 txt 、 json 、 Excel 文件等等,也可以保存至資料庫,如 Mysql 、 Oracle 、 SQLServer 、 MongoDB 等等。


抓取的數據格式

一般而言,我們抓取到的都是 HTML 的網頁原始碼,這個是我們看得到的、常規的、直觀的網頁信息。

但是有些信息,並不是直接和 HTML 一起返回至網頁的,會存在各種各樣的 API 接口,這種接口返回的數據現在大多數是 JSON 的格式,也有一些會返回 XML 的數據格式,還會有一些個別的奇葩的接口直接返回程序猿自定義的字符串。這種 API 數據接口就需要具體問題具體分析了。

還有一些信息,比如各大圖片站、視頻站(如抖音、 B站),我們想要爬取的信息是圖片或者視頻,這些信息是已二進位的形式存在的,我們需要將這些二進位的數據爬取下來再進行轉儲。

此外,我們還能抓取到一些資源文件,如 CSS 、 JavaScript 等腳本資源,有的還會有一些 woff 等字體信息。這些信息是一個網頁組成不可或缺的元素,只要瀏覽器能訪問到的,我們都可以將其爬取下來。

現代前端頁面爬取

今天核心內容來了!!!

很多時候,我們使用 HTTP 請求庫爬取網頁原始碼時,爬取到的信息和我們在網頁上看到的信息完全不一樣,只有短短的幾行。

這是因為最近這幾年,前端技術突飛猛進,大量的採用前端模塊化工具來構建前端頁面,比較常用的框架有 Vue 、 React 等等。

導致我們獲取到的網頁只有一個空殼子,例如這種:

<!DOCTYPE html>
<html lang="en" style="background-color: #26282A; height: 100%">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>演示項目</title>
</head>
<style>
html,
body,
#app {
height: 100%
}
</style>
<body>
<noscript>
<strong>We're sorry but xxxxxx doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>

<script src=/js/chunk-vendors.84ee7bec.js></script>
<script src=/js/app.4170317d.js></script>
</body>
</html>

代碼來源是博主平時做的一些小東西,其中博主已經省略大量引入的 JavaScript。

body 節點裡面只有一個 id 為 app 的節點,但是需要注意在 body 節點的最後引入了 JavaScript 文件,它們負責整個網頁的渲染。

在瀏覽器打開這個頁面後,首先會加載這個 HTML 的內容,接著會發現有 JavaScript 的腳本文件加載,獲取到這些腳本文件後,開始執行其中的代碼,而 JavaScript 腳本文件則會修改整個頁面的 HTML 代碼,向其中添加節點,從而完成整個頁面的渲染。

但是當我們使用請求庫去請求這個頁面的時候,只能獲得當前的 HTML 的內容,它並不會去幫我們獲取這個 JavaScript 腳本文件並且幫我們執行這個腳本文件渲染整個 HTML DOM 節點,我們當然也就看不到瀏覽器當中看到的內容。

這也解釋了為什麼有時我們得到的原始碼和瀏覽器中看到的不一樣。

當然,遇到這種情況也不要慌,我們還可以使用Selenium、Splash這樣的庫來實現模擬瀏覽器中的 JavaScript 渲染。

後面,我們會慢慢聊這些內容,本文主要先幫各位同學對爬蟲有一個基礎的了解,方便後續的學習。

參考:

https://cuiqingcai.com/5484.html

相關焦點

  • 適合新手學習的Python爬蟲書籍
    點擊藍字「python
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    本課程為python教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精
  • Python爬蟲免費學習教程推薦
    因此,Python爬蟲不僅僅是編程開發者應該學習的技能,更是廣大職場人重要的加分項。那麼作為零基礎小白應該如何學習Python爬蟲呢?下面老師精選了一些Python爬蟲免費學習教程推薦給大家,趕緊來一起看看吧~
  • Python爬蟲:一些常用的爬蟲技巧總結
    也差不多一年多了,python應用最多的場景還是web快速開發、爬蟲、自動化運維:寫過簡單網站、寫過自動發帖腳本、寫過收發郵件腳本、寫過簡單驗證碼識別腳本。爬蟲在開發過程中也有很多復用的過程,這裡總結一下,以後也能省些事情。
  • 一個入門級python爬蟲教程詳解
    這篇文章主要介紹了一個入門級python爬蟲教程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下
  • 10個Python爬蟲入門實例
    來源:cnblogs.com/h3zh1/p/12548946.html昨天帶夥伴們學習python
  • Python 爬蟲:8 個常用的爬蟲技巧總結!
    用python也差不多一年多了,python應用最多的場景還是web快速開發、爬蟲、自動化運維:寫過簡單網站、寫過自動發帖腳本、寫過收發郵件腳本
  • Python破解反爬蟲:最新反爬蟲有道翻譯中英文互譯破解,附代碼
    由於爬蟲的出現,導致很多網頁都設置了反爬蟲機制:常見的反爬蟲機制就是在客戶端發出請求的時候,在請求的內容中新增一些內容,而這些內容都是經過「加密的」,每次請求都是不同的,這樣就導致了很多傳統的爬蟲失效。
  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    而這裡的「技術手段」就是指網絡爬蟲。 今天,小編將與您分享一個爬蟲的基本知識和入門教程:什麼是爬蟲?網絡爬蟲,也叫作網絡數據採集,是指通過編程從Web伺服器請求數據(HTML表單),然後解析HTML以提取所需的數據。
  • 如何爬取全網1200本Python書|爬蟲實戰篇
    上次代碼沒有寫完,正好周末有時間把代碼全部完成並且存入了資料庫中,今天就給大家一步步分析一下是我是如何爬取數據,清洗數據和繞過反爬蟲的一些策略和點滴記錄。1)2).我用的是多線程爬取,把所有的url都扔到一個隊列裡面,然後設置幾個線程去隊列裡面不斷的爬取,然後循環往復,直到隊列裡的url全部處理完畢3).數據存儲的時候,有兩種思路:1).一般大型的網站都有反爬蟲策略,雖然我們這次爬的數量只有1000本書,但是一樣會碰到反爬蟲問題
  • 從零開始的python爬蟲速成指南
    在前言:最近後臺有人留言問:有沒有python爬蟲的相關教程,爬蟲不是我專業方向,很多不是很熟悉,而網上很多資料講的過於散亂,不能很好的系統性學習爬蟲,而且水平參差不齊。特委託一位熟悉爬蟲的小夥伴,幫忙把關,將網上現有資料進行整合,整理了一份相對比較系統的資料。
  • Python爬蟲基礎教學(寫給入門的新手)
    點擊藍字「python
  • Python爬蟲學到什麼程度就可以去找工作了?
    有朋友在群裡和大家討論,問的最多的問題就是,python 爬蟲學到什麼程度可以去找工作了,關於這點,和大家分享下我的理解。確立目標、了解需求首先我們要先定位自己的目標,當然我們先以爬蟲工程師來做個說明。
  • Python 爬蟲入門
    從而爬蟲工程師、數據分析師、大數據工程師的崗位也越來越受歡迎。爬蟲是 Python 應用的領域之一。有 Python 基礎對於學習 Python 爬蟲具有事半功倍的效果。就像學英語一樣,一個對英語一概不通的人聽完別人讀英語,自己也能讀出來,但要把英語讀好,學好音標非常有必要。
  • Python爬蟲入門教程:超級簡單的Python爬蟲教程
    這是一篇詳細介紹 Python 爬蟲入門的教程,從實戰出發,適合初學者。讀者只需在閱讀過程緊跟文章思路,理清相應的實現代碼,30 分鐘即可學會編寫簡單的 Python 爬蟲。爬蟲攻防戰;今天給大家講第一課了解網頁;以中國旅遊網首頁為例,抓取中國旅遊網首頁首條信息(標題和連結),數據以明文的形式出面在源碼中。
  • 零基礎不知道如何做Python爬蟲,這是一份簡單入門的教程!
    首先我們來了解爬蟲的基本原理及過程大部分爬蟲都是按「發送請求——獲得頁面——解析頁面——抽取並儲存內容」這樣的流程來進行,這其實也是模擬了我們使用瀏覽器獲取網頁信息的過程。在這部分你可以簡單了解 HTTP 協議及網頁基礎知識,比如 POSTGET、HTML、CSS、JS,簡單了解即可,不需要系統學習。
  • Python爬蟲之urllib庫—爬蟲的第一步
    爬蟲的過程亦是如此,通過對伺服器發出請求得到HTML網頁,然後對下載的網頁進行解析,得到我們想要的內容。當然,這是一個爬蟲過程的一個概況,其中還有很多細節的東西需要我們處理的,這些在後續會繼續與大家分享。 了解了爬蟲的基本過程後,就可以開始我們真正的爬蟲之旅了。
  • Python爬蟲實戰教程——爬取xkcd漫畫
    網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人),是一種按照一定的規則,自動地抓取網絡信息的程序或者腳本。doctype html><html> <head> <title>網頁的標題</title> </head> <body> 網頁主體——在瀏覽器中顯示的內容包含在這裡 </body></html>2.1 了解HTML基本組成
  • 1小時入門 Python 爬蟲
    從而爬蟲工程師、數據分析師、大數據工程師的崗位也越來越受歡迎。爬蟲是 Python 應用的領域之一。有 Python 基礎對於學習 Python 爬蟲具有事半功倍的效果。就像學英語一樣,一個對英語一概不通的人聽完別人讀英語,自己也能讀出來,但要把英語讀好,學好音標非常有必要。
  • Python 爬蟲「學前班」!學會免踩坑!
    作者 | 喵叔責編 | 胡巍巍爬蟲應用的廣泛,例如搜尋引擎、採集數據、廣告過濾、數據分析等。當我們對少數網站內容進行爬取時寫多個爬蟲還是有可能的,但是對於需要爬取多個網站內容的項目來說是不可能編寫多個爬蟲的,這個時候我們就需要智能爬蟲。