c# - 如何开发最佳解析器方案?
问题描述
我使用 AngleSharp 编写了一个解析器。有条件地用于测试的解析站点。
代码
public async void Parser()
{
// *** HtmlLoader ***
HttpClient client = new HttpClient();
string currentUrl = "https://github.com/search?q=winform&type=Repositories";
var response = await client.GetAsync(currentUrl);
string source = await response.Content.ReadAsStringAsync(); // результат парсинга
// HTML парсер, который доступен из "AngleSharp".
var domParser = new HtmlParser();
// Спарсим асинхронно наш исходный код и получим документ с которым мы можем работать
var document = await domParser.ParseAsync(source);
// *** Парсинг ***
// var items = document.QuerySelectorAll("a").Where(item =>
// item.ClassName != null && item.ClassName.Contains("post__title_link"));
var fieldNameCollect = document.QuerySelectorAll("div.col-12.col-md-8.pr-md-3 > h3");
var fieldDescriptCollect = document.QuerySelectorAll("div.col-12.col-md-8.pr-md-3 > p");
var fieldUpdateCollect = document.QuerySelectorAll("div > p > relative-time");
var fieldLangCollect = document.QuerySelectorAll("div.text-gray.flex-auto.min-width-0");
var fieldStarCollect = document.QuerySelectorAll("div.pl-2.pl-md-0.text-right.flex-auto.min-width-0 > a");
// Колличество
int count = fieldNameCollect.Length;
// Перебор элементов
for (int i = 0; i < count; i++)
{
string fieldName = fieldNameCollect[i].TextContent;
string fieldDescript = fieldDescriptCollect[i].TextContent;
string fieldUpdate = fieldUpdateCollect[i].TextContent;
string fieldLang = fieldLangCollect[i].TextContent;
string fieldStar = fieldStarCollect[i].TextContent;
ConnectDBAccess connectDBAccess = new ConnectDBAccess(tableName, pathDB);
connectDBAccess.InsertRecord(fieldName, fieldDescript, fieldUpdate, fieldLang, fieldStar);
}
解析器的原理:
- 解析器获取每个字段的集合;
- 解析器按索引执行集合的集合;
- 解析器将数据输入数据库;
问题
1. 这样的解析器方案是否有缺点,如何使其更优化?
解决方案
推荐阅读
- rspec - Rspec:让 Omniauth/oauth0 与法拉第请求一起工作
- c++ - c ++:使用std :: vector时,出现错误:分配抽象类类型的对象
- spss - spss如何获取变量的宽度
- python - python/numpy ValueError:预期的 1D 或 2D 数组,得到 0D 数组
- raku - 禁止无符号变量重新绑定是否有目的或好处?
- java - Sudoku Solver Java(不像它应该的那样工作)
- c# - FAILED_EMAIL_SENDING 返回一些重新发送
- c# - 从包含一系列文件的文件夹中查找文件,这些文件基于文件名进行版本控制
- language-design - 如果我的程序使用按名称调用,输出将如何?
- r - 为 data.frame 为 r 中另一列的每个值提供一个索引