日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第03讲. 原理探究,了解爬虫的基本原理

發布時間:2024/4/11 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第03讲. 原理探究,了解爬虫的基本原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.爬蟲概述

我們可以把互聯網比作一張大網,而爬蟲(即網絡爬蟲)便是在網上爬行的蜘蛛。如果把網的節點比作一個個網頁,爬蟲爬到這就相當于訪問了該頁面,獲取了其信息。可以把節點間的連線比作網頁與網頁之間的鏈接關系,這樣蜘蛛通過一個節點后,可以順著節點連線繼續爬行到達下一個節點,即通過一個網頁繼續獲取后續的網頁,這樣整個網的節點便可以被蜘蛛全部爬行到,網站的數據就可以被抓取下來了。

簡單來說,爬蟲就是獲取網頁并提取和保存信息的自動化程序,下面概要介紹一下。

2.獲取網頁

爬蟲首先要做的工作就是獲取網頁,這里就是獲取網頁的源代碼。

源代碼里包含了網頁的部分有用信息,所以只要把源代碼獲取下來,就可以從中提取想要的信息了。

前面講了請求和響應的概念,向網站的服務器發送一個請求,返回的響應體便是網頁源代碼。所以,最關鍵的部分就是構造一個請求并發送給服務器,然后接收到響應并將其解析出來,那么這個流程怎樣實現呢?總不能手工去截取網頁源碼吧?

不用擔心,Python 提供了許多庫來幫助我們實現這個操作,如 urllib、requests 等。我們可以用這些庫來幫助我們實現 HTTP 請求操作,請求和響應都可以用類庫提供的數據結構來表示,得到響應之后只需要解析數據結構中的 Body 部分即可,即得到網頁的源代碼,這樣我們可以用程序來實現獲取網頁的過程了。

3.提取信息

獲取網頁源代碼后,接下來就是分析網頁源代碼,從中提取我們想要的數據。首先,最通用的方法便是采用正則表達式提取,這是一個萬能的方法,但是在構造正則表達式時比較復雜且容易出錯。

另外,由于網頁的結構有一定的規則,所以還有一些根據網頁節點屬性、CSS 選擇器或 XPath 來提取網頁信息的庫,如 Beautiful Soup、pyquery、lxml 等。使用這些庫,我們可以高效快速地從中提取網頁信息,如節點的屬性、文本值等。

提取信息是爬蟲非常重要的部分,它可以使雜亂的數據變得條理清晰,以便我們后續處理和分析數據。

4.保存數據

提取信息后,我們一般會將提取到的數據保存到某處以便后續使用。這里保存形式有多種多樣,如可以簡單保存為 TXT 文本或 JSON 文本,也可以保存到數據庫,如 MySQL 和 MongoDB 等,還可保存至遠程服務器,如借助 SFTP 進行操作等。

5.自動化程序

說到自動化程序,意思是說爬蟲可以代替人來完成這些操作。首先,我們手工當然可以提取這些信息,但是當量特別大或者想快速獲取大量數據的話,肯定還是要借助程序。爬蟲就是代替我們來完成這份爬取工作的自動化程序,它可以在抓取過程中進行各種異常處理、錯誤重試等操作,確保爬取持續高效地運行。

6.能抓怎樣的數據

在網頁中我們能看到各種各樣的信息,最常見的便是常規網頁,它們對應著 HTML 代碼,而最常抓取的便是 HTML 源代碼。

另外,可能有些網頁返回的不是 HTML 代碼,而是一個 JSON 字符串(其中 API 接口大多采用這樣的形式),這種格式的數據方便傳輸和解析,它們同樣可以抓取,而且數據提取更加方便。

此外,我們還可以看到各種二進制數據,如圖片、視頻和音頻等。利用爬蟲,我們可以將這些二進制數據抓取下來,然后保存成對應的文件名。

另外,還可以看到各種擴展名的文件,如 CSS、JavaScript 和配置文件等,這些其實也是最普通的文件,只要在瀏覽器里面可以訪問到,就可以將其抓取下來。

上述內容其實都對應各自的 URL,是基于 HTTP 或 HTTPS 協議的,只要是這種數據,爬蟲都可以抓取。

7.JavaScript 渲染頁面

有時候,我們在用 urllib 或 requests 抓取網頁時,得到的源代碼實際和瀏覽器中看到的不一樣。

這是一個非常常見的問題。現在網頁越來越多地采用 Ajax、前端模塊化工具來構建,整個網頁可能都是由 JavaScript 渲染出來的,也就是說原始的 HTML 代碼就是一個空殼,例如:

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>This is a Demo</title> </head> <body> <div id="container"> </div> </body> <script src="app.js"></script> </html>

body 節點里面只有一個 id 為 container 的節點,但是需要注意在 body 節點后引入了 app.js,它便負責整個網站的渲染。

在瀏覽器中打開這個頁面時,首先會加載這個 HTML 內容,接著瀏覽器會發現其中引入了一個 app.js 文件,然后便會接著去請求這個文件,獲取到該文件后,便會執行其中的 JavaScript 代碼,而 JavaScript 則會改變 HTML 中的節點,向其添加內容,最后得到完整的頁面。

但是在用 urllib 或 requests 等庫請求當前頁面時,我們得到的只是這個 HTML 代碼,它不會幫助我們去繼續加載這個 JavaScript 文件,這樣也就看不到瀏覽器中的內容了。

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

因此,使用基本 HTTP 請求庫得到的源代碼可能跟瀏覽器中的頁面源代碼不太一樣。對于這樣的情況,我們可以分析其后臺 Ajax 接口,也可使用 Selenium、Splash 這樣的庫來實現模擬 JavaScript 渲染。

后面,我們會詳細介紹如何采集 JavaScript 渲染的網頁。本節介紹了爬蟲的一些基本原理,這可以幫助我們在后面編寫爬蟲時更加得心應手。

總結

以上是生活随笔為你收集整理的第03讲. 原理探究,了解爬虫的基本原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。