python爬蟲前(原理+抓包)


基本原理

爬蟲的本質是模擬瀏覽器打開網頁,獲取網頁中我們想要的那部分數據。爬蟲就是獲取網頁並提取和保存信息的自動化程序,其主要有如下三個步驟

  1. 獲取網頁:爬蟲首先要做的工作就是獲取網頁,這里就是獲取網頁的源代碼。源代碼里包含了網頁的部分有用信息,所以只要把源代碼獲取下來,就可以從中提取想要的信息了。爬蟲首先向網站的服務器發送一個請求,返回的響應體便是網頁源代碼。Python中提供了許多庫(如urllib、requests)來幫助我們實現這個操作,我們可以用這些庫來幫助我們實現HTTP請求操作,請求和響應都可以用類庫提供的數據結構來表示,得到響應之后只需要解析數據結構中的Body部分即可,即得到網頁的源代碼,這樣我們可以用程序來實現獲取網頁的過程了。
  2. 提取信息:獲取網頁源代碼后,接下來就是分析網頁源代碼,從中提取我們想要的數據。首先,最通用的方法便是采用正則表達式提取,這是一個萬能的方法,但是在構造正則表達式時比較復雜且容易出錯。另外,由於網頁的結構有一定的規則,所以還有一些根據網頁節點屬性、CSS選擇器或XPath來提取網頁信息的庫,如Beautiful Soup、pyquery、lxml等。使用這些庫,我們可以高效快速地從中提取網頁信息,如節點的屬性、文本值等。提取信息是爬蟲非常重要的部分,它可以使雜亂的數據變得條理清晰,以便我們后續處理和分析數據。
  3. 保存數據:提取信息后,我們一般會將提取到的數據保存到某處以便后續使用。這里保存形式有多種多樣,如可以簡單保存為TXT文本或JSON文本,也可以保存到數據庫,如MySQL和MongoDB等,也可以保存至遠程服務器,如借助SFTP進行操作等。

能抓什么數據?
在網頁中我們能看到各種各樣的信息,最常見的便是常規網頁,它們對應着HTML代碼,而最常抓取的便是HTML源代碼。另外,可能有些網頁返回的不是HTML代碼,而是一個JSON字符串(其中API接口大多采用這樣的形式),這種格式的數據方便傳輸和解析,它們同樣可以抓取,而且數據提取更加方便。此外,我們還可以看到各種二進制數據,如圖片、視頻和音頻等。利用爬蟲,我們可以將這些二進制數據抓取下來,然后保存成對應的文件名。另外,還可以看到各種擴展名的文件,如CSS、JavaScript和配置文件等,這些其實也是最普通的文件,只要在瀏覽器里面可以訪問到,就可以將其抓取下來。

JavaScript渲染頁面
有時候,我們在用urllib或requests抓取網頁時,得到的源代碼實際和瀏覽器中看到的不一樣。這是一個非常常見的問題。現在網頁越來越多地采用Ajax、前端模塊化工具來構建,整個網頁可能都是由JavaScript渲染出來的,也就是說原始的HTML代碼就是一個空殼,例如:

<IDOCTYPE html)
chtmly hona、
<meta charset="UTF-8"<title>This is a Demo</title>
SCILLe
</head>
<div id="container")
SNLY
</body>
<script src="app.js")</script>

其body節點里面只有一個id為container的節點,但是需要注意在body節點后引入了appjs,它便負責整個網站的渲染。在瀏覽器中打開這個頁面時,首先會加載這個HTML內容,接着瀏覽器會發現其中引入了一個appjs文件,然后便會接着去請求這個文件,獲取到該文件后,便會執行其中的JavaScript代碼,而JavaScript則會改變HTML中的節點,向其添加內容,最后得到完整的頁面。
但是在用urlib或requests等庫請求當前頁面時,我們得到的只是這個HTML代碼,它不會幫助我們去繼續加載這個JavaScript文件,這樣也就看不到瀏覽器中的內容了。
這也解釋了為什么有時我們得到的源代碼和瀏覽器中看到的不一樣。
因此,使用基本HTTP請求庫得到的源代碼可能跟瀏覽器中的頁面源代碼不太一樣。對於這樣的情況,我們可以分析其后台Ajax接口,也可使用Selenium、Splash這樣的庫來實現模擬JavaScript渲染。

00.什么是爬蟲,怎么玩爬蟲?

 在你的瀏覽器里輸入百度網址https://www.baidu.com一回車看到一個網頁:

 

 

 但是查看頁面源代碼是這樣的:

 

 

這些許許多多的網站背后都是一些數據,如果我們可以用一個自動化的程序輕輕松松就能把它們給爬取下是不是很爽?比如,一些小電影的網站我們只要用 Python 寫幾行代碼然后一運行這個程序就幫我們爬取所有的小電影到我們本地完全不需要我們費一點力氣;再比如,你想了解一個行業的趨勢,是不是可以把它們往年的數據都爬取下來然后,對這些數據做一些分析呢?

01.在Chrome瀏覽器抓包

02.通過Fidder進行手機抓包

本文參考自:

https://github.com/wistbean/learn_python3_spider

https://blog.csdn.net/hy592070616/article/details/89420699


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM