歡迎您的來訪!有源碼,好建站(m.bmm520.net)源碼海洋源碼網為您提供快速建站平臺.
      當前位置: 首頁 > 行業資訊 > c# .net 資料 >

      源碼海洋網-C# 從需要登錄的網站上抓取數據

      時間:2020-11-28 22:09來源:未知 作者:源碼海洋 點擊:
      背景:昨天一個學金融的同學讓我幫她從一個網站上抓取數據,然后導出到excel,粗略看了下有1000+條記錄,人工統計的話確實不可能。雖說不會,但作為一個學計算機的,我還是厚著臉皮答應了。 。 剛開始想的是直接發送GET請求,然后再解析返回的html不就可以獲

       背景:昨天一個學金融的同學讓我幫她從一個網站上抓取數據,然后導出到excel,粗略看了下有1000+條記錄,人工統計的話確實不可能。雖說不會,但作為一個學計算機的,我還是厚著臉皮答應了。 。

      剛開始想的是直接發送GET請求,然后再解析返回的html不就可以獲取需要的信息嗎?的確,如果是不需要登錄的網站,這樣可行,但對于這個網站就行不通。所以首先我們需要做的就是抓包,即分析用戶登錄時瀏覽器向服務器發送的POST請求。許多瀏覽器都自帶抓包工具,但我還是更喜歡[httpwatch]

      抓包過程:

      1.安裝httpwatch

      2.用IE瀏覽器進入網站的登錄頁面

      3.打開httpwatch的Record開始跟蹤

      4.輸入賬號密碼,確認登錄,得到下面的數據:

      重點看POST請求中的Url和postdata,以及服務器返回的cookies

      cookie里面包含有登錄信息,保險起見,我們可以把這4個cookie值都傳給服務器。

      首先給出C#發送POST請求的代碼:(目的是得到服務器返回的cookie)

              string Url = "URL";
              string postDataStr = "POST Data";//因為上面都是離散的鍵值對,我們可以從Stream中直接找到postDataStr
              //登錄并獲取cookie
              HttpPost(Url, postDataStr, ref cookie);
      
              private string HttpPost(string Url, string postDataStr, ref CookieContainer cookie)
              {
                  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                  request.Method = "POST";
                  request.ContentType = "application/x-www-form-urlencoded";
      
                  byte[] postData = Encoding.UTF8.GetBytes(postDataStr);
                  request.ContentLength = postData.Length;
                  request.CookieContainer = cookie;
                  Stream myRequestStream = request.GetRequestStream();
                  myRequestStream.Write(postData, 0, postData.Length);
                  myRequestStream.Close();
      
                  HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                  response.Cookies = cookie.GetCookies(response.ResponseUri);
                  Stream myResponseStream = response.GetResponseStream();
                  StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                  string retString = myStreamReader.ReadToEnd();
                  myStreamReader.Close();
                  myResponseStream.Close();
      
                  return retString;
              }

      有了cookie后,就可以從網站上抓取自己需要的數據了,接下來就是通過發送GET請求

               private string HttpGet(string Url, string postDataStr, CookieContainer cookie)
              {
                  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
                  request.Method = "GET";
                  request.ContentType = "text/html;charset=UTF-8";
                  request.CookieContainer = cookie;
      
                  HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                  Stream myResponseStream = response.GetResponseStream();
                  StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                  string retString = myStreamReader.ReadToEnd();
                  myStreamReader.Close();
                  myResponseStream.Close();
      
                  return retString;
              }

      因為服務器返回的是html,如何快速從大量的html中獲取需要的信息呢?此處,我們可以引用一個高效且強大的第三方庫NSoup(網上也有人推薦使用htmlparser,但通過我個人比較發現,htmlparser無論是在效率還是簡潔性上,都遠不如NSoup)

      由于網上對于NSoup的教程比較上,大家也可以參考JSoup的教程:http://www.open-open.com/jsoup/

      最后給出我從網站上抓取的部分數據:

       

      (責任編輯:admin)本文地址:http://m.bmm520.net/info/net/2020/1128/22114.html

      推薦資訊

      亚洲视频在线观看视频| 亚洲欧洲国产精品久久| 亚洲最大无码中文字幕| 久久亚洲精品人成综合网| 久久精品亚洲综合一品| 亚洲成a人片在线观看无码专区| 国产成人亚洲精品91专区手机| 亚洲性日韩精品一区二区三区| 国产成人久久精品亚洲小说| 毛片亚洲AV无码精品国产午夜| 精品久久亚洲一级α| 国产成人精品日本亚洲语音| 国产偷国产偷亚洲清高APP| 精品国产日韩亚洲一区91| 日日摸日日碰夜夜爽亚洲| 亚洲成av人片在线观看天堂无码| 亚洲AV蜜桃永久无码精品| 国产精品亚洲产品一区二区三区 | 不卡精品国产_亚洲人成在线| 亚洲熟伦熟女新五十路熟妇| 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲国产精品SSS在线观看AV| 亚洲av无码不卡一区二区三区| 久久夜色精品国产亚洲AV动态图| 亚洲bt加勒比一区二区| 久久亚洲春色中文字幕久久久| 亚洲电影在线免费观看| 亚洲Av高清一区二区三区| 亚洲欧美成人av在线观看| 伊在人亚洲香蕉精品区麻豆| 亚洲日韩在线中文字幕第一页| 亚洲综合图色40p| 亚洲国产第一页www| 亚洲福利视频一区二区三区| 亚洲自国产拍揄拍| 久久水蜜桃亚洲AV无码精品 | 亚洲国产精品综合久久网络| 国产亚洲精品福利在线无卡一| 亚洲AV永久青草无码精品| 亚洲精品国产成人中文| 77777亚洲午夜久久多喷|