c# - 在 C# 中使用 HtmlAgilityPack 解析站点
问题描述
例如,我有链接https://shikimori.one/animes/38256-magia-record-mahou-shoujo-madoka-magica-gaiden-tv/art
我想从那里使用 C# 中的 HtmlAgilityPack 按名称“容器包装”获取 div 类列表。(为了从所有链接下载图像)但这部分
var httpClient = new HttpClient();
var html = await httpClient.GetStringAsync(link);
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(link);
据我了解,从此页面https://shikimori.one/animes/38256-magia-record-mahou-shoujo-madoka-magica-gaiden-tv向我返回 html 代码。所以,我无法解析“/art”中的任何内容。那是因为下一部分代码只返回 null。
var links = htmlDocument.DocumentNode.Descendants("div")
.Where(node => node.GetAttributeValue("class", "")
.Equals("menu-slide-outer x199")).ToList();
我错过了什么?
最终代码:
class Program
{
static List<string> sources = new List<string>();
[STAThread]
static void Main(string[] args)
{
var link = "https://shikimori.one/animes/1577-taiho-shichau-zo/art";
var web = new HtmlWeb();
web.BrowserTimeout = TimeSpan.FromTicks(0);
var htmlDocument = web.LoadFromBrowser(link);
var divlink = htmlDocument.DocumentNode.Descendants("div")
.Where(node => node.GetAttributeValue("class", "")
.Equals("container packery")).ToList();
var alink = htmlDocument.DocumentNode.Descendants("a")
.Where(node => node.GetAttributeValue("class", "")
.Equals("b-image")).ToList();
foreach(var a in alink)
{
sources.Add(a.GetAttributeValue("href", string.Empty));
}
Console.WriteLine("done");
Console.ReadKey();
}
解决方案
与HttpClient
:
string html = string.Empty;
using (var httpClient = new HttpClient())
{
html = await httpClient.GetStringAsync(link);
}
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(html); // LoadHtml expects the page source, not the URL.
或者,一种从 URL 解析 HTML 代码的简单方法:
var web = new HtmlAgilityPack.HtmlWeb();
var htmlDocument = await web.LoadFromWebAsync(link);
或者,加载动态(即 Ajax)内容:
var web = new HtmlAgilityPack.HtmlWeb();
var htmlDocument = web.LoadFromBrowser(link);
推荐阅读
- python - python - 如何在python的for循环中更新两个变量以获取复利方程
- angular - 使用 Net Core 2.1 和 Angular 2 创建使用 Google 登录选项时出现问题
- html - 页面左右两侧输入表格
- javascript - Discord.js - 我将如何集成 PayPal 发票 API?
- python - 有没有比这更好的从列表中随机选择的方法:
- node.js - 卡片甲板,“甲板未定义” node.js
- python - HTML Scraping with Beautiful Soup - 不需要的换行符
- sql - ORA-01843: 在使用 Select 语句时,月份无效
- dart - 为什么直接变异变量会重建小部件?
- swift - 生成包含一个属性的加权平均值和另一个属性的总和的对象