利用WebBrowser和StreamReader動態抓取網頁信息

        最近在起名網測名字,名字最後一個字是十二畫的,筆畫十二畫的漢字有將近2000,人工測試用時粗略估計是(如果是想測試網站的性能的話,可以試試,具體操作時間有興趣的可以總結下),廢話有點多,轉入主題------利用WebBrowser加載自動生成的頁面,再用StreamReader讀取頁面內容,最後抓取網頁中的指定字符串(及姓名測試分值),具體如下:

 public partial class Form1 : Form
 {
        public Form1()
        {
            InitializeComponent();
        }
private void Form1_Load(object sender, EventArgs e)
        { this.Start();}
 
private void Start()
        {
            string NewName = "詀趈惉棧琖脹掌旐棹詔喆蟄讋葴幀寊遉揕湞塦軫覙診裖媜幁揁箏証崻彘騭傂……";  //字太多就不都列出來了
            List<Charactor> list = new List<Charactor>();
 
            for (int i = 0; i < Character.Length; i++)
            {
                NewName = Character.Substring(i, 1);
                list.Add(new Charactor(NewName));
            }
 
            GetHtml(list);
 
            DRCNet.Utility.LogUtility.WriteLog("Game Over", "NameScore.txt");
        }
bool loading = true;   //該變量表示網頁是否正在加載.
        string html = string.Empty;
        WebBrowser browser = new WebBrowser();
        public void GetHtml(List<Charactor> names)
        {
            browser.Navigated += new WebBrowserNavigatedEventHandler(browser_Navigated);
            foreach (Charactor name in names)
            {
                loading = true; //表示正在加載
                browser.Navigate("http://www.1518.com/s?st=2&word1=逍遙&word2=" + name.Ming); // 加載頁面,傳入參數,word1姓氏,word2名稱
                this.textBox1.Text = name.Ming;
 
                while (loading)
                {
                    Application.DoEvents();//等待本次加載完畢才執行下次循環.
                }
            }
        }
 
int i = 0;  
 
        private void browser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            i++;
            if (i % 10 == 0) // 假設每張頁面要執行3次browser_Navigated方法,那麼這表示網頁全部內容加載完成.(至於這個3要怎麼樣得到,那是仁者見仁的事情了,呵呵)
            {
                loading = false;//在加載完成後,將該變量置爲false,下一次循環隨即開始執行.
                string _name = this.textBox1.Text;//.Substring(this.textBox1.Text.Length - 2);
                System.IO.StreamReader getReader = new System.IO.StreamReader(browser.DocumentStream, System.Text.Encoding.GetEncoding("gb2312"));
                string html = getReader.ReadToEnd();
                int _index = html.IndexOf("<div class=\"njfen\">");
                string _html = html.Remove(0, _index + 19);
                string _score = html.Length > 0 ? _html.Substring(0, 2) : "0";
 
                DRCNet.Utility.LogUtility.WriteLog(_name + "   " + _score, "NameScore.txt");
                i = 0;
            }
 
        }
 
}
 
public class Charactor
    {
        private string _ming;
        
        public string Ming
        {
            get { return this._ming; }
            set { this._ming = value; }
        }
        
        public Charactor() { }
 
        public Charactor(string name)
        {
            this._ming = name;
        }
    }
 
不足之處,望幫忙指正! 祝大家中秋快樂!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章