我应该为此使用 Xpath 还是正则表达式?

Should I use Xpath or regexp for this?

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

例如,我需要为 "Advising on a home purchase plan - Customer Type" 和 "Advising on a home purchase plan - Investment Type" 设置 2 列,它们将列出客户和投资的类型(每个可以是多个)它们可以进入一个单元格但有某种类型分隔符,例如“;”。

这是 table 的样子

代码如下所示:

建议购房计划

                <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>

如果没有其他列表包含这些 类 但不应考虑,则此 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 可能更有用。

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