模拟Form提交,得到结果页内容

本文介绍了一种根据任务要素构造特定网站抓取URL的方法,并通过正则表达式解析搜索结果页面来获取目标链接。该方法首先定义了POST参数,然后通过WebClient发送请求获取远程信息,最后解析HTML内容提取所需URL。
        /// <summary>
        /// 根据任务要素构造抓取的url
        /// </summary>
        protected override string createUrl(int pageIndex)
        {
            NameValueCollection PostVars = new NameValueCollection();
            PostVars.Add("mod", "forum");
            PostVars.Add("srchtype", "title");
            PostVars.Add("srhfid", "0");
            PostVars.Add("srhlocality", "portal::index");
            PostVars.Add("srchtxt", keyWord);
            string sRemoteInfo = CommonFunction.getSearchResault(PostVars, "http://bbs.tuniu.com/search.php?searchsubmit=yes", true);

            Regex regexRtCt = new Regex(@"<div class=""pgs cl mbm""><div class=""pg"">[\s\S]+?</div></div>");
            MatchCollection matchRtCtList = regexRtCt.Matches(sRemoteInfo);
            Regex regexRtCtHref = new Regex(@"<a[\s\S]+?>[\s\S]+?</a>");
            Regex regexRtCtURL = new Regex(@"href=""[\s\S]+?"">");
            string strUrlTemp = "http://bbs.tuniu.com/" + regexRtCtURL.Match(regexRtCtHref.Matches(matchRtCtList[0].Value)[0].Value).Value.Replace("href=\"", "").Replace("\">", "").Replace("page=2", "page=");

            string strUrl = strUrlTemp + pageIndex;
            
            return strUrl;
        }

        /// <summary>
        /// 模拟Form提交,得到结果页内容
        /// </summary>
        public static string getSearchResault(NameValueCollection PostVars, string searchUrl, bool UrlEncodeUtf8)
        {
            WebClient WebClientObj = new WebClient();
            string sRemoteInfo = "";
            try
            {
                byte[] byRemoteInfo = WebClientObj.UploadValues(searchUrl, "POST", PostVars);
                if (UrlEncodeUtf8)
                {
                    sRemoteInfo = System.Text.Encoding.UTF8.GetString(byRemoteInfo);
                }
                else
                {
                    sRemoteInfo = System.Text.Encoding.Default.GetString(byRemoteInfo);
                }
            }
            catch
            {
            }
            return sRemoteInfo;
        }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值