HttpWebRequest及正则表达式

本文介绍了一种使用HttpWebRequest和正则表达式从网页中抓取链接及其标题的方法。通过发送GET请求并解析返回的HTML内容,成功实现了对指定网页链接信息的采集。

      

 近日做了一下采集某个网页的内容,并获取其中所有的链接地址及链接标题。

 其中用到了HttpWebRequest和正则表达式,代码备忘如下:
 

 //WebClient wc = new WebClient();
//NetworkCredential nc = new NetworkCredential("用户名", "密码", "域名");
        
//wc.Credentials = nc;
        
//Response.Write(Server.HtmlEncode(wc.DownloadString("地址")));

        HttpWebRequest req 
= (HttpWebRequest)WebRequest.Create("地址");
        req.Credentials 
= new NetworkCredential("用户名""密码""域名");
        req.Method 
= "GET";        
        IAsyncResult ir 
= req.BeginGetResponse(nullnull);
        ir.AsyncWaitHandle.WaitOne();
ExpandedBlockStart.gifContractedBlock.gif        
try {
            HttpWebResponse response1 
= (HttpWebResponse)req.EndGetResponse(ir);
            System.IO.Stream stream 
= response1.GetResponseStream();
            sReader 
= new System.IO.StreamReader(stream, System.Text.Encoding.GetEncoding("GB2312"));
ExpandedSubBlockStart.gifContractedSubBlock.gif            
if (null != sReader) {
            
string pattern = @"<a(?:\s*?)href=['|""](?<url>[\s\S]+?)['|""]>(?<title>[\s\S]+?)</a>";
            System.Text.RegularExpressions.MatchCollection matchs 
= System.Text.RegularExpressions.Regex.Matches(sReader.ReadToEnd(), pattern);
            
if (matchs.Count <= 0)
                Response.Write(
"没有匹配项");
            
else
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
for(int i=0;i<50;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    Response.Write(
"链接:" + matchs[i].Groups["url"].Value+"___名称:"+matchs[i].Groups["title"].Value+"<br />");
                }

            }

            }

        }

ExpandedBlockStart.gifContractedBlock.gif        
catch (System.Exception ex) {
            Response.Write(ex.Message);
        }

ExpandedBlockStart.gifContractedBlock.gif        
finally {
ExpandedSubBlockStart.gifContractedSubBlock.gif            
if (null != sReader) {
                sReader.Dispose();
            }

        }

 

这其中,正则表达式迷糊了我一会儿:因为没有使用惰性匹配,导致每一次都只能匹配到一条信息。。。。

 

转载于:https://www.cnblogs.com/McJeremy/archive/2009/06/03/1495475.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值