首页 > 编程语言 >C# html数据爬取与过滤

C# html数据爬取与过滤

时间:2024-09-20 14:24:28浏览次数:8  
标签:comment Console string C# 爬取 html WriteLine var

1.首先安装第三方HTML数据过滤包  HtmlAgilityPack

我爬取的网站是一个树洞网站:https://i.jandan.net/treehole,他是一个单体网站,不通过api请求,所以只能根据HTML过滤,他的分页是通过base64加密的

 这是获取到的部分数据,这是我们需要的有效数据,他是有固定结构的,我们只要筛选这里面的数据显示出来就好了

 

以下是所有代码

using HtmlAgilityPack;
using System.Text;
using System.Text.RegularExpressions;

await ReadHtml();

while (true)
{
    Console.WriteLine("请输入页码:");
    var pageNumByNowDate = Console.ReadLine();

    if (!int.TryParse(pageNumByNowDate, out int pageNum))
    {
        Console.WriteLine("页码格式不正确,请重新输入数字");
        continue;
    }

    Console.Clear();

    byte[] buffer = Encoding.UTF8.GetBytes(DateTime.Now.ToString("yyyyMMdd") + "-" + pageNum);

    await ReadHtml("/" + Convert.ToBase64String(buffer));
}

//读取html
async Task ReadHtml(string url = "")
{
    var client = new HttpClient();
    var request = new HttpRequestMessage(HttpMethod.Get, "https://i.jandan.net/treehole" + url);
    request.Headers.Add("Cookie", "PHPSESSID=38e64nulb56bqgl6e27b5sp31l");
    var response = await client.SendAsync(request);
    response.EnsureSuccessStatusCode();
    ClearData(await response.Content.ReadAsStringAsync());
}

//清洗脏数据
void ClearData(string html)
{
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);

    var commentTexts = doc.DocumentNode.SelectNodes("//div[@class='commenttext']");

    foreach (var comment in commentTexts)
    {
        var commonText = comment.InnerText.Length > 30 ? string.Join("", comment.InnerText.Select((c, i) => (i > 0 && i % 50 == 0) ? $"{c}\r\n" : c.ToString().Trim().Replace("<br/>", "").Replace("<br />", ""))) : comment.InnerText.Trim().Replace("<br/>", "").Replace("<br />", "");

        var childrens = comment.ParentNode.SelectNodes(".//span[@class='tucao-unlike-container']");

        Console.WriteLine();
        Console.WriteLine();
        Console.WriteLine(commentTexts.IndexOf(comment) + 1 + "、  " + commonText);

        Console.WriteLine();
        Console.WriteLine(string.Join("               ", childrens.Select(c=>c.InnerText.Trim())));

        Console.WriteLine("_____________________________________________________________");
    }
}

输出效果

 

标签:comment,Console,string,C#,爬取,html,WriteLine,var
From: https://www.cnblogs.com/SmallChen/p/18422406

相关文章

  • 使用 Secrets Loader 轻松管理 Laravel 和 JS 项目
    跨各种环境管理api密钥、令牌和凭证等敏感数据可能非常棘手,尤其是在开发和部署应用程序时。确保秘密在需要时安全地存储和获取,而不是将它们硬编码到版本控制中,对于维护安全性至关重要。这就是我创建secretsloader的原因,这是一个bash脚本,可以动态地将awsssm和cloudform......
  • 【操作教程】视频监控系统EasyCVR视频汇聚管理平台如何添加用户和角色?
    视频监控平台/视频监控系统EasyCVR视频汇聚管理平台以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力,为各行各业的视频监控需求提供了优秀的解决方案。通过简单的配置和操作,用户可以轻松地进行远程视频监控、存储和查看,满足各种复杂场景下的监控需求。近......
  • 携手阿里云CEN:共创SD-WAN融合广域网
    2024云栖大会在9月19日举行的阿里云云栖大会上,犀思云作为SD-WAN领域的杰出代表及阿里云的SD-WAN重要合作伙伴,携手阿里云共同推出了创新的企业上云方案——FusionWAN智连阿里云解决方案。这一创新方案不仅彰显了犀思云在SD-WAN技术领域的深厚积累,更体现了双方在推动企业数字化转型......
  • 【问题解决】Web在线办公系统-数据爬取结果乱码
    问题描述在【热门电影】模块,通过jsoup爬虫并解析网页数据时,执行代码,出现“中文乱码”问题。解决方法由于网页自带的编码方式与后端开发中jsoup解析的编码方式不匹配,需要修改后端解析网页的编码方式。//设置爬取网页的地址Stringurl="https://movie.douban.com/......
  • docker 安装 mysql 详细教程
    1.打开docker目录cd/usr/local/mkdirdocker2.创建mysql文件夹/usr/local/dockermkdirmysql3.打开mysql文件夹cdmysql/4.创建配置文件目录mkdirconfig5.打开configcdconfig/6.编写配置文件vimmy.cnf[client]#端口号port=3306[mysql]no-be......
  • 每日一题:Leetcode-347 前K个高频元素
    力扣题目解题思路java代码力扣题目:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例1:输入:nums=[1,1,1,2,2,3],k=2输出:[1,2]示例2:输入:nums=[1],k=1输出:[1]提示:1<=nu......
  • 使用webpack打包报ERROR in TypeError: Cannot read property ‘tap‘ of undefined
     https://github.com/DustinJackson/html-webpack-inline-source-plugin/issues/79错误原因因为webpack的版本号跟html-webpack-plugin的版本号不匹配,应该算是相互不兼容的原因就是说我现在webpack的版本号为4,而html-webpack-plugin的版本号是5。然后我在网上看的大佬的报错......
  • swolle docker 镜像安装
    拉取镜像dockerpullphpswoole/swoole:latest测试镜像环境:dockerrun--rmphpswoole/swoole:latest"php-m"dockerrun--rmphpswoole/swoole:latest"php--riswoole"dockerrun--rmphpswoole/swoole:latest"composer--version"启动容器dockerr......
  • Windows10 Conda 环境离线迁移
    起因需要给离线设备配置conda环境准备在线机,含有配置好环境的conda虚拟环境离线机,已经安装了anaconda思路理论上直接找到anaconda路径内的env文件夹下的对应虚拟环境拷贝到离线机就行了,但是为了提升效率与可靠性:先在在线机使用conda-pack包将环境打包成tar.gz格式拷贝到离线机......
  • Spark(二)Spark Core(一)
    RDD详解前提:MapReduce框架采用非循环式的数据流模型,把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销,且这些框架只能支持一些特定的计算模式(map/reduce),并没有提供一种通用的数据抽象,因此出现了RDD这个概念概念RDD(ResilientDistributedDataset)叫做弹性......