예제 #1
0
        public void Search2()
        {
            Method md = new Method();



            try
            {
                int page = 50;



                if (textBox5.Text.Trim() == "")
                {
                    MessageBox.Show("请输入关键字!");
                    return;
                }


                string   city     = comboBox1.SelectedItem.ToString();
                string[] keywords = textBox5.Text.Trim().Split(new string[] { "," }, StringSplitOptions.None);
                string[] areas    = textBox4.Text.Trim().Split(new string[] { "," }, StringSplitOptions.None);



                foreach (string keyword in keywords)

                {
                    foreach (string area in areas)

                    {
                        //  string html1 = meituan_GetUrl("http://i.meituan.com/s/" + Getpinyin(city) + "-" + keyword +  "?p=1");

                        if (checkBox1.Checked == true)
                        {
                            this.Rxg0 = @"title:([\s\S]*?);";
                            this.Rxg1 = @"""phone"":""([\s\S]*?)""";
                        }
                        else
                        {
                            this.Rxg0 = @"<h1 class=""dealcard-brand"">([\s\S]*?)</h1>";
                            this.Rxg1 = @"data-tele=""([\s\S]*?)""";
                        }

                        for (int i = 1; i <= page; i++)

                        {
                            String Url     = "http://i.meituan.com/s/" + Getpinyin(city) + "-" + keyword + "?bid=" + area + "&p=" + i;
                            string strhtml = meituan_GetUrl(Url, this.cookie);  //定义的GetRul方法 返回 reader.ReadToEnd()

                            string Rxg = @"data-href=""//i.meituan.com/poi/([\s\S]*?)"">";



                            MatchCollection all = Regex.Matches(strhtml, Rxg);

                            ArrayList lists = new ArrayList();
                            foreach (Match NextMatch in all)
                            {
                                lists.Add("http://i.meituan.com/poi/" + NextMatch.Groups[1].Value);
                            }

                            if (lists.Count == 0)  //当前页没有网址数据跳过之后的网址采集,进行下个foreach采集

                            {
                                break;
                            }

                            string tm1 = DateTime.Now.ToString();  //获取系统时间

                            textBox3.Text = tm1 + "-->正在采集" + city + "" + keyword + "第" + i + "页" + "\r\n";

                            foreach (string list in lists)
                            {
                                int index = this.dataGridView1.Rows.Add();    //利用dataGridView1.Rows.Add()事件为DataGridView控件增加新的行,该函数返回添加新行的索引号,即新行的行号,然后可以通过该索引号操作该行的各个单元格,如dataGridView1.Rows[index].Cells[0].Value = "1"。这是很常用也是很简单的方法。

                                String Url1     = list;
                                string strhtml1 = meituan_GetUrl(Url1, this.cookie);  //定义的GetRul方法 返回 reader.ReadToEnd()



                                string Rxg2 = @"addr:([\s\S]*?)&";



                                Match name = Regex.Match(strhtml1, Rxg0);

                                Match tell = Regex.Match(strhtml1, Rxg1);


                                Match addr = Regex.Match(strhtml1, Rxg2);



                                this.dataGridView1.Rows[index].Cells[0].Value = index;
                                this.dataGridView1.Rows[index].Cells[1].Value = name.Groups[1].Value;

                                this.dataGridView1.Rows[index].Cells[2].Value = tell.Groups[1].Value;

                                this.dataGridView1.Rows[index].Cells[3].Value = addr.Groups[1].Value;


                                this.dataGridView1.Rows[index].Cells[4].Value = city;


                                Method.EachToData(dataGridView1, index);


                                this.dataGridView1.CurrentCell = this.dataGridView1.Rows[index].Cells[0];  //让datagridview滚动到当前行



                                //if (this.skinDataGridView1.Rows[index].Cells[1].Value.ToString().Contains("-"))//如果表格值包含“-”则。。。
                                //{


                                //    skinDataGridView1.Rows.RemoveAt(index);

                                //}

                                while (this.zanting == false)
                                {
                                    Application.DoEvents();//如果loader是false表明正在加载,,则Application.DoEvents()意思就是处理其他消息。阻止当前的队列继续执行。
                                }

                                Application.DoEvents();
                                Thread.Sleep(1000);
                            }
                        }
                    }
                }
            }


            catch (System.Exception ex)
            {
                textBox3.Text = ex.ToString();
            }
        }