`
lucc
  • 浏览: 10895 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

网页信息抓取

阅读更多

 

云翔在线聊天室提供在线聊天室,WebIM,网盘等服务,WebIM可以免费建群(不限人数),聊天记录在线存储。

之前做聊天室时,由于在聊天室中提供了新闻阅读的功能,写了一个从网页中抓取信息(如最新的头条新闻,新闻的来源,标题,内容等)的类,本文将介绍如何使用这个类来抓取网页中需要的信息。本文将以抓取博客园首页的博客标题和链接为例:

image

上图显示的是博客园首页的DOM树,显然只需提取出class为post_item的div,再重中提取出class为titlelnk的a标志即可。这样的功能可以通过以下函数来实现:

/// <summary>
/// 在文本html的文本查找标志名为tagName,并且属性attrName的值为attrValue的所有标志
/// 例如:FindTagByAttr(html, "div", "class", "demo")
/// 返回所有class为demo的div标志
/// </summary>
public static List<HtmlTag> FindTagByAttr(String html, String tagName, String attrName, String attrValue)
{
    String format = String.Format(@"<{0}\s[^<>]*{1}\s*=\s*(\x27|\x22){2}(\x27|\x22)[^<>]*>", tagName, attrName, attrValue);
    return FindTag(html, tagName, format);
}

public static List<HtmlTag> FindTag(String html, String name, String format)
{
    Regex reg = new Regex(format, RegexOptions.IgnoreCase);
    Regex tagReg = new Regex(String.Format(@"<(\/|)({0})(\s[^<>]*|)>", name), RegexOptions.IgnoreCase);

    List<HtmlTag> tags = new List<HtmlTag>();
    int start = 0;

    while (true)
    {
        Match match = reg.Match(html, start);
        if (match.Success)
        {
            start = match.Index + match.Length;
            Match tagMatch = null;
            int beginTagCount = 1;

            while (true)
            {
                tagMatch = tagReg.Match(html, start);
                if (!tagMatch.Success)
                {
                    tagMatch = null;
                    break;
                }
                start = tagMatch.Index + tagMatch.Length;
                if (tagMatch.Groups[1].Value == "/") beginTagCount--;
                else beginTagCount++;
                if (beginTagCount == 0) break;
            }

            if (tagMatch != null)
            {
                HtmlTag tag = new HtmlTag(name, match.Value, html.Substring(match.Index + match.Length, tagMatch.Index - match.Index - match.Length));
                tags.Add(tag);
            }
            else
            {
                break;
            }
        }
        else
        {
            break;
        }
    }

    return tags;
}

有了以上函数,就可以提取需要的HTML标志了,要实现抓取,还需要一个下载网页的函数:

public static String GetHtml(string url)
{
    try
    {
        HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest;
        req.Timeout = 30 * 1000;
        HttpWebResponse response = req.GetResponse() as HttpWebResponse;
        Stream stream = response.GetResponseStream();

        MemoryStream buffer = new MemoryStream();
        Byte[] temp = new Byte[4096];
        int count = 0;
        while ((count = stream.Read(temp, 0, 4096)) > 0)
        {
            buffer.Write(temp, 0, count);
        }

        return Encoding.GetEncoding(response.CharacterSet).GetString(buffer.GetBuffer());
    }
    catch
    {
        return String.Empty;
    }
}

以下以抓取博客园首页的文章标题和链接为例,介绍如何使用HtmlTag类来抓取网页信息:

class Program
{
    static void Main(string[] args)
    {
        String html = HtmlTag.GetHtml("http://www.cnblogs.com");
        List<HtmlTag> tags = HtmlTag.FindTagByAttr(html, "div", "id", "post_list");
        if (tags.Count > 0)
        {
            List<HtmlTag> item_tags = tags[0].FindTagByAttr("div", "class", "post_item");
            foreach (HtmlTag item_tag in item_tags)
            {
                List<HtmlTag> a_tags = item_tag.FindTagByAttr("a", "class", "titlelnk");
                if (a_tags.Count > 0)
                {
                    Console.WriteLine("标题:{0}", a_tags[0].InnerHTML);
                    Console.WriteLine("链接:{0}", a_tags[0].GetAttribute("href"));
                    Console.WriteLine("");
                }
            }
        }
    }
}

运行结果如下:

image

源代码下载

分享到:
评论

相关推荐

    Web-Scraping-with-Python_Python网页信息抓取_Python抓取网页_jupyter_Python抓

    **Python网页信息抓取技术详解** 网页信息抓取,也称为网络爬虫或网页抓取,是通过自动化程序从互联网上获取大量数据的过程。在这个领域,Python语言因其强大的库支持和简洁的语法而成为首选工具。本教程将深入探讨...

    大苹果网页信息抓取系统

    【大苹果网页信息抓取系统】是一个由林强开发的专为64位操作系统设计的信息采集工具,其核心目标是高效、精准地从互联网上抓取并处理网页数据。在这个系统中,用户可以定制化地设定抓取规则,以便从各种网站上提取所...

    网页信息抓取工具HTTPLook

    【网页信息抓取工具HTTPLook详解】 在互联网大数据时代,获取网页信息是许多开发者、研究人员和数据分析者的重要任务。HTTPLook是一款便捷高效的网页信息抓取工具,它简化了网页数据提取的过程,使得非编程背景的...

    c# 多线程网页信息抓取

    在IT领域,尤其是在编程实践中,"C# 多线程网页信息抓取"是一个重要的主题。这个主题涉及到网络编程、多线程技术和信息提取技术,是构建高效爬虫程序的关键。下面将详细解释这些知识点: 1. **C#语言基础**:C#是一...

    基于C# 网页信息抓取

    本程序编写了一个从网页中抓取信息(如最新的头条新闻,新闻的来源,标题,内容等)的类,而且本程序文件夹中含有word文件,文件将介绍如何使用这个类来抓取网页中需要的信息。文件将以抓取博客园首页的博客标题和...

    jsoup 网页信息 抓取 选择器

    网页抓取,也称为网络爬虫或网页抓取,是一种技术,用于自动化地从互联网上获取大量信息。jsoup特别适用于小型到中等规模的网页抓取任务,它能够高效地解析HTML,从而提取出我们需要的数据,如新闻标题、内容、作者...

    抓取网页信息

    网页信息抓取是一种常见的数据获取技术,特别是在互联网大数据分析、网站维护、搜索引擎优化等领域中有着广泛应用。本教程将介绍如何通过编程方式抓取网页信息,提取种子地址,并下载相关图片。 首先,我们需要了解...

    网页信息抓取代码

    读取super.21cn.com手机竞价信息的小程序,带了accsee数据表作统计,不过大家可以发现最后竞价获得商品的价格的秘密,可以知道商家利用所谓的网络竞价的赚钱的手段。由于没有使用相对路径,请将程序放于D盘根目录下...

    基于STM32开发的使用WiFi模块抓取网页信息

    通过以上步骤,我们可以构建一个基本的STM32和WiFi模块相结合的网页信息抓取系统,为物联网、智能家居、工业监控等领域提供数据获取的可能性。然而,实际应用中可能还需要考虑到安全性、网络连接稳定性、数据加密等...

    网页文字抓取器 1.3

    值得注意的是,虽然此工具提供了一种便利的方式获取网页信息,但使用时必须遵守版权法规,尊重原创者的权益。对于受版权保护的内容,未经许可的抓取和复制可能会引发法律问题。因此,在使用网页文字抓取器1.3时,...

    Python爬虫实现网页信息抓取功能示例【URL与正则模块】

    本文实例讲述了Python爬虫实现网页信息抓取功能。分享给大家供大家参考,具体如下: 首先实现关于网页解析、读取等操作我们要用到以下几个模块 import urllib import urllib2 import re 我们可以尝试一下用...

    网页文字抓取器

    网页文字抓取器是一种工具,主要用于从互联网上的网页中批量提取文字内容。这种工具在数据挖掘、信息分析、搜索引擎优化(SEO)等领域有着广泛的应用。它能够自动化地爬取网页,解析HTML,提取出纯文本,帮助用户...

    网页图片抓取工具

    网页图片抓取工具,通常指的是能够自动从网页中批量下载图片的应用程序,这些工具极大地简化了用户收集网络图片的过程。GetWebPic作为一个典型的网页图片抓取工具,它可以帮助用户高效地从目标网站获取所需的图片...

    网页Html抓取爬虫测试工具

    这款工具是用C#编程语言编写的,旨在简化和优化网页信息提取的过程,帮助开发者高效地进行网页数据挖掘工作。 在网页抓取过程中,HTML抓取是最基础的步骤。HTML(HyperText Markup Language)是构成网页的主要标记...

    网页爬虫工具能够抓取网页信息的软件

    【标题】提到的"网页爬虫工具能够抓取网页信息的软件",正是指的这类工具在IT领域的应用。 PClawer V1.1是一款绿色版的网页爬虫工具,它具备高度定制化的功能,适用于对网页数据有特定需求的高级用户。【描述】中...

    网页抓取小工具

    2. **HTML解析**:HTML是构成网页的基础语言,抓取工具需要解析HTML文档以提取所需信息。这涉及到DOM(文档对象模型)的理解,DOM将HTML或XML文档转换为一个树形结构,便于程序操作。 3. **CSS选择器**:CSS选择器...

    可自定义配置的网页数据抓取引擎

    网页数据抓取引擎是一种强大的工具,它允许用户根据自己的需求定制数据提取规则,从而能够从互联网上的各种网页中高效地获取所需信息。这种技术在数据分析、市场研究、内容聚合、竞争情报等领域广泛应用。 首先,...

    VB.NET网页源码爬取.zip

    同时,对于有经验的开发者,这个示例也可以作为一个快速实现网页信息抓取的基础框架,根据实际需求进行定制和扩展。总的来说,VB.NET结合.NET框架提供了强大而灵活的工具,使得网页爬取变得更加简单和高效。

Global site tag (gtag.js) - Google Analytics