背景
在網(wǎng)絡(luò),網(wǎng)頁,,網(wǎng)站處理方面,,很多人都遇到過,,想要用某種語言(Python,C#等),,去實(shí)現(xiàn)一些需求,,常見的有這幾大類:
- 想要從某靜態(tài)網(wǎng)頁中,提取某些內(nèi)容
- 想要抓取某些動態(tài)網(wǎng)頁中的某些內(nèi)容
- 想要模擬登陸某個網(wǎng)站
對于這類需求,,其基本的背后邏輯,,都是相同的。
下面就是來介紹一下,,如何實(shí)現(xiàn)這些功能,。
搞懂訪問網(wǎng)頁所涉及的http相關(guān)的邏輯知識
先要搞懂對應(yīng)的,訪問url地址的背后的邏輯:
需要你提供哪些內(nèi)容:
- url
- headers:部分可選,,部分必須
- cookies(可選)
- post data
- 當(dāng)是POST方法時(shí),,才需要
然后獲得什么樣的內(nèi)容:
- html源碼(或其他的,json字符串,,圖片的數(shù)據(jù)等等)
- cookie(可能有):對于后續(xù)的訪問其他的url,,可能需要提供此處所返回的(新的)cookie
詳細(xì)解釋,可參考:
【整理】關(guān)于抓取網(wǎng)頁,,分析網(wǎng)頁內(nèi)容,,模擬登陸網(wǎng)站的邏輯/流程和注意事項(xiàng)
提示:
1.html的charset編碼
關(guān)于html網(wǎng)頁的編碼方面的背景知識,最好再去看看:
【整理】關(guān)于HTML網(wǎng)頁源碼的字符編碼(charset)格式(GB2312,,GBK,,UTF-8,ISO8859-1等)的解釋
搞懂你所要處理的網(wǎng)頁的執(zhí)行的邏輯過程
簡單的說就是,,你自己所要處理的某個url地址,,需要提供哪些值,然后才能獲得你所需要的值,。
先把你自己關(guān)心的這些邏輯搞懂,,才能談到后續(xù)用代碼實(shí)現(xiàn)出來。
如果此邏輯過程很簡單,,那么你不用工具去分析,,自己看代碼,能自己分析出來,,也是可以的,。
但是此過程往往都很復(fù)雜,所以,,一般都需要使用對應(yīng)的開發(fā)人員工具去分析,。
比如用IE9的F12去捕獲對應(yīng)的執(zhí)行過程,然后從中分析出你所需要關(guān)心的某些網(wǎng)頁的執(zhí)行邏輯的,。
詳細(xì)解釋和演示參見:
【教程】手把手教你如何利用工具(IE9的F12)去分析模擬登陸網(wǎng)站(百度首頁)的內(nèi)部邏輯過程
提示:
1.其他各種的分析工具
對于IE9的F12,等不熟悉的話,, 可以先去看看:
【總結(jié)】瀏覽器中的開發(fā)人員工具(IE9的F12和Chrome的Ctrl+Shift+I)-網(wǎng)頁分析的利器
對于此部分內(nèi)容,,另外還有個帖子可參考:
【整理】各種瀏覽器中的開發(fā)人員工具Developer Tools:IE9的F12,Chrome的Ctrl+Shift+J,,F(xiàn)irefox的Firebug
2. 復(fù)雜的參數(shù)值的分析
在用工具分析的過程中,,你會發(fā)現(xiàn)有些所要分析的值,是相對比較復(fù)雜的,,無法直接就獲得,,所以就需要去調(diào)試分析。
關(guān)于如何分析復(fù)雜的參數(shù)值是如何獲得的,,可以參考:
【教程】如何利用IE9的F12去分析網(wǎng)站登陸過程中的復(fù)雜的(參數(shù),,cookie等)值(的來源)
3.另外一個例子
后來又寫了個例子,用于分析如何從songtaste的播放頁面地址中找到歌曲的真實(shí)地址:
【教程】如何用IE9的F12去抓取某首Songtaste歌曲的真實(shí)地址
用某種語言去實(shí)現(xiàn)上述的邏輯
等把你要處理的所有的邏輯過程和執(zhí)行順序,,都搞懂了之后,,然后才是用某種語言去實(shí)現(xiàn)對應(yīng)的邏輯過程。
提示:
不過,,關(guān)于具體在代碼中實(shí)現(xiàn)對應(yīng)的邏輯,,有一些通用的邏輯:
1. url地址的編碼和解碼
其中,,如果涉及到,,url地址的解碼和編碼的話,可以參考:
【整理】關(guān)于http(GET或POST)請求中的url地址的編碼(encode)和解碼(decode)
2.關(guān)于headers,,cookie,,post data等如何處理
雖然是為動態(tài)網(wǎng)頁抓取所寫,但是基本的邏輯都是一樣的:
【整理】網(wǎng)頁抓取,,模擬登陸,,抓取動態(tài)網(wǎng)頁內(nèi)容等過程中,所涉及的Headers信息,,Cookie信息,,POST數(shù)據(jù)的處理邏輯
3.關(guān)于提取網(wǎng)頁內(nèi)容的方法
對于簡單的html網(wǎng)頁中的內(nèi)容,當(dāng)然是可以使用正則表達(dá)式的,。
但是對于復(fù)雜的內(nèi)容提取,,還是建議用第三方的特定的庫去處理:
【整理】關(guān)于用正則表達(dá)式處理html代碼方面的建議
其中:
Python:相關(guān)用于解析html的庫,推薦用:
【總結(jié)】Python的第三方庫BeautifulSoup的使用心得
關(guān)于代碼示例演示方面,,根據(jù)之前的三大類需求,,有三大類系列的教程:
想要從某靜態(tài)網(wǎng)頁中,提取某些內(nèi)容
Python版
【教程】抓取網(wǎng)并提取網(wǎng)頁中所需要的信息 之 Python版
C#版
【教程】抓取網(wǎng)并提取網(wǎng)頁中所需要的信息 之 C#版
想要抓取某些動態(tài)網(wǎng)頁中的某些內(nèi)容
此處,,目前已有的教程,,是從頭開始解釋整個過程的:
【教程】如何抓取動態(tài)網(wǎng)頁內(nèi)容
然后解釋之前所介紹的,如何用工具分析的:
【教程】以抓取網(wǎng)易博客帖子中的最近讀者信息為例,,手把手教你如何抓取動態(tài)網(wǎng)頁中的內(nèi)容
關(guān)于代碼實(shí)現(xiàn),,等以后會更新的,。
但是,其實(shí),,相關(guān)的代碼,,去參考別的,靜態(tài)網(wǎng)頁內(nèi)容提取,,模擬登陸方面的代碼,,也都是可以的。
想要模擬登陸某個網(wǎng)站
Python版
【教程】模擬登陸網(wǎng)站 之 Python版(內(nèi)含兩種版本的完整的可運(yùn)行的代碼)
C#版
【教程】模擬登陸網(wǎng)站 之 C#版(內(nèi)含兩種版本的完整的可運(yùn)行的代碼)
總結(jié)
總之,,做任何事情,,都是先要搞懂邏輯,然后才是如何實(shí)現(xiàn),。
希望這里把邏輯和實(shí)現(xiàn),,都解釋清楚了。