采集原理 代码直接可用
来源:互联网 发布:网络活动策划方案 编辑:程序博客网 时间:2024/05/20 15:41
其实采集并没有什么只是经验少有时有人说 “采集” 有时会误导人
说白了就是: 首先得到一个入口“入口 就是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;
}
}
一定要看 明白在用 要不然下次你还是不回
- 采集原理 代码直接可用
- repeater 换行 代码直接可用
- 取得用户IP 代码直接可用
- 删除数据库冗余数据 代码直接可用
- Android对话框dialog大全(代码直接可用)
- 第十一个实验 ADC采集实验 亲测代码可用
- VB模拟发送ICMP数据包(代码直接可用)
- javaweb JDBC 数据库连接mysql 配置代码 (直接可用)
- HSV颜色到RGB的转换C++代码 直接可用
- 无需激活直接同步登入discuz,php代码(直接可用)
- 插入排序(直接插入排序法)原理及代码
- 警灯的实现原理,话不多说,直接上代码
- 用户上传EXCEL文件 取值转换成DataSet 代码直接可用
- 导出EXCEL以HTML代码向excel输出不是标准的excel 方法直接可用
- ROW_NUMBER() over(order by id)分页存储过程 代码直接可用
- 图像采集原理
- 一、图像采集原理
- 视频采集原理简介
- java学习笔记(四)
- C++方向经典书籍
- c++中共享内存操作函数CreateFileMapping解析(一)
- 游戏策划新手指南
- 将数组元素颠倒的java代码
- 采集原理 代码直接可用
- c++中共享内存操作函数MapViewOfFile解析(二)
- jQuery控制元素显示、隐藏、切换、滑动的方法
- php操作xml(2)
- 温家宝历年两会记者会引用古诗文盘点
- PHP实现MVC开发得最简单的方法——单点入口
- ListViewItem的类型
- using_where, Using temporary ,using_filesort 分享
- Jquery AJAX