HTML Agility Pack无法正确读取xpath?

问题描述

我正在用C#制作网络抓取应用程序。我正在使用HTML Agility Pack解析HTML。我开始怀疑它的功能,因为似乎有些节点无法选择。

这是我要抓取的网站:https://place.map.kakao.com/253560122

<div id='kakaoWrap'>
  <div class='kakaoContent'>
    <div id='mArticle'>
      <div data-viewid='menuInfo'>
        <ul class='list_menu'>
          <li class='nophoto_type'>
          <li class='nophoto_type'>
          <li class='nophoto_type'>
...

我正在尝试获取<ul class='list_menu'>中的列表项。如果我在Google Chrome控制台中使用$x函数,它将按预期选择三个li元素:

$x("//*[@class='nophoto_type']")
(3) [li.nophoto_type,li.nophoto_type,li.nophoto_type]
0: li.nophoto_type
1: li.nophoto_type
2: li.nophoto_type
length: 3
__proto__: Array(0)

所以我在C#中使用相同的xpath,但是它无法选择任何内容:

var menus = doc.DocumentNode.SelectNodes("//*[@class='nophoto_type']");

我试图通过尝试逐步到达列表来查看错误发生的位置。我发现,它可以选择(div id='kakaoWrap'),but not (div class='kakaoContent')

var menus = doc.DocumentNode.SelectSingleNode("//body/div[@id='kakaoWrap']") // Works!;
var menus = doc.DocumentNode.SelectSingleNode("//body/div[@id='kakaoWrap']/div[@class='kakaoContent']") // Returns null!;

我的两个猜测是1.)Html Agility Pack在使用xpath时遇到问题,或者2.)该站点正在积极阻止解析,从警告中猜测:

通过document.write调用阻止解析器的跨站点(即,不同的eTLD + 1)脚本https://t1.daumcdn.net/mapjsapi/js/main/4.2.0/v3.js。由于网络连接不良,在此页面加载或将来的页面加载中,浏览器可能会阻止对此脚本的网络请求。如果在此页面加载中被阻止,则会在随后的控制台消息中进行确认。有关更多详细信息,请参见https://www.chromestatus.com/feature/5718547946799104

但是我可以选择整个文档以及其中的一些节点,因此我认为它是1.)。我在使用xpaths时总是遇到麻烦,如果我看不到任何东西,如果有人可以放弃他们的智慧,我将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...