轉自:
http://www.crifan.com/how_to_use_some_language_python_csharp_to_implement_crawl_website_extract_dynamic_webpage_content_emulate_login_website/
背景
在網路,網頁,網站處理方面,很多人都遇到過,想要用某種語言(Python,C#等),去實現一些需求,常見的有這幾大類: 想要從某靜態網頁中,提取某些內容 想要抓取某些動態網頁中的某些內容 想要類比登陸某個網站
對於這類需求,其基本的背後邏輯,都是相同的。
下面就是來介紹一下,如何?這些功能。
搞懂訪問網頁所涉及的http相關的邏輯知識
先要搞懂對應的,訪問url地址的背後的邏輯:
需要你提供哪些內容: url headers:部分可選,部分必須 cookies(可選) post data 當是POST方法時,才需要
然後獲得什麼樣的內容: html源碼(或其他的,json字串,圖片的資料等等) cookie(可能有):對於後續的訪問其他的url,可能需要提供此處所返回的(新的)cookie
詳細解釋,可參考:
【整理】關於抓取網頁,分析網頁內容,類比登陸網站的邏輯/流程和注意事項
提示:
1.html的charset編碼
關於html網頁的編碼方面的背景知識,最好再去看看:
【整理】關於HTML網頁源碼的字元編碼(charset)格式(GB2312,GBK,UTF-8,ISO8859-1等)的解釋
搞懂你所要處理的網頁的執行的邏輯過程
簡單的說就是,你自己所要處理的某個url地址,需要提供哪些值,然後才能獲得你所需要的值。
先把你自己關心的這些邏輯搞懂,才能談到後續用代碼實現出來。
如果此邏輯過程很簡單,那麼你不用工具去分析,自己看代碼,能自己分析出來,也是可以的。
但是此過程往往都很複雜,所以,一般都需要使用對應的開發人員工具去分析。
比如用IE9的F12去捕獲對應的執行過程,然後從中分析出你所需要關心的某些網頁的執行邏輯的。
詳細解釋和示範參見:
【教程】手把手教你如何利用工具(IE9的F12)去分析類比登陸網站(百度首頁)的內部邏輯過程
提示:
1.其他各種的分析工具
對於IE9的F12,等不熟悉的話, 可以先去看看:
【總結】瀏覽器中的開發人員工具(IE9的F12和Chrome的Ctrl+Shift+I)-網頁分析的利器
對於此部分內容,另外還有個文章可參考:
【整理】各種瀏覽器中的開發人員工具Developer Tools:IE9的F12,Chrome的Ctrl+Shift+J,Firefox的Firebug
2. 複雜的參數值的分析
在用工具分析的過程中,你會發現有些所要分析的值,是相對比較複雜的,無法直接就獲得,所以就需要去調試分析。
關於如何分析複雜的參數值是如何獲得的,可以參考:
【教程】如何利用IE9的F12去分析網站登陸過程中的複雜的(參數,cookie等)值(的來源)
3.另外一個例子
後來又寫了個例子,用於分析如何從songtaste的播放頁面地址中找到歌曲的真真實位址:
【教程】如何用IE9的F12去抓取某首Songtaste歌曲的真真實位址
用某種語言去實現上述的邏輯
等把你要處理的所有的邏輯過程和執行順序,都搞懂了之後,然後才是用某種語言去實現對應的邏輯過程。
提示:
不過,關於具體在代碼中實現對應的邏輯,有一些通用的邏輯:
1. url地址的編碼和解碼
其中,如果涉及到,url地址的解碼和編碼的話,可以參考:
【整理】關於http(GET或POST)請求中的url地址的編碼(encode)和解碼(decode)
2.關於headers,cookie,post data等如何處理
雖然是為動態網頁抓取所寫,但是基本的邏輯都是一樣的:
【整理】網頁抓取,類比登陸,抓取動態網頁內容等過程中,所涉及的Headers資訊,Cookie資訊,POST資料的處理邏輯
3.關於提取網頁內容的方法
對於簡單的html網頁中的內容,當然是可以使用Regex的。
但是對於複雜的內容提取,還是建議用第三方的特定的庫去處理:
【整理】關於用Regex處理html代碼方面的建議
其中:
Python:相關用於解析html的庫,推薦用:
【總結】Python的第三方庫BeautifulSoup的使用心得
關於程式碼範例示範方面,根據之前的三大類需求,有三大類系列的教程: 想要從某靜態網頁中,提取某些內容 Python版
【教程】抓取網並提取網頁中所需要的資訊 之 Python版
C#版
【教程】抓取網並提取網頁中所需要的資訊 之 C#版 想要抓取某些動態網頁中的某些內容
此處,目前已有的教程,是從頭開始解釋整個過程的:
【教程】如何抓取動態網頁內容