简单爬虫-抓取博客园文章列表

简介: 原文:简单爬虫-抓取博客园文章列表    如果使用对方网站数据,而又没有响应的接口,或者使用接口不够灵活的情况下,使用爬虫在合适不过了。爬虫有几种,对方网站展示形式有几种都是用分析,每个网站展示有相似的地方,有不同的地方。
原文: 简单爬虫-抓取博客园文章列表

    如果使用对方网站数据,而又没有响应的接口,或者使用接口不够灵活的情况下,使用爬虫在合适不过了。爬虫有几种,对方网站展示形式有几种都是用分析,每个网站展示有相似的地方,有不同的地方。

    大部分使用httpRequst就能完成,不管是否添加了口令、随即码、请求参数、提交方式get或者post、地址来源、多次响应等等。但是有些网站使用ajax如果是返回json或固定格式的也好处理,如果是很复杂的,可以使用webbrower控件进行抓取,最后正则解析,获取所需要的数据即可。

     那我们来抓取去首页网站列表 文章标题、文章摘要、文章发布时间、文章作者、文章评论次数、文章浏览次数。看下结构图。

  get请求返回静态html附代码如下

public class HttpCnblogs
    {
        public static List<CnblogsModel> HttpGetHtml()
        {

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.cnblogs.com/");
            request.Method = "GET";
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            request.UserAgent = "	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader sr = new StreamReader(stream);
            string articleContent = sr.ReadToEnd();

            List<CnblogsModel> list = new List<CnblogsModel>();

            #region 正则表达式
            //div post_item_body列表
            Regex regBody = new Regex(@"<div\sclass=""post_item_body"">([\s\S].*?)</div>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
            //a标签 文章标题  作者名字 评论 阅读
            Regex regA = new Regex("<a[^>]*?>(.*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
            //p标签 文章内容
            Regex regP = new Regex(@"<p\sclass=""post_item_summary"">(.*?)</p>", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
            //提取评论 阅读次数如:评论(10)-》10
            Regex regNumbernew = new Regex(@"\d+", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
            //提取时间
            Regex regTime = new Regex(@"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
            #endregion
            MatchCollection mList = regBody.Matches(articleContent);
            CnblogsModel model = null;
            String strBody = String.Empty;
            for (int i = 0; i < mList.Count; i++)
            {
                model = new CnblogsModel();
                strBody = mList[i].Groups[1].ToString();
                MatchCollection aList = regA.Matches(strBody);
                int aCount = aList.Count;
                model.ArticleTitle = aList[0].Groups[1].ToString();
                model.ArticleAutor = aCount == 5 ? aList[2].Groups[1].ToString() : aList[1].Groups[1].ToString();
                model.ArticleComment = Convert.ToInt32(regNumbernew.Match(aList[aCount-2].Groups[1].ToString()).Value);
                model.ArticleTime = regTime.Match(strBody).Value;
                model.ArticleView = Convert.ToInt32(regNumbernew.Match(aList[aCount-1].Groups[1].ToString()).Value);
                model.ArticleContent = regP.Matches(strBody)[0].Groups[1].ToString();
                list.Add(model);
            }
            return list;
        }
    }

    public class CnblogsModel
    {
        /// <summary>
        /// 文章标题
        /// </summary>
        public String ArticleTitle { get; set; }
        /// <summary>
        /// 文章内容摘要
        /// </summary>
        public String ArticleContent { get; set; }
        /// <summary>
        /// 文章作者
        /// </summary>
        public String ArticleAutor { get; set; }
        /// <summary>
        /// 文章发布时间
        /// </summary>
        public String ArticleTime { get; set; }
        /// <summary>
        /// 文章评论量
        /// </summary>
        public Int32 ArticleComment { get; set; }
        /// <summary>
        /// 文章浏览量
        /// </summary>
        public Int32 ArticleView { get; set; }
    }

 最后看看获取的文章model

 

  写的不好,还请见谅,准备下面试去。。

目录
相关文章
|
2天前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
4月前
|
数据采集 前端开发 JavaScript
Objective-C爬虫:实现动态网页内容的抓取
Objective-C爬虫:实现动态网页内容的抓取
|
4月前
|
数据采集 XML 数据格式
Haskell网络爬虫:视频列表获取案例分析
Haskell网络爬虫:视频列表获取案例分析
|
4天前
|
数据采集
爬虫抓取数据过程中代理IP频繁掉线:以Kookeey为例的解决方案
在数据抓取过程中,代理IP不可或缺,但其频繁掉线问题严重影响效率。本文以Kookeey为例,探讨解决之道:1)深入理解掉线原因,审慎选择稳定的服务商; 2)保持代理IP更新并合理配置使用参数; 3)在程序中集成错误处理与重试逻辑; 4)必要时升级至更优质的服务; 5)主动与服务商沟通寻求支持; 6)探索替代抓取策略,如调整抓取节奏或采用分布式架构。这些措施有助于显著提升抓取成功率及稳定性。
|
2月前
|
数据采集 Web App开发 Java
Java爬虫安全策略:防止TikTok音频抓取过程中的请求被拦截
Java爬虫安全策略:防止TikTok音频抓取过程中的请求被拦截
|
3月前
|
数据采集 存储 数据挖掘
Python网络爬虫实战:抓取并分析网页数据
使用Python的`requests`和`BeautifulSoup`,本文演示了一个简单的网络爬虫,抓取天气网站数据并进行分析。步骤包括发送HTTP请求获取HTML,解析HTML提取温度和湿度信息,以及计算平均温度。注意事项涉及遵守robots.txt、控制请求频率及处理动态内容。此基础爬虫展示了数据自动收集和初步分析的基础流程。【6月更文挑战第14天】
168 9
|
23天前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
|
2月前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
【7月更文挑战第31天】在网络数据的海洋中,使用Python的`requests`库构建网络爬虫就像探索未知的航船。HTTP协议指导爬虫与服务器交流,收集信息。HTTP请求包括请求行、头和体,响应则含状态行、头和体。`requests`简化了发送各种HTTP请求的过程。
53 4
|
2月前
|
数据采集 存储 API
在信息时代,Python爬虫用于自动化网络数据采集,提高效率。
【7月更文挑战第5天】在信息时代,Python爬虫用于自动化网络数据采集,提高效率。基本概念包括发送HTTP请求、解析HTML、存储数据及异常处理。常用库有requests(发送请求)和BeautifulSoup(解析HTML)。基本流程:导入库,发送GET请求,解析网页提取数据,存储结果,并处理异常。应用案例涉及抓取新闻、商品信息等。
66 2
|
2月前
|
数据采集 存储 Java
如何让Python爬虫在遇到异常时继续运行
构建健壮Python爬虫涉及异常处理、代理IP和多线程。通过try/except捕获异常,保证程序在遇到问题时能继续运行。使用代理IP(如亿牛云)防止被目标网站封锁,多线程提升抓取效率。示例代码展示了如何配置代理,设置User-Agent,以及使用SQLite存储数据。通过`fetch_url`函数和`ThreadPoolExecutor`实现抓取与重试机制。
如何让Python爬虫在遇到异常时继续运行
下一篇
云函数