jQuery解析非统一的HTML

时间:2016-03-18 15:12:42

标签: javascript jquery html-parsing cheerio

我的任务是解析静态HTML页面中的数据,这些数据是由“错放”的数据生成的。

HTML的内容遵循以下模式:

<div class="product-detail">
    <h1>Product Name <span>Company</span></h1>
    <p>
        <strong>Description</strong>
        EZ use widget
    </p>
    <p>
        <strong>Location</strong>
        China
    </p>
    <p>
        <strong>Width</strong>
        10" <span>(26cm)</span>
        <strong>Height</strong>
        9"
    </p>
    <p>
        <strong>Category</strong>
        <a>Widget</a>
    </p>
</div>

“产品名称”和“公司”很容易

var productDetail = $('div.product-detail');

var data = {
    name: productDetail.children('h1').clone().children().remove().end().text(),
    company: productDetail.children('h1').children('span').text()
};

我的问题在于细节。描述名称始终位于<strong>标记中,但实际描述有时会包含在其他标记中。此外,描述有时会共享<p>标记(宽度,高度以上),描述因产品而异。

我已经尝试过明显的嫌疑人

productDetails.contents().each( ... )

递归解析甚至纯DOM操作,但最终会产生垃圾,特别是如果描述共享一个<p>标记。不幸的是,我的jQuery技能让我失望。

使用文本(可能嵌入标记中)<strong>之后立即获取跟随JSON对象的最简单方法是什么?

{
  name: "Product Name",
  company: "Company",
  Description: "EZ use widget",
  Location: "China",
  Width: '10"',
  Height: '9"',
  Category: "Widget"
}

我认为我太接近问题了,错过了明显的答案。

1 个答案:

答案 0 :(得分:0)

jQuery library(httr) library(readr) read_csv(my.data$content) 将返回一个html元素数组。

.contents()

其中每个都有$(".product-detail > p:eq(2)").contents() .textContent属性。

祝if-else与确定对象组装之前的内容有关!