c# - 使用来自 html 的解析数据播种数据库
问题描述
我有一个带有静态方法的控制台应用程序,可以解析站点中的一些数据。
我有一个带有 1 个表的 Web API 项目数据库。
我需要用解析后的数据播种该表。
控制台应用程序和 Web API 项目都在同一个解决方案中。
使用 HtmlAgilityPack 进行解析。
做这个的最好方式是什么?我以为我可以在 Console App 项目中的静态方法中简单地访问数据库的上下文,然后简单地将其添加到 foreach 循环中,将每个元素一一添加,但这似乎是不可能的,或者抛出诸如“CS7036 C#有没有给出对应于所需形式参数的参数,或者对于这么简单的程序来说,它们似乎非常非常低效和过于复杂。我很确定有一种正确的方法可以做到这一点,但找不到任何方法。感谢您提前提供任何帮助。这是解析静态方法。
class Parser
{
public static void newsParser()
{
Console.OutputEncoding = Encoding.UTF8;
//Putting the links in the variables
var urlNews = @"https://tengrinews.kz/news/";
var urlMain = @"https://tengrinews.kz";
var htmlWeb = new HtmlWeb();
var htmlDoc = htmlWeb.Load(urlNews);
//Getting the links of the news articles
var NewsLinksNode = htmlDoc.DocumentNode.SelectNodes("//*[@class='tn-link']");
//Creating a list and putting all the parsed links into it.
List<string> listOfLinks = new List<string>();
foreach (var links in NewsLinksNode)
{
var newsLinks = urlMain + links.GetAttributeValue("href", null);
List<string> listOfLinks1 = newsLinks.Split(new char[] { ',' }).ToList();
listOfLinks.AddRange(listOfLinks1);
}
//Iterating through the list of links
foreach (var newsInfo in listOfLinks)
{
var htmlNews = htmlWeb.Load(newsInfo);
var newsTitle = htmlNews.DocumentNode.SelectNodes(".//h1[@class='tn-content-title']/text()");
//Getting the titles
foreach (var Titles in newsTitle)
{
Console.WriteLine(Titles.InnerText.Trim());
}
var newsDate = htmlNews.DocumentNode.SelectNodes(".//h1[@class='tn-content-title']//span[@class='tn-hidden']");
//Getting the dates
foreach (var Dates in newsDate)
{
Console.WriteLine(Dates.InnerText.Trim());
}
var newsText = htmlNews.DocumentNode.SelectNodes(".//article[@class='tn-news-text']/*[position() != last() and position() != last() - 1]");
//Getting the texts
foreach (var Text in newsText)
{
Console.WriteLine(Text.InnerText.Trim());
}
var newsTheme = htmlNews.DocumentNode.SelectNodes(".//ol[@class='tn-bread-crumbs']/*[last()]");
//Getting themes
foreach (var Theme in newsTheme)
{
Console.WriteLine(Theme.InnerText.ToString().Trim());
}
}
}
}
解决方案
推荐阅读
- python-3.x - Python - 如何将函数应用于字典
- reactjs - 使用 react redux 渲染对象数组
- android - 如何在不使用形状的情况下制作圆角 relativeLayout
- php - 查询未在 PHP 中返回空白变量的结果
- php - 如何获取 php 中动态出现的所有 td 的总和?
- mysql - 使用 group by 语句时获取最后一条记录的 SQL
- php - 控制器内的子文件夹给出 404
- reactjs - React 钩子,每个孩子一个
- c++ - 使用 OpenMP 的 C++ 中的嵌套并行程序
- split - java.lang.ArrayIndexOutOfBoundsException 与 SPLIT