其实采集并没有什么只是经验少有时有人说 “采集” 有时会误导人
说白了就是: 首先得到一个入口“入口 就是url地址” 通过正则表达式 “(?<=" + (变量)+ ").*?(?=" + (变量)+ ") 就是从什么后开始 到什么时候结束 是开始和结束之间的字符串” 能得到您输入的url地址里面的网页所有代码赋给一个字符串,然后在得到这个字符串里面的所有url地址(href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']),放在泛型里面,然后便利泛型调用某方法(方法里要做的事 就是得到 XX内容 XX标题 XX时间 XX什么 得到你想得到的)得到之后再把本网页里面的所有url放到放到泛型里继续便利 一只到不符合条件或者泛型里没有数据为止
/// <summary>
/// 获得网页代码
/// </summary>
/// <param name="Url">路径</param>
/// <param name="ecode">编码</param>
/// <returns>字符串</returns>
public string getUrltoHtml(string Url, string ecode)//第一个残参数url是地址,第二个是编码格式 gb2312|Utf-8 返回string类型 返回的就是本url里面的所有代码
{
try
{
System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
System.Net.WebResponse wResp = wReq.GetResponse();
System.IO.Stream respStream = wResp.GetResponseStream();
System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding(ecode));
return reader.ReadToEnd();
}
catch
{
return "";
}
}
/// <summary>
/// 得到标题
/// </summary>
/// <param name="StrHtml">网页代码</param>
/// <param name="str1">从什么时候开始</param>
/// <param name="str2">到什么时候结束</param>
/// <returns>字符串</returns>
public string getword(string StrHtml, string str1, string str2)//这个方法是得到你要获取的内容“比如:asd是字符串 你输入第一个字符串str1="a",str2="d" 那么你得到的就是s, 这个方法的第一个参数是网页的全代码 配合上面的方法一起用 上面方法是传url和编码格式得到 网页全代码,第二个是有截取的字符开始的位置,第三个参数是要截取的字符 结束位置”
{
string rv = "";
string strRegex = "(?<=" + str1 + ").*?(?=" + str2 + ")";
rv = System.Text.RegularExpressions.Regex.Match(StrHtml, strRegex, System.Text.RegularExpressions.RegexOptions.Singleline).ToString();
return rv;
}
//本方法有三个参数 第一个url地址 第二个是编码格式 第三个是条件 条件可加可不加 上面说到调用方法说的就是调用本方法
private void geturls(string url, string code, string txtcondition)
{
//调用方法得到网页所有代码txtcode编码格式
string htmlstring = getUrltoHtml(url, code);
//得到本网页的标题
string title = getword(htmlstring, txttitle1.Text, txttitle2.Text);
//得到内容
string content = getword(htmlstring, textBox1.Text, textBox2.Text);
//发布到webservice加到数据库
if (url.IndexOf(txtcondition) > 0 && url.IndexOf("http://") >= 0)
{
ServiceReference1.Service1SoapClient l = new ServiceReference1.Service1SoapClient();
l.Addcollectioninfo(url,title,content);
}
System.Collections.IEnumerator enu;
//定义一个字符串用来在后面替换得到的url多余字符
string weburl = "";
//得到url的正则表达式
string regex = "href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']";
Regex re = new Regex(regex);
//在htmlstring所有网页代码里找到你要的标题
MatchCollection matches = re.Matches(htmlstring);
enu = matches.GetEnumerator();
while (enu.MoveNext() && enu.Current != null)
{
Match match = (Match)(enu.Current);
//找到的url多余地方替换掉
weburl = match.Value.Replace("\"", "").Replace("href=", "");
weburl = jeudui(txturl.Text, weburl);
//把符合条件的url在家到反省里
if (listurl.IndexOf(weburl) == -1 && weburl.IndexOf(txtcondition) > 0 && url.IndexOf("http://") >= 0)
{
listurl.Add(weburl);
}
}
}
/// <summary>
/// 用来判断url地址是否是本网站 在得到网页全代码时传来url地址
/// </summary>
private string EstimateWhetherEquality(string url)
{
string s = "";
try
{
Uri baseUri = new Uri(url);
//列:http://www.baidu.com/asd/asd/asd 用过Uri baseUri = new Uri(http://www.baidu.com/asd/asd/asd) 得到的就是www.baidu.com
s = baseUri.Host;
return s;
}
catch
{
return s;
}
}
一定要看 明白在用 要不然下次你还是不回