抓取網頁,分析網頁內容,模擬登陸網站的邏輯/流程和注意事項


原文網址:http://www.crifan.com/summary_about_flow_process_of_fetch_webpage_simulate_login_website_and_some_notice/

這里只是做為小結和吸收要點

 

去訪問一個URL地址,獲得對應的網頁的過程,其對應的內部機制是

准備好對應的Http請求(Http Request)+ 提交對應的Http Request

–>

獲得返回的響應(Http Response) + 獲得Http Response中的網頁源碼

 

一: 准備此Http請求Request (訪問URL之前的准備工作)

    1:基本的url + 查詢字符串

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

URL地址,其實涉及到編碼和解碼的問題:

具體可以看如下的

http://www.crifan.com/summary_url_encode_and_decode_during_http_get_post_request

    2:GET還是POST

2.1. get是從服務器上獲取數據,post是向服務器傳送數據。
2.2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
2.3. 對於get方式,
服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
2.4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
2.5. get安全性非常低,post安全性較高。但是執行效率卻比Post方法好。

建議:
2.1、get方式的安全性較Post方式要差些,包含機密信息的話,建議用Post數據提交方式;
2.2、在做數據查詢時,建議用Get方式;而在做數據添加、修改或刪除時,建議用Post方式;

 

更多的get和post的區別其實可以看:http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

  

    3:必須或可選:Headers

即request header,頭信息Headers,包含很多個Header

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

有的時候,甚至不設置任何header也是可以的。

    4:[可選]Post Data

如果是POST方法,則還需要填寫對應的數據:

此數據:

  • IE中稱為request body

  • Chrome中稱為Post Data

換句話說:

如果是GET,則是沒有POST數據的。

提示:所以,你在IE9中通過F12抓取到的內容中,會看到,對於所有的GET請求,對應的“請求正文(request body)”都是空的。

    5: 必須或可選:cookie

很多時候,訪問對應url還需要提供對應的cookie。

一般來說,模擬登陸等情況下,往往都會涉及到cookie的

    6:其他一些可能需要准備的東西

(1)代理proxy

(2)設置最大超時timeout時間

二:提交HttpRequest,即可獲得此http請求的響應Response(訪問URL之后的要做的工作)

1.獲得對應的響應response

2.從響應中獲得對應的網頁源碼等信息

(1)獲得返回的網頁HTML源碼(或json等)

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

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

【網頁抓取過程中的注意事項】

1.網頁跳轉Redirect

(1)直接跳轉

(2)間接跳轉

A。javascript腳本中有對應的代碼實現網頁跳轉

B。本身所返回的HTML源碼中包含refresh動作,所實現的網頁跳轉

 

三:抓取網頁后,如何分析獲得所需要的內容

      一般來說,去訪問一個URL地址,所返回的內容,多數都是網頁的HTML源碼,也有其他一些形式的內容的,比如json等。

1. 對於HTML源碼:

  (1)如果是Python中的話,可以通過調用第三方的Beautifulsoup庫

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

   (2)直接使用正則表達式自己去提取相關內容

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

B:C#:使用Regex類,用對應的pattern和match函數來匹配。

關於C#中的Regex,更多內容請參考:

【總結】C#中的Regex的使用心得和注意事項

2.對於Json

可以先去看專門的關於JSON的介紹:

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

 

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

(1)使用庫(函數)來處理

A。Python

Python中,有對應的json庫,常用的是json.load,即可將json格式的字符串,轉換為對應的字典Dictionary類型變量,很是好用。

(2)還是使用正則表達式來處理

A。Python

Python中的re模塊,同上。

B。C#

C#中貌似沒有自帶json的庫,倒是有很多第三方的json庫,但是我當時遇到解析json字符串的時候,覺得這些庫,使用起來還是很麻煩,所以還是直接使用regex類來處理了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM