溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python爬蟲指的是什么

發(fā)布時間:2020-08-03 17:07:59 來源:億速云 閱讀:142 作者:清晨 欄目:編程語言

小編給大家分享一下Python爬蟲指的是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家學習,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學習方法吧!

什么是爬蟲,講點通俗易懂的,爬蟲就是爬取網(wǎng)頁,從中按照一定規(guī)則提取信息,重復以上過程自動化重復完成的程序。

爬蟲的核心

一只爬蟲,第一件事情就是要爬取網(wǎng)頁,這里主要是指獲取網(wǎng)頁的源代碼。在網(wǎng)頁的源代碼里,會含有我們所需要的信息,而我們要做的事情就是從源代碼中將這些信息提取出來。

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

我們可以使用這些庫來發(fā)送 HTTP 請求,獲取響應的數(shù)據(jù),得到響應之后,我們只需要解析其中 body 部分的數(shù)據(jù),就可以獲得網(wǎng)頁的源代碼。

獲取到源代碼以后,我們接下來的工作就是解析源代碼,從中提取出我們需要的數(shù)據(jù)。

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

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

用于提取數(shù)據(jù)的類庫有 Beautiful Soup 、 pyquery 、 lxml 等等。使用這些庫,我們可以高效快速地從 HTML 中提取網(wǎng)頁信息,如節(jié)點的屬性、文本值等。

從源代碼中提取到數(shù)據(jù)以后,我們會對數(shù)據(jù)進行保存,這里的保存形式多種多樣,可以直接保存成 txt 、 json 、 Excel 文件等等,也可以保存至數(shù)據(jù)庫,如 Mysql 、 Oracle 、 SQLServer 、 MongoDB 等等。

抓取的數(shù)據(jù)格式

一般而言,我們抓取到的都是 HTML 的網(wǎng)頁源代碼,這個是我們看得到的、常規(guī)的、直觀的網(wǎng)頁信息。

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

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

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

現(xiàn)代前端頁面爬取

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

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

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

<!DOCTYPE html>
<html 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 
      ontinue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
    <script src=/js/chunk-vendors.84ee7bec.js></script>
    <script src=/js/app.4170317d.js></script>
  </body>
</html>

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

body 節(jié)點里面只有一個 id 為 app 的節(jié)點,但是需要注意在 body 節(jié)點的最后引入了 JavaScript 文件,它們負責整個網(wǎng)頁的渲染。

在瀏覽器打開這個頁面后,首先會加載這個 HTML 的內(nèi)容,接著會發(fā)現(xiàn)有 JavaScript 的腳本文件加載,獲取到這些腳本文件后,開始執(zhí)行其中的代碼,而 JavaScript 腳本文件則會修改整個頁面的 HTML 代碼,向其中添加節(jié)點,從而完成整個頁面的渲染。

但是當我們使用請求庫去請求這個頁面的時候,只能獲得當前的 HTML 的內(nèi)容,它并不會去幫我們獲取這個 JavaScript 腳本文件并且?guī)臀覀儓?zhí)行這個腳本文件渲染整個 HTML DOM 節(jié)點,我們當然也就看不到瀏覽器當中看到的內(nèi)容。

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

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

以上是Python爬蟲指的是什么的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI