【问题标题】:Should I use Xpath or regexp for this?我应该为此使用 Xpath 还是正则表达式?
【发布时间】:2016-12-17 23:04:32
【问题描述】:

我不是语言专家,也没有任何相关知识。我正在从一个半动态的网站中提取数据。

例如,我需要为“就购房计划提供建议 - 客户类型”和“就购房计划提供建议 - 投资类型”两个栏目列出客户和投资的类型(每种可以有几个)它们可以进入一个单元格,但有某种分隔符,例如“;”。

这是表格的样子

代码如下所示:

就购房计划提供建议

                <div id="a2Nb000000035ohEAA" class="collapse DisciplineDetails PassportDetails PermDesc">
                  <h3 class="PermissionsListHeader">Advising on a home purchase plan</h3>
                  <br>
                  <br>
                </div>

                <ul class="PermissionConditionsList">
                  <li class="PermissionsConditionsItem">
                    Customer Type 

                    <ul class="PermCondsLimitationsList">
                      <li style="list-style: none"><span id="j_id0:j_id1:j_id110:regActTable:0:j_id531:0:j_id533:0:j_id535:0:j_id538"></span></li>

                      <li class="PermCondsLimitationsItem Popover">Customer</li>
                    </ul>
                  </li>
                </ul>

                <ul class="PermissionConditionsList">
                  <li class="PermissionsConditionsItem">
                    Investment Type 

                    <ul class="PermCondsLimitationsList">
                      <li style="list-style: none"><span id="j_id0:j_id1:j_id110:regActTable:0:j_id531:1:j_id533:0:j_id535:0:j_id538"></span></li>

                      <li class="PermCondsLimitationsItem Popover">Home purchase plans</li>
                    </ul>
                  </li>
                </ul>
              </div>

【问题讨论】:

  • P.S.我使用 Import.io 进行此提取。
  • 在开始使用 RegExp 之前,请向 tony the pony 打个招呼...使用 xpath,或者干脆 querySelectorquerySelectorAll
  • 感谢您的帮助 Jaromanda X,您是否有机会为此任务编写这样的 xpath?我正在努力寻找这方面的任何简单信息,因为它对我来说太技术性了..
  • 呃,不,我不这样做
  • 可能是为了钱?

标签: javascript java regex xpath import.io


【解决方案1】:

如果没有其他列表包含这些类但不应考虑,则此 xpath 有效。

//ul[@class='PermCondsLimitationsList']/li[@class='PermCondsLimitationsItem Popover']/(text()|span/text()))[normalize-space(.)]

测试here

仅获取标题:

//ul[@class='PermissionConditionsList']/li[@class='PermissionsConditionsItem']/text()[normalize-space(.)]

综合:

//ul[@class='PermissionConditionsList']/li[@class='PermissionsConditionsItem']/(text()|ul[@class='PermCondsLimitationsList']/li[@class='PermCondsLimitationsItem Popover']/(text()|span/text()))[normalize-space(.)]

但要同时获得某种格式,XSLT 可能会更有用。

【讨论】:

  • 嗨卢克,非常感谢您的帮助!你是第一个真正给我类似我所追求的东西的人!如果您帮助我正确构建此 xpath,我愿意支付您一顿饭或一杯咖啡的费用。基本上这是提取的网页.. 转到权限,这些是我需要 xpaths 从每个表中提取 3 组信息的表、客户类型、投资类型和限制。我需要它来匹配表的名称,然后从每组中提取这 3 组信息。这是你能做到的吗?
  • 一般来说,这个网站上的人会获得通过投票/批准等获得的声誉积分。咖啡和餐点还没有(还没有?)在 stackexchange 上实施。而且我不止一次看到有人提到这不是代码编写服务。而且我没有兴趣涉足名为 Import.io 的“您不必编码”服务。我建议你好好看看 xml,然后自己试验一下 XPATH。例如,通过我在答案中链接的那个网站。这种学习经历值得花时间。
  • 我只是出于礼貌提供..不必接受。我意识到这个网站更多的是用于技术问题而不是请求,但由于我对这方面的知识一无所知,我什至不知道从哪里开始。我希望我能找到一个愿意放弃 5 分钟时间来编写代码的人,并为我节省无休止的研究时间来学习一个我完全不熟悉的新领域。
  • 顺便说一句,如果您专门寻求 import.io 的帮助,那么也许您应该将该标签添加到您的问题中。该网站上的用户通常会为他们最感兴趣或最擅长的标签添加书签。
  • 卢克有机会帮我调查一下吗?
【解决方案2】:

如果您有 chrome,您可以通过右键单击所需区域并转到 -> 检查来查看元素的 xpath。源代码的相关部分将突出显示。从那里您可以通过右键单击突出显示代码并转到 Copy -> Copy XPath 来获取 xpath。

【讨论】:

  • 谢谢,它适用于静态站点,但我正在处理的一个是半动态的,这意味着当有变化时使用分区的 xpath 会搞砸并最终提取错误的信息。
  • 啊,好的。是的,那么您依赖于类 ID。我对 import.io 不是很熟悉。我为我的内部工作抓取和清理数据,我使用了 Jsoup 和 HTMLAgility 包。这些语法我可以帮你。
猜你喜欢
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
相关资源
最近更新 更多