【发布时间】:2014-04-09 04:06:06
【问题描述】:
我正在使用 HTMLUnit 抓取网页,并从网页中收集了 DOM 节点列表。
在这些“公司”DOM 节点中的每一个都是我想要抓取的一些数据。例如,我想要此节点内的电话号码文本:
现在,该元素将是 div 元素的子元素,而 div 元素又是公司节点内另一个 div 元素的子元素。访问它的正确 XPath 行是什么?这是我最新的尝试,没有返回任何结果。
List<DomNode> companies = (List<DomNode>) page.getByXPath("//li[@class='featured block twoblock boxshadow']");
for (int j = 0; j < companies.size(); j++) {
DomNode company = companies.get(j);
// retrieve telephone number
DomNode telephone = (DomNode) company.getByXPath(
"//li[@data-pvd-p='"+j+1+"']/div[@class='listingWrapper']/div[@class='itemInfo']/span[@class='tel']").get(0);
}
这是一个 HTML 示例,内容:
<li class="featured block twoblock boxshadow" data-pvd-p="3" data-pvd-c="0046176330000011028" data-pvd-et="sv" data-pvd-l="true">
<div class="listingWrapper" itemtype="http://schema.org/LocalBusiness" itemscope="">
<a href="/Craddock-Electrical-Services-Ltd/0046176330000011028/"></a>
<div class="itemInfo">
<div class="tradeImage" itemprop="member" itemscope="" itemtype="http://schema.org/Organization"></div>
<h2>
<a itemprop="name" href="/Craddock-Electrical-Services-Ltd/0046176330000011028/"></a>
</h2>
<span class="tel" itemprop="telephone"></span>
<div class="listLinks"></div>
<div id="addressBar"></div>
</div>
<div class="itemInfo2"></div>
<div class="clearLeft"></div>
<ul class="features"></ul>
<div class="clearLeft"></div>
<p class="promo" itemprop="description"></p>
</div>
</li>
更新 2:
这是我的 XPath 代码的当前状态。
List<DomNode> companies = (List<DomNode>) page
.getByXPath("//li[contains(@class, 'featured block')]");
for (int j = 0; j < companies.size(); j++) {
String url = "";
DomNode company = companies.get(j);
DomElement web = null;
// retrieve name
DomNode name = (DomNode) company.getByXPath("//a[@itemprop='name']").get(j);
if (companiesLogged.contains(name.getTextContent().trim()) != true) {
companiesLogged.add(name.getTextContent().trim());
// retrieve telephone number
DomNode telephone = (DomNode) company.getByXPath("div[@class='listingWrapper']/div[@class='itemInfo']/span[@class='tel']").get(0);
// retrieve website
try{
web = (DomElement) company.getByXPath("div[@class='listingWrapper']/div[@class='itemInfo']" +
"/div[@class='listLinks']/a[@id='linkWebsite']").get(0);
} catch(IndexOutOfBoundsException e){
System.out.print(" (No Website) ");
}
try{
url = web.getAttribute("href");
} catch (IndexOutOfBoundsException e){
url = "N/A";
}
System.out.println(name.getTextContent().trim() + " "
+ telephone.getTextContent().trim()
+" "+url.trim());
} else {
System.out.println("Company already logged");
}
}
【问题讨论】:
-
请发布您要定位的 XML/XHTML 或其中的 sn-p,以便我们提出更好的建议
标签: java html dom xpath htmlunit