XPath选择文本块内的特定文本

时间:2016-11-03 12:21:40

标签: xpath web-scraping

我正在试图找出一种从长文本块中提取特定值的方法。

到目前为止,我已经// td [@class =" PadLeft10"]从公司名称开始,以#34;查看更多信息"片。

我试图将我的结果分成几段,所以例如我希望我的代码查找单词&#34; Primary Contact:&#34;然后返回后面的文本,以<br/>结尾。

我需要获取公司名称,它始终是文本的第一位,然后是主要联系人,然后是地址,然后是电话和传真,然后是网站,以及组织类型。

问题在于并非每条记录都包含所有值。如您所见,第二个条目有地址和​​网站,但第一个条目没有。

我正在使用Dataminer Chrome插件,对于熟悉它的人。它有行和列的单独xpath,所以我将尝试创建一堆与我正在寻找的每个字段相对应的不同列。

任何方向都会受到高度赞赏。

<td align="left" valign="top" width="2%">
<script>
    if (0 == 1) document.write('<img src="https://website.com" border="0" alt=""/>');
</script>
<br/><br/></td>
<td class="PadLeft10" align="left" valign="top" width="32%" style="padding-left: 15px;">
<span style="font-weight: bold;font-size: 12pt;"><br/>Company Name Here</span><br/>Primary Contact: Mr. Eric Cartman <br/>Phone: (555) 555-5555<br/>Fax: (333) 333-3333<span style="text-decoration: underline;color: #0000ff"></span><br/>Organization Type: Distributor Branch
<br/>
<a href="javascript:OpenNewWindow('DemographicsShow.aspx?FormKey=6546513265&Title='+escape('Company Name Here')+'&Key=654321231651');" class="DataFormHyperLink" title="Click here for more information">» View More Info</a><br/>
<br/>
</td>


<td align="left" valign="top" width="2%">
<script>
    if (0 == 1) document.write('<img src="https://website.com" border="0" alt=""/>');
</script>
<br/><br/></td>
<td class="PadLeft10" align="left" valign="top" width="32%" style="padding-left: 15px;">
<span style="font-weight: bold;font-size: 12pt;"><br/>Other Company</span><br/>Primary Contact: Mr. Jimmy Valmer<br/>100 N Ohio St 2rd Fl<br/>Rochester, IN 54225<br/>United States<br/>Phone: (888) 888-8888<br/>Fax: (999) 999-9999<span style="text-decoration: underline;color: #0000ff"><br/>Web Site: <a href="http://www.companywebsite.com" target="_blank">http://www.companywebsite.com</a></span><br/>Organization Type: Financial Service
<br/>
<a href="javascript:OpenNewWindow('DemographicsShow.aspx?FormKey=65484651534684&Title='+escape('Other Company')+'&Key=65484561534986');" class="DataFormHyperLink" title="Click here for more information">» View More Info</a><br/>
<br/>
</td>


</tr>
<tr>

3 个答案:

答案 0 :(得分:0)

  

任何方向都会受到高度赞赏。

就方向而言,您提到的表格单元格中的部分既不是嵌套DOM项目,也不是兄弟类型DOM节点。这些顺序html元素需要特殊处理。

<br/>Company Name Here</span>
<br/>Primary Contact: Mr. Eric Cartman 
<br/>Phone: (555) 555-5555
<br/>...

xpath regex 都可以用于这种情况。

答案 1 :(得分:0)


我是xpath的新手,但至少我可以说:如果你是html代码的创建者,你绝对需要改变它以使其更加结构化 喜欢:主要联系人:<span id/class='primaryContact'>..</span>
或者,你可以通过这个选择器获取元素(编辑)//td[@class="PadLeft10"]//child::span//following-sibling::text()[1]拆分':'然后继续,但这个解决方案只是一个diy。

答案 2 :(得分:0)

您可以使用谓词和contains函数选择要查找的文本节点:

//td[@class="PadLeft10"]/text()[contains(., "Primary Contact:")]

然后您可以使用substring-after函数获取子字符串:

substring-after(
    //td[@class="PadLeft10"]/text()[contains(., "Primary Contact:")],
    'Primary Contact:'
)

使用normalize-space删除前导和尾随空格:

normalize-space(
    substring-after(
        //td[@class="PadLeft10"]/text()[contains(., "Primary Contact:")],
        'Primary Contact:'
    )
)