九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
一看就明白的爬蟲入門講解

加入人人都是產(chǎn)品經(jīng)理【起點(diǎn)學(xué)院】產(chǎn)品經(jīng)理實戰(zhàn)訓(xùn)練營,BAT產(chǎn)品總監(jiān)手把手帶你學(xué)產(chǎn)品

關(guān)于爬蟲內(nèi)容的分享,我會分成兩篇,六個部分來分享,分別是:

  1. 我們的目的是什么
  2. 內(nèi)容從何而來
  3. 了解網(wǎng)絡(luò)請求
  4. 一些常見的限制方式
  5. 嘗試解決問題的思路
  6. 效率問題的取舍

本文先聊聊前三個部分。

一、我們的目的是什么

一般來講對我們而言需要抓取的是某個網(wǎng)站或者某個應(yīng)用的內(nèi)容,提取有用的價值,內(nèi)容一般分為兩部分,非結(jié)構(gòu)化的文本,或者結(jié)構(gòu)化的文本。

關(guān)于非結(jié)構(gòu)化的數(shù)據(jù)

1.1 HTML文本(包含javascript代碼)

HTML文本基本上是傳統(tǒng)爬蟲過程中最常見的,也就是大多數(shù)時候會遇到的情況,例如抓取一個網(wǎng)頁,得到的是HTML,然后需要解析一些常見的元素,提取一些關(guān)鍵的信息。HTML其實理應(yīng)屬于結(jié)構(gòu)化的文本組織,但是又因為一般我們需要的關(guān)鍵信息并非直接可以得到,需要進(jìn)行對HTML的解析查找,甚至一些字符串操作才能得到,所以還是歸類于非結(jié)構(gòu)化的數(shù)據(jù)處理中。

常見解析方式如下:

CSS選擇器

現(xiàn)在的網(wǎng)頁樣式比較多,所以一般的網(wǎng)頁都會有一些CSS的定位,例如class,id等等,或者我們根據(jù)常見的節(jié)點(diǎn)路徑進(jìn)行定位,例如騰訊首頁的財經(jīng)部分:

這里id就為finance,我們用css選擇器,就是'#finance'就得到了財經(jīng)這一塊區(qū)域的html,同理,可以根據(jù)特定的css選擇器可以獲取其他的內(nèi)容。

XPATH

XPATH是一種頁面元素的路徑選擇方法,利用chrome可以快速得到,如:

copy XPATH 就能得到——//*[@id='finance']

正則表達(dá)式

正則表達(dá)式,用標(biāo)準(zhǔn)正則解析,一般會把HTML當(dāng)做普通文本,用指定格式匹配當(dāng)相關(guān)文本,適合小片段文本,或者某一串字符,或者HTML包含javascript的代碼,無法用CSS選擇器或者XPATH。

字符串分隔

同正則表達(dá)式,更為偷懶的方法,不建議使用。

1.2 一段文本

例如一篇文章,或者一句話,我們的初衷是提取有效信息,所以如果是滯后處理,可以直接存儲,如果是需要實時提取有用信息,常見的處理方式如下:

分詞

根據(jù)抓取的網(wǎng)站類型,使用不同詞庫,進(jìn)行基本的分詞,然后變成詞頻統(tǒng)計,類似于向量的表示,詞為方向,詞頻為長度。

NLP

自然語言處理,進(jìn)行語義分析,用結(jié)果表示,例如正負(fù)面等。

關(guān)于結(jié)構(gòu)化的數(shù)據(jù)

結(jié)構(gòu)化的數(shù)據(jù)是最好處理,一般都是類似JSON格式的字符串,直接解析JSON數(shù)據(jù)就可以了,提取JSON的關(guān)鍵字段即可

二、內(nèi)容從何而來

過去我們常需要獲取的內(nèi)容主要來源于網(wǎng)頁,一般來講,我們決定進(jìn)行抓取的時候,都是網(wǎng)頁上可看到的內(nèi)容,但是隨著這幾年移動互聯(lián)網(wǎng)的發(fā)展,我們也發(fā)現(xiàn)越來越多的內(nèi)容會來源于移動app,所以爬蟲就不止局限于一定要抓取解析網(wǎng)頁,還有就是模擬移動app的網(wǎng)絡(luò)請求進(jìn)行抓取,所以這一部分我會分兩部分進(jìn)行說明。

1 網(wǎng)頁內(nèi)容

網(wǎng)頁內(nèi)容一般就是指我們最終在網(wǎng)頁上看到的內(nèi)容,但是這個過程其實并不是網(wǎng)頁的代碼里面直接包含內(nèi)容這么簡單,所以對于很多新人而言,會遇到很多問題,比如:

明明在頁面用Chrome或者Firefox進(jìn)行審查元素時能看到某個HTML標(biāo)簽下包含內(nèi)容,但是抓取的時候為空。

很多內(nèi)容一定要在頁面上點(diǎn)擊某個按鈕或者進(jìn)行某個交互操作才能顯示出來。

所以對于很多新人的做法是用某個語言別人模擬瀏覽器操作的庫,其實就是調(diào)用本地瀏覽器或者是包含了一些執(zhí)行javascript的引擎來進(jìn)行模擬操作抓取數(shù)據(jù),但是這種做法顯然對于想要大量抓取數(shù)據(jù)的情況下是效率非常低下,并且對于技術(shù)人員本身而言也相當(dāng)于在用一個盒子,那么對于這些內(nèi)容到底是怎么顯示在網(wǎng)頁上的呢?主要分為以下幾種情況:

網(wǎng)頁包含內(nèi)容

這種情況是最容易解決的,一般來講基本上是靜態(tài)網(wǎng)頁已經(jīng)寫死的內(nèi)容,或者動態(tài)網(wǎng)頁,采用模板渲染,瀏覽器獲取到HTML的時候已經(jīng)是包含所有的關(guān)鍵信息,所以直接在網(wǎng)頁上看到的內(nèi)容都可以通過特定的HTML標(biāo)簽得到

javascript代碼加載內(nèi)容

這種情況是由于雖然網(wǎng)頁顯示時,內(nèi)容在HTML標(biāo)簽里面,但是其實是由于執(zhí)行js代碼加到標(biāo)簽里面的,所以這個時候內(nèi)容在js代碼里面的,而js的執(zhí)行是在瀏覽器端的操作,所以用程序去請求網(wǎng)頁地址的時候,得到的response是網(wǎng)頁代碼和js的代碼,所以自己在瀏覽器端能看到內(nèi)容,解析時由于js未執(zhí)行,肯定找到指定HTML標(biāo)簽下內(nèi)容肯定為空,這個時候的處理辦法,一般來講主要是要找到包含內(nèi)容的js代碼串,然后通過正則表達(dá)式獲得相應(yīng)的內(nèi)容,而不是解析HTML標(biāo)簽。

Ajax異步請求

這種情況是現(xiàn)在很常見的,尤其是在內(nèi)容以分頁形式顯示在網(wǎng)頁上,并且頁面無刷新,或者是對網(wǎng)頁進(jìn)行某個交互操作后,得到內(nèi)容。那我們該如何分析這些請求呢?這里我以Chrome的操作為例,進(jìn)行說明:

所以當(dāng)我們開始刷新頁面的時候就要開始跟蹤所有的請求,觀察數(shù)據(jù)到底是在哪一步加載進(jìn)來的。然后當(dāng)我們找到核心的異步請求的時候,就只用抓取這個異步請求就可以了,如果原始網(wǎng)頁沒有任何有用信息,也沒必要去抓取原始網(wǎng)頁了。

2 App內(nèi)容

因為現(xiàn)在移動應(yīng)用越來越多,很多有用信息都在App里面,另外解析非結(jié)構(gòu)化文本和結(jié)構(gòu)文本對比而言,結(jié)構(gòu)化文本會簡單多了,不同去找內(nèi)容,去過多分析解析,所有既有網(wǎng)站又有App的話,推薦抓取App,大多數(shù)情況下基本上只是一些JSON數(shù)據(jù)的API了。那么App的數(shù)據(jù)該如何抓取呢?通用的方法就是抓包,基本的做法就是電腦安裝抓包軟件,配置好端口,然后記下ip,手機(jī)端和電腦在同一個局域網(wǎng)里面,然后在手機(jī)的網(wǎng)絡(luò)連接里面設(shè)置好代理,這個時候打開App進(jìn)行一些操作,如果有網(wǎng)絡(luò)數(shù)據(jù)請求,則都會被抓包軟件記下,就如上Chrome分析網(wǎng)絡(luò)請求一樣,你可以看到所有的請求情況,可以模擬請求操作。這里Mac上我推薦軟件Charles,Windows推薦Fiddler2。

具體如何使用,之后我再做詳述,可能會涉及到HTTPS證書的問題。

三、了解網(wǎng)絡(luò)請求

剛剛一直在寬泛的提到一些我們需要找到請求,進(jìn)行請求,對于請求只是一筆帶過,但請求是很重要的一部分,包括如何繞過限制,如何發(fā)送正確地數(shù)據(jù),都需要對的請求,這里就要詳細(xì)的展開說下請求,以及如何模擬請求。

我們常說爬蟲其實就是一堆的HTTP請求,找到待爬取的鏈接,不管是網(wǎng)頁鏈接還是App抓包得到的API鏈接,然后發(fā)送一個請求包,得到一個返回包(也有HTTP長連接,或者Streaming的情況,這里不考慮),所以核心的幾個要素就是:

  1. URL
  2. 請求方法(POST, GET)
  3. 請求包headers
  4. 請求包內(nèi)容
  5. 返回包headers

在用Chrome進(jìn)行網(wǎng)絡(luò)請求捕獲或者用抓包工具分析請求時,最重要的是弄清楚URL,請求方法,然后headers里面的字段,大多數(shù)出問題就出在headers里面,最常限制的幾個字段就是User-Agent, Referer,Cookie 另外Base Auth也是在headers里面加了Autheration的字段。

請求內(nèi)容也就是post時需要發(fā)送的數(shù)據(jù),一般都是將Key-Value進(jìn)行urlencode返回包headers大多數(shù)會被人忽視,可能只得到內(nèi)容就可以了,但是其實很多時候,很多人會發(fā)現(xiàn)明明url,請求方法還有請求包的內(nèi)容都對了,為什么沒有返回內(nèi)容,或者發(fā)現(xiàn)請求被限制,其實這里大概有兩個原因:

  • 一個是返回包的內(nèi)容是空的,但是在返回包的headers的字段里面有個Location,這個Location字段就是告訴瀏覽器重定向,所以有時候代碼沒有自動跟蹤,自然就沒有內(nèi)容了;
  • 另外一個就是很多人會頭疼的Cookie問題,簡單說就是瀏覽器為什么知道你的請求合法的,例如已登錄等等,其實就是可能你之前某個請求的返回包的headers里面有個字段叫Set-Cookie,Cookie存在本地,一旦設(shè)置后,除非過期,一般都會自動加在請求字段上,所以Set-Cookie里面的內(nèi)容就會告訴瀏覽器存多久,存的是什么內(nèi)容,在哪個路徑下有用,Cookie都是在指定域下,一般都不跨域,域就是你請求的鏈接host。

所以分析請求時,一定要注意前四個,在模擬時保持一致,同時觀察第五個返回時是不是有限制或者有重定向。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
用R語言三行代碼寫爬蟲
一篇文章了解爬蟲技術(shù)現(xiàn)狀
Python天氣預(yù)報采集器實現(xiàn)代碼(網(wǎng)頁爬蟲)
Python爬蟲入門,快速抓取大規(guī)模數(shù)據(jù)(第二部分)
Python爬蟲筆記:爬取單個頁面
Python超簡單超基礎(chǔ)的免費(fèi)小說爬蟲!爬蟲入門從這開始
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服