说说特定的采集,最简化的C#采集代码

时间:13-01-19 栏目:C#开发 作者:kyle 评论:1 点击: 9,949 次

群里面不少兄弟是冲着C#这块来着的。

开发程序和SEO的结合,无疑可以为各种工作提供极大的便利。

废话不多说,直接说重点和核心。

当我们需要抓取某个页面的东西的时候。

你首先应该想到的是使用火车头去极速抓取。

当然,如果这个页面的东西,你需要的不是特别多的时候,再去写规则就有点浪费表情了。

我这里提供2种方法极速抓取少量页面的内容。先说简单的。

方法一:C#抓取。

我先贴2个代码上来。

等下说明用途

/// <summary>
/// 读取HTML代码根据代码中的元素判断是不是乱码,返回正确的HTML结果
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string GetHtml(string url)
{
    string htm = string.Empty;
    var data = new WebClient { }.DownloadData(url); //根据textBox1的网址下载html
    var r_utf8 = new StreamReader(new MemoryStream(data), Encoding.UTF8); //将html放到utf8编码的StreamReader内
    var r_gbk = new StreamReader(new MemoryStream(data), Encoding.Default); //将html放到gbk编码的StreamReader内
    var t_utf8 = r_utf8.ReadToEnd(); //读出html内容
    var t_gbk = r_gbk.ReadToEnd(); //读出html内容
    if (!isLuan(t_utf8)) //判断utf8是否有乱码
    {
        htm = t_utf8;
        Console.WriteLine("编码是:utf8");
    }
    else
    {
        htm = t_gbk;
        Console.WriteLine("编码是:gbk");
    }
    return htm;
}

/// <summary>
/// 用UTF解开判断是不是有乱码,有的话返回真,否则假
/// </summary>
/// <param name="txt">是解析的字符串是不是UTF8字符串</param>
/// <returns></returns>
private static bool isLuan(string txt)
{
    var bytes = Encoding.UTF8.GetBytes(txt);
    //239 191 189
    for (var i = 0; i < bytes.Length; i++)
    {
        if (i < bytes.Length - 3)
            if (bytes[i] == 239 && bytes[i + 1] == 191 && bytes[i + 2] == 189)
            {
                return true;
            }
    }
    return false;
}

使用上面的C#代码可以快速抓取HTML源代码。

如果你要抓百度,一行代码就可以完成

string html=GetHtml(“http://www.baidu.com”);

很多工具需要设定编码。这段代码可以自动识别网页是UTF-8还是GB2312的编码。不懂页面编码的。请自己百度。

然后就开始取值了。

也要送大家一段代码。

/// <summary>
/// 匹配正则表达式到List
/// </summary>
/// <param name="content">要匹配的内容</param>
/// <param name="regexStr">匹配的正则格式</param>
/// <returns></returns>
public static List<string> RegexMatches(string content, string regexStr)
{
    List<string> result = new List<string>();
    try
    {
        MatchCollection matchesFound = Regex.Matches(content, regexStr, RegexOptions.IgnoreCase);
        if (matchesFound.Count > 0)
        {
            for (int i = 0; i < matchesFound.Count; i++)
                result.Add(matchesFound[i].Value);
        }
    }
    catch (Exception ex) { MessageBox.Show("正则出错:" + ex.Message); }
    return result;
}

这段代码可以匹配正则到一个数组里面。

然后我们继续一行代码取出想要的东西。

string result=string.Join(Environment.NewLine,list.ToArray());

这样就可以一行一条结果。取出想要的东西来。

总结起来,也只有3行代码你需要写:

string html=GetHtml(“www.baidu.com”);

List<string> list=RegexMatches(html,”你要抓的正则”);

string result=string.Join(Environment.NewLine,list.ToArray());

最后输出result就是你需要的结果了。很简单。有木有。

上面的2个方法函数是我自己收藏很久的。希望有点用。

 

方法二:人工苦力法

复制你要抓取页面的源代码。

1

这个软件的下载地址在软件标题上面,自己去找哈。

复制源代码,写好正则,匹配。导出。拿出需要的结果。呼呼,有莫有。

觉得没用么?

错了。如果你要抓取10个页面的内容,连续复制10个页面的内容过来,写个正则,所有东西就出来了。导出之后就可以取用你想要的东西了。

每个小工具发挥到极致,你会更快更好的处理自己的工作。有问题欢迎加群交流。

成都SEO小五嚎2句: 本文是(成都SEO小五)辛苦弄出来的,转载成都SEO小五原创的请保留链接: 说说特定的采集,最简化的C#采集代码,3Q

说说特定的采集,最简化的C#采集代码:目前有1 条留言,牛逼吧!

  1. 沙发
    YY:

    不会写代码,只会用工具 🙄

    2013-01-19 4:01 pm [回复]

来给哥评论评论


------====== 小五公告 ======------
成都SEO小五,专注成都搜索引擎优化。
小五善长站内外优化,C#、PHP开发,中英文SEO,Google中英文和百度优化技术。欢迎群内交流。伸手党请绕路,求资源的请绕开,求问题解答的请进群内交流。开放了一个QQ交流群:160750032。加入验证时请标注任何SEO相交字眼。友情链接直接Q我,收录正常,内容大部份原创、SEO或者程序开发、网络营销、线上推广等相关行业即可。

常用工具

赞助广告

来看过哥的人