一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

多種語(yǔ)言(Python/C#)實(shí)現(xiàn)抓取網(wǎng)頁(yè),模擬登陸網(wǎng)站

 franklinfj 2013-11-23

【整理】關(guān)于抓取網(wǎng)頁(yè),分析網(wǎng)頁(yè)內(nèi)容,模擬登陸網(wǎng)站的邏輯/流程和注意事項(xiàng)

看此文之前,(強(qiáng)烈建議)先去看:

如何用Python,C#等語(yǔ)言去實(shí)現(xiàn)抓取靜態(tài)網(wǎng)頁(yè)+抓取動(dòng)態(tài)網(wǎng)頁(yè)+模擬登陸網(wǎng)站

然后,才明白,此文的作用和產(chǎn)生的背景。

其中,本文的部分內(nèi)容,也會(huì)在上述帖子,給出額外鏈接,其中有更詳細(xì)的解釋的。


之前折騰了兩個(gè)東西:

BlogsToWordPress – 將百度空間,網(wǎng)易163等博客搬家到WordPress

WLW (Windows Live Writer) Plugin–InsertSkydriveFiles

了解了一些關(guān)于,如何抓取對(duì)應(yīng)的網(wǎng)頁(yè)內(nèi)容,如何模擬登陸一個(gè)網(wǎng)站的大概邏輯和流程,以及一些注意事項(xiàng)。

在此整理出來(lái),僅供參考。

抓取網(wǎng)頁(yè)的一般邏輯和過(guò)程

一般普通用戶,用瀏覽器,打開(kāi)某個(gè)URL地址,然后瀏覽器就可以顯示出對(duì)應(yīng)的頁(yè)面的內(nèi)容了。

這個(gè)過(guò)程,如果用程序代碼來(lái)實(shí)現(xiàn),就可以被稱為(用程序?qū)崿F(xiàn))抓取網(wǎng)頁(yè)(的內(nèi)容,并進(jìn)行后期處理,提取所需信息等)

對(duì)應(yīng)的英文說(shuō)法有,website crawl/scrape/data mining。

而用來(lái)抓取網(wǎng)頁(yè)的工具,也常被叫做 spider,crawler等。

即,一般所謂的取網(wǎng)頁(yè)內(nèi)容,指的是通過(guò)程序(某種語(yǔ)言的程序代碼,比如Python腳本語(yǔ)言,C#語(yǔ)言等)實(shí)現(xiàn)訪問(wèn)某個(gè)URL地址,然后獲得其所返回的內(nèi)容(HTML源碼,Json格式的字符串等)。

而對(duì)于這個(gè)抓取網(wǎng)頁(yè)的過(guò)程,是有一套自己的邏輯的。

想要用程序?qū)崿F(xiàn)對(duì)應(yīng)的網(wǎng)頁(yè)內(nèi)容的抓取,就是要先搞懂這套邏輯,然后再去用對(duì)應(yīng)的不同的語(yǔ)言實(shí)現(xiàn),即可。

抓取網(wǎng)頁(yè)的一般邏輯

去訪問(wèn)一個(gè)URL地址,獲得對(duì)應(yīng)的網(wǎng)頁(yè)的過(guò)程,其對(duì)應(yīng)的內(nèi)部機(jī)制是

準(zhǔn)備好對(duì)應(yīng)的Http請(qǐng)求(Http Request)+ 提交對(duì)應(yīng)的Http Request

–>

獲得返回的響應(yīng)(Http Response) + 獲得Http Response中的網(wǎng)頁(yè)源碼

下面介紹這兩大步驟的具體操作流程:

準(zhǔn)備此Http請(qǐng)求Request (訪問(wèn)URL之前的準(zhǔn)備工作)

url

知道了要訪問(wèn)的URL地址是什么,即request url;

其中,此處的url地址,是指的是完整的地址:基本的url + 查詢字符串

此查詢字符串參數(shù):

  • IE中算是稱為request parameter

  • Chrome中稱為query string

其中,查詢字符串,很多時(shí)候也是沒(méi)有的。

舉個(gè)例子:

完整的url = http://www./?s=crifan&submit=Search

==

基本url + 查詢字符串

= http://www./ + s=crifan 和submit=Search

GET還是POST

必須或可選:Headers

即request header

頭信息Headers,包含很多個(gè)Header

有些是必須的,有些是可選的(根據(jù)不同情況,可忽略的)

有的時(shí)候,甚至不設(shè)置任何header也是可以的。

[可選]Post Data

如果是POST方法,則還需要填寫對(duì)應(yīng)的數(shù)據(jù):

此數(shù)據(jù):

  • IE中稱為request body

  • Chrome中稱為Post Data

換句話說(shuō):

如果是GET,則是沒(méi)有POST數(shù)據(jù)的。

提示:所以,你在IE9中通過(guò)F12抓取到的內(nèi)容中,會(huì)看到,對(duì)于所有的GET請(qǐng)求,對(duì)應(yīng)的“請(qǐng)求正文(request body)”都是空的。

必須或可選:cookie

很多時(shí)候,訪問(wèn)對(duì)應(yīng)url還需要提供對(duì)應(yīng)的cookie。

一般來(lái)說(shuō),模擬登陸等情況下,往往都會(huì)涉及到cookie的。

其他一些可能需要準(zhǔn)備的東西

(1)代理proxy

(2)設(shè)置最大超時(shí)timeout時(shí)間

提交HttpRequest,即可獲得此http請(qǐng)求的響應(yīng)Response(訪問(wèn)URL之后的要做的工作)

1.獲得對(duì)應(yīng)的響應(yīng)response

2.從響應(yīng)中獲得對(duì)應(yīng)的網(wǎng)頁(yè)源碼等信息

(1)獲得返回的網(wǎng)頁(yè)HTML源碼(或json等)

(2)[可選]如果有需要,還要獲得對(duì)應(yīng)的cookie

(3)[可選]判斷返回的其他一些相關(guān)信息,比如response code等

【網(wǎng)頁(yè)抓取過(guò)程中的注意事項(xiàng)】

1.網(wǎng)頁(yè)跳轉(zhuǎn)Redirect

(1)直接跳轉(zhuǎn)

(2)間接跳轉(zhuǎn)

A。javascript腳本中有對(duì)應(yīng)的代碼實(shí)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)

B。本身所返回的HTML源碼中包含refresh動(dòng)作,所實(shí)現(xiàn)的網(wǎng)頁(yè)跳轉(zhuǎn)

抓取網(wǎng)頁(yè)后,如何分析獲得所需要的內(nèi)容

一般來(lái)說(shuō),去訪問(wèn)一個(gè)URL地址,所返回的內(nèi)容,多數(shù)都是網(wǎng)頁(yè)的HTML源碼,也有其他一些形式的內(nèi)容的,比如json等。

我們所想要的則是,從返回的內(nèi)容(HTML或json等)中,提取我們所需要的特定的信息,即對(duì)其進(jìn)行一定的處理,獲得所需信息。

就我所遇到的情況,有幾種方法可以實(shí)現(xiàn)提取所需的信息:

1. 對(duì)于HTML源碼:

(1)如果是Python中的話,可以通過(guò)調(diào)用第三方的Beautifulsoup庫(kù)

然后再調(diào)用find等函數(shù),來(lái)提取對(duì)應(yīng)的信息。

這部分內(nèi)容,相對(duì)很復(fù)雜,需要詳細(xì)了解的,可以參考一下:

BlogsToWordPress v3.0 – 將百度空間,網(wǎng)易163等博客搬家到WordPress

中的源碼。

(2)直接使用正則表達(dá)式自己去提取相關(guān)內(nèi)容

對(duì)于內(nèi)容的分析和提取,很多時(shí)候,都是通過(guò)正則表達(dá)式來(lái)實(shí)現(xiàn)的。

關(guān)于正則表達(dá)式的相關(guān)知識(shí)和總結(jié),去看這里:

【總結(jié)】關(guān)于正則表達(dá)式 v2012-02-20

正則表達(dá)式是一種規(guī)范/規(guī)則,具體用何種語(yǔ)言實(shí)現(xiàn),取決于你自己。

我遇到的有Python和C#兩種語(yǔ)言:

A。Python:使用re模塊,常用的函數(shù)是find,,findall,search等。

B:C#:使用Regex類,用對(duì)應(yīng)的pattern和match函數(shù)來(lái)匹配。

關(guān)于C#中的Regex,更多內(nèi)容請(qǐng)參考:

【總結(jié)】C#中的Regex的使用心得和注意事項(xiàng)

2.對(duì)于Json

可以先去看專門的關(guān)于JSON的介紹:

【整理】什么是JSON+如何處理JSON字符串

然后再看下面的如何處理Json。

(1)使用庫(kù)(函數(shù))來(lái)處理

A。Python

Python中,有對(duì)應(yīng)的json庫(kù),常用的是json.load,即可將json格式的字符串,轉(zhuǎn)換為對(duì)應(yīng)的字典Dictionary類型變量,很是好用。

(2)還是使用正則表達(dá)式來(lái)處理

A。Python

Python中的re模塊,同上。

B。C#

C#中貌似沒(méi)有自帶json的庫(kù),倒是有很多第三方的json庫(kù),但是我當(dāng)時(shí)遇到解析json字符串的時(shí)候,覺(jué)得這些庫(kù),使用起來(lái)還是很麻煩,所以還是直接使用regex類來(lái)處理了。

模擬登陸網(wǎng)站的一般邏輯和過(guò)程

而對(duì)于用C#實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容抓取和模擬登陸網(wǎng)頁(yè)方面,一些心得和注意事項(xiàng),去看這里:

【經(jīng)驗(yàn)總結(jié)】Http,網(wǎng)頁(yè)訪問(wèn),request,response相關(guān)的知識(shí)

多種語(yǔ)言(Python/C#)實(shí)現(xiàn)抓取網(wǎng)頁(yè),模擬登陸網(wǎng)站

【教程】抓取網(wǎng)并提取網(wǎng)頁(yè)中所需要的信息 之 Python版

【教程】模擬登陸網(wǎng)站 之 Python版(內(nèi)含兩種版本的完整的可運(yùn)行的代碼)

【教程】抓取網(wǎng)并提取網(wǎng)頁(yè)中所需要的信息 之 C#版

【教程】模擬登陸網(wǎng)站 之 C#版(內(nèi)含兩種版本的完整的可運(yùn)行的代碼)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产在线一区中文字幕| 久久福利视频在线观看| 五月婷婷六月丁香狠狠| 欧美日韩精品综合在线| 少妇在线一区二区三区| 深夜日本福利在线观看| 美国黑人一级黄色大片| 亚洲中文字幕免费人妻| 香港国产三级久久精品三级| 日本免费一本一二区三区| 91午夜少妇极品福利| 中文字幕亚洲精品在线播放| 色哟哟哟在线观看视频| 国产又粗又硬又长又爽的剧情| 精品人妻精品一区二区三区| 亚洲第一香蕉视频在线| 免费在线观看激情小视频| 日韩精品一级一区二区| 国产偷拍精品在线视频| 日韩精品一区二区毛片| 国产福利在线播放麻豆| 亚洲欧美视频欧美视频| 亚洲天堂久久精品成人| 国产一区二区三区香蕉av| 少妇被粗大进猛进出处故事| 中文久久乱码一区二区| 久热久热精品视频在线观看| 亚洲综合一区二区三区在线| 欧美精品日韩精品一区| 国产一级不卡视频在线观看| 久热久热精品视频在线观看| 爽到高潮嗷嗷叫之在现观看| 中文字幕精品少妇人妻| 人妻内射在线二区一区| 精品推荐国产麻豆剧传媒| 午夜视频免费观看成人| 国产精品视频第一第二区| 国产精品十八禁亚洲黄污免费观看| 午夜久久精品福利视频| 亚洲精品中文字幕熟女| 91免费一区二区三区|