【问题标题】:Why does YQL return additional tags?为什么 YQL 会返回额外的标签?
【发布时间】:2014-08-25 13:55:47
【问题描述】:

我正在 YQL 控制台中进行查询,内容如下:

select * from html
where url='http://www.motorni-masla.net/index.php?main_page=product_oil_info&cPath=140&products_id=294&zenid=c8281021bbfed454176247900b3b9d4a'
and xpath='//*[@id="productPrices"]'

idiea 是找出 id 为“productPrices”的元素,并以 JSON 格式返回它的内容。

但是当我这样做时 - 结果与原始代码不同 - 有额外的标签。

原创内容:

<strong>
<h2 id="productPrices" class="productGeneral">
<span class="normalprice">14.00лв. </span>&nbsp;<span class="productSpecialPrice">11.00лв.</span><span class="productPriceDiscount">
<br>Спести:&nbsp;21% отстъпка</span>
</h2>
</strong>

YQL 结果:

{
   "h2": {
    "class": "productGeneral",
    "id": "productPrices",
    "strong": {
     "span": [
      {
       "class": "normalprice",
       "content": "14.00лв."
      },
      {
       "class": "productSpecialPrice",
       "content": "11.00лв."
      },
      {
       "class": "productPriceDiscount",
       "br": null,
       "content": "\nСпести: 21% отстъпка"
      }
     ],
     "content": "  "
    }

基本上在原始内容中 - 顺序是: strong -&gt; h2 -&gt; span 在 YQL 结果中是: h2 -&gt; strong -&gt; span

这使得我拥有的 XPATH 毫无用处,因为我不能在 YQL 语句中使用它——它不符合 YQL 得到的结果。 在另一种情况下,不仅顺序不同,而且从现在添加了一个&lt;p&gt;标签。

如果有人告诉我这里发生了什么,我将不胜感激。

【问题讨论】:

    标签: html json xpath yql


    【解决方案1】:

    页面的标记无效。显然,YQL 的解析器正在做一件事来修复它,而浏览器(或者至少是我的 Chrome 版本,显然你正在使用的任何浏览器)正在做不同的事情来修复它。

    无效位是您不能将h2 放入strong 中。 strong的内容模型是词组内容,但h2不能进入词组内容,只能进入流式内容。

    【讨论】:

    • 我能否告诉 YQL 的解析器将其呈现为浏览器?这是否意味着无法抓取带有无效标记的页面?
    • 我确信可以抓取带有无效标记的页面,但是您必须根据 YQL 对结果 DOM 的解释而不是浏览器的解释来调整您的 xpath。无效标记就是:无效。这意味着无论解析器正在读取什么,它都可以做它认为有必要纠正它的任何事情,并且不同的解析器将做出不同的决定。我怀疑是否有一个 YQL 标志说(实际上)“不要做你自己,做 WebKit”。 :-)
    • 好的,看起来很合理。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2015-03-07
    • 2012-10-26
    • 2017-01-04
    • 2013-08-18
    • 2016-01-22
    相关资源
    最近更新 更多