国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---17、爬蟲基本原理

hellowoody / 2360人閱讀

摘要:在前面我們講到了和的概念,我們向網(wǎng)站的服務(wù)器發(fā)送一個(gè),返回的的便是網(wǎng)頁源代碼。渲染頁面有時(shí)候我們?cè)谟没蜃ト【W(wǎng)頁時(shí),得到的源代碼實(shí)際和瀏覽器中看到的是不一樣的。所以使用基本請(qǐng)求庫得到的結(jié)果源代碼可能跟瀏覽器中的頁面源代碼不太一樣。

上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---16、Web網(wǎng)頁基礎(chǔ)
下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---18、Session和Cookies

爬蟲,即網(wǎng)絡(luò)爬蟲,我們可以把互聯(lián)網(wǎng)就比作一張大網(wǎng),而爬蟲便是在網(wǎng)上爬行的蜘蛛,我們可以把網(wǎng)的節(jié)點(diǎn)比做一個(gè)個(gè)網(wǎng)頁,爬蟲爬到這就相當(dāng)于訪問了該頁面獲取了其信息,節(jié)點(diǎn)間的連線可以比做網(wǎng)頁與網(wǎng)頁之間的鏈接關(guān)系,這樣蜘蛛通過一個(gè)節(jié)點(diǎn)后可以順著節(jié)點(diǎn)連線繼續(xù)爬行到達(dá)下一個(gè)節(jié)點(diǎn),即通過一個(gè)網(wǎng)頁繼續(xù)獲取后續(xù)的網(wǎng)頁,這樣整個(gè)網(wǎng)的節(jié)點(diǎn)便可以被蜘蛛全部爬行到,這樣網(wǎng)站的數(shù)據(jù)就可以被抓取下來了。

1. 爬蟲概述

可能上面的說明還是難以具體地描述爬蟲究竟是個(gè)什么,簡單來說,爬蟲就是獲取網(wǎng)頁并提取和保存信息的自動(dòng)化程序,接下來對(duì)各個(gè)點(diǎn)進(jìn)行說明:

獲取網(wǎng)頁

爬蟲首先要做的工作就是獲取網(wǎng)頁,在這里獲取網(wǎng)頁即獲取網(wǎng)頁的源代碼,源代碼里面必然包含了網(wǎng)頁的部分有用的信息,所以只要把源代碼獲取下來了,就可以從中提取我們想要的信息了。

在前面我們講到了 Request 和 Response 的概念,我們向網(wǎng)站的服務(wù)器發(fā)送一個(gè) Request,返回的 Response 的 Body 便是網(wǎng)頁源代碼。所以最關(guān)鍵的部分就是構(gòu)造一個(gè) Request 并發(fā)送給服務(wù)器,然后接收到 Response 并將其解析出來,那這個(gè)流程可以怎樣來實(shí)現(xiàn)呢?總不能手工去截取網(wǎng)頁源碼把?

不用擔(dān)心,Python 里面提供了許多庫來幫助我們實(shí)現(xiàn)這個(gè)操作,如 Urllib、Requests 等,我們可以用這些庫來幫助我們實(shí)現(xiàn) HTTP 請(qǐng)求操作,Request 和 Response 都可以用類庫提供的數(shù)據(jù)結(jié)構(gòu)來表示,得到 Response 之后只需要解析數(shù)據(jù)結(jié)構(gòu)中的 Body 部分即可,即得到網(wǎng)頁的源代碼,這樣我們可以用程序來實(shí)現(xiàn)獲取網(wǎng)頁的過程了。
提取信息

我們?cè)诘谝徊将@取了網(wǎng)頁源代碼之后,接下來的工作就是分析網(wǎng)頁源代碼,從中提取我們想要的數(shù)據(jù),首先最通用的方法便是采用正則表達(dá)式提取,這是一個(gè)萬能的方法,但是在構(gòu)造正則表達(dá)式的時(shí)候比較復(fù)雜且容易出錯(cuò)。

另外由于網(wǎng)頁的結(jié)構(gòu)是有一定規(guī)則的,所以還有一些根據(jù)網(wǎng)頁節(jié)點(diǎn)屬性、CSS 選擇器或 XPath 來提取網(wǎng)頁信息的庫,如 BeautifulSoup、PyQuery、LXML 等,使用這些庫可以高效快速地從中提取網(wǎng)頁信息,如節(jié)點(diǎn)的屬性、文本值等內(nèi)容。

提取信息是爬蟲非常重要的部分,它可以使雜亂的數(shù)據(jù)變得清晰條理,以便于我們后續(xù)在對(duì)數(shù)據(jù)進(jìn)行處理和分析。

保存數(shù)據(jù)

提取信息之后我們一般會(huì)將提取到的數(shù)據(jù)保存到某處以便后續(xù)數(shù)據(jù)處理使用。保存形式有多種多樣,如可以簡單保存為 TXT 文本或 Json 文本,也可以保存到數(shù)據(jù)庫,如 MySQL、MongoDB 等,也可保存至遠(yuǎn)程服務(wù)器,如借助 Sftp 進(jìn)行操作等。

自動(dòng)化程序

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

2. 能抓怎樣的數(shù)據(jù)

在網(wǎng)頁中我們能看到各種各樣的信息,最常見的便是常規(guī)網(wǎng)頁,其都對(duì)應(yīng)著 HTML 代碼,而最常見的抓取便是抓取 HTML 源代碼。

另外可能有些網(wǎng)頁返回的不是 HTML 代碼,而是返回一個(gè) Json 字符串,API 接口大多采用這樣的形式,方便數(shù)據(jù)的傳輸和解析,這種數(shù)據(jù)同樣可以抓取,而且數(shù)據(jù)提取更加方便。

此外我們還可以看到各種二進(jìn)制數(shù)據(jù),如圖片、視頻、音頻等等,我們可以利用爬蟲將它們的二進(jìn)制數(shù)據(jù)抓取下來,然后保存成對(duì)應(yīng)的文件名即可。

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

以上的內(nèi)容其實(shí)都對(duì)應(yīng)著各自的URL,是基于 HTTP 或 HTTPS 協(xié)議的,只要是這種數(shù)據(jù)爬蟲都可以進(jìn)行抓取。

3. JavaScript渲染頁面

有時(shí)候我們?cè)谟?Urllib 或 Requests 抓取網(wǎng)頁時(shí),得到的源代碼實(shí)際和瀏覽器中看到的是不一樣的。

這個(gè)問題是一個(gè)非常常見的問題,現(xiàn)在網(wǎng)頁越來越多地采用 Ajax、前端模塊化工具來構(gòu)建網(wǎng)頁,整個(gè)網(wǎng)頁可能都是由 JavaScript 渲染出來的,意思就是說原始的 HTML 代碼就是一個(gè)空殼,例如:



    
        
        This is a Demo
    
    
        

body 節(jié)點(diǎn)里面只有一個(gè) id 為 container 的節(jié)點(diǎn),但是注意到在 body 節(jié)點(diǎn)后引入了一個(gè) app.js,這個(gè)便負(fù)責(zé)了整個(gè)網(wǎng)站的渲染。

在瀏覽器打開這個(gè)頁面時(shí),首先會(huì)加載這個(gè) HTML 內(nèi)容,接著瀏覽器會(huì)發(fā)現(xiàn)其中里面引入了一個(gè) app.js 文件,然后瀏覽器便會(huì)接著去請(qǐng)求這個(gè)文件,獲取到該文件之后便會(huì)執(zhí)行其中的 JavaScript 代碼,而 JavaScript 則會(huì)改變 HTML 中的節(jié)點(diǎn),向內(nèi)添加內(nèi)容,最后得到完整的頁面。

但是在用 Urllib 或 Requests 等庫來請(qǐng)求當(dāng)前頁面時(shí),我們得到的只是這個(gè) HTML 代碼,它不會(huì)幫助我們?nèi)ダ^續(xù)加載這個(gè) JavaScript 文件,這樣也就看不到瀏覽器中看到的內(nèi)容了。

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

所以使用基本 HTTP 請(qǐng)求庫得到的結(jié)果源代碼可能跟瀏覽器中的頁面源代碼不太一樣。對(duì)于這樣的情況,我們可以分析其后臺(tái) Ajax 接口,也可使用 Selenium、Splash 這樣的庫來實(shí)現(xiàn)模擬 JavaScript 渲染,這樣我們便可以爬取 JavaScript 渲染的網(wǎng)頁的內(nèi)容了。

在后文我們會(huì)詳細(xì)介紹對(duì)于 JavaScript 渲染的網(wǎng)頁的采集方法。

4. 結(jié)語

本節(jié)介紹了爬蟲的一些基本原理,了解了如上內(nèi)容可以幫助我們?cè)诤竺婢帉懪老x的時(shí)候更加得心應(yīng)手。

上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---16、Web網(wǎng)頁基礎(chǔ)
下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---18、Session和Cookies

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/44051.html

相關(guān)文章

  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---18、Session和Cookies

    摘要:而在中對(duì)象用來存儲(chǔ)特定用戶會(huì)話所需的屬性及配置信息。當(dāng)會(huì)話過期或被放棄后,服務(wù)器將終止該會(huì)話。,即該是否僅被使用安全協(xié)議傳輸。安全協(xié)議有,等,在網(wǎng)絡(luò)上傳輸數(shù)據(jù)之前先將數(shù)據(jù)加密。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---17、爬蟲基本原理下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---19、代理基本原理 在瀏覽網(wǎng)站的過程中我們經(jīng)常會(huì)遇到需要登錄的情況,有些頁面只有登錄之后我們才可以訪問...

    SHERlocked93 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---16、Web網(wǎng)頁基礎(chǔ)

    摘要:,簡稱為,是一種腳本語言,和配合使用,提供給用戶的只是一種靜態(tài)的信息,缺少交互性。這就是網(wǎng)頁的三大基本組成。父節(jié)點(diǎn)擁有子節(jié)點(diǎn),同級(jí)的子節(jié)點(diǎn)被稱為兄弟節(jié)點(diǎn)。選擇屬于其父節(jié)點(diǎn)的首個(gè)節(jié)點(diǎn)的每個(gè)節(jié)點(diǎn)。同上,從最后一個(gè) 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---15、爬蟲基礎(chǔ):HTTP基本原理下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---17、爬蟲基本原理 我們平時(shí)用瀏覽器訪問網(wǎng)站的時(shí)候,一個(gè)...

    netScorpion 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---19、代理基本原理

    摘要:所以使用代理隱藏真實(shí)的,讓服務(wù)器誤以為是代理服務(wù)器的在請(qǐng)求自己。參考來源由于涉及到一些專業(yè)名詞知識(shí),本節(jié)的部分內(nèi)容參考來源如下代理服務(wù)器維基百科代理百度百科上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)和下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)使用發(fā)送請(qǐng)求 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---18、Session和Cookies下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---20、使用Urllib:發(fā)送請(qǐng)求 我們?cè)谧雠老x...

    gougoujiang 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---14、部署相關(guān)庫的安裝:Scrapyrt、Gerapy

    摘要:相關(guān)鏈接官方文檔安裝推薦使用安裝,命令如下命令執(zhí)行完畢之后即可完成安裝。的安裝是一個(gè)分布式管理模塊,本節(jié)來介紹一下的安裝方式。如果沒有錯(cuò)誤報(bào)出,則證明庫已經(jīng)安裝好了。上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)部署相關(guān)庫下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬蟲基礎(chǔ)基本原理 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---13、部署相關(guān)庫ScrapydClient、ScrapydAPI下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)--...

    nihao 評(píng)論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---10、爬蟲框架的安裝:PySpider、Scrapy

    摘要:所以如果對(duì)爬蟲有一定基礎(chǔ),上手框架是一種好的選擇。缺少包,使用安裝即可缺少包,使用安裝即可上一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬取相關(guān)庫的安裝的安裝下一篇文章網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)爬蟲框架的安裝 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---9、APP爬取相關(guān)庫的安裝:Appium的安裝下一篇文章:Python3網(wǎng)絡(luò)爬蟲實(shí)戰(zhàn)---11、爬蟲框架的安裝:ScrapySplash、ScrapyRedis 我們直接...

    張憲坤 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<