c# - 使用 htmlagilitypack 解析单个项目中的 HTML 类
问题描述
我想解析 HTML,我使用了以下代码,但我将所有这些都放在一个项目中,而不是单独获取项目
var url = "https://subscene.com/subtitles/searchbytitle?query=joker&l=";
var web = new HtmlWeb();
var doc = web.Load(url);
IEnumerable<HtmlNode> nodes =
doc.DocumentNode.Descendants()
.Where(n => n.HasClass("search-result"));
foreach (var item in nodes)
{
string itemx = item.SelectSingleNode(".//a").Attributes["href"].Value;
MessageBox.Show(itemx);
MessageBox.Show(item.InnerText);
}
我只收到第一项的一条消息,第二条消息显示所有项目
解决方案
当您根据类“search-result”从 url 中搜索数据时,只返回一个节点。而不是遍历它的孩子,你只通过那个 div,这就是为什么你只得到一个结果。
如果您想获取具有“search-result”类的 div 内所有链接的列表,则可以执行以下操作。
代码:
string url = "https://subscene.com/subtitles/searchbytitle?query=joker&l=";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
List<string> listOfUrls = new List<string>();
HtmlNode searchResult = doc.DocumentNode.SelectSingleNode("//div[@class='search-result']");
// Iterate through all the child nodes that have the 'a' tag.
foreach (HtmlNode node in searchResult.SelectNodes(".//a"))
{
string thisUrl = node.GetAttributeValue("href", "");
if (!string.IsNullOrEmpty(thisUrl) && !listOfUrls.Contains(thisUrl))
listOfUrls.Add(thisUrl);
}
它有什么作用?
SelectSingleNode("//div[@class='search-result']")
-> 检索包含所有搜索结果的 div 并忽略文档的其余部分。- 仅遍历其中包含的所有“子节点”
href
并将其添加到列表中。子节点是根据点符号确定的SelectNodes(".//a")
(而不是.//
,如果你这样做//
,它将搜索整个页面,这不是你想要的)。 - If 语句确保它只添加唯一的非空值。
您现在拥有所有链接。
推荐阅读
- tomcat9 - tomcat 9.2 没有选择禁用 tls 1.0 的配置
- android - 如何保护 API 密钥免受恶意攻击者反编译我的应用程序以及检测恶意使用?
- python - Python 正则表达式:匹配短语而不考虑中间空格
- javascript - 我们什么时候使用 typescript import * as?
- python - 过滤 False 列值返回 True
- python - Python 读取 XML 文件(接近 50mb)
- python - 使用python的收入数据
- python-3.x - 如何将更大的数组保存和访问到 hdf5 文件:内存错误?
- python - Python:如何从 txt 文件中找到最接近的匹配句子
- javascript - Window.location Javascript JS 重定向