使用YQL执行图像抓取,可能的资源使用率最低,即查询次数最少

时间:2012-11-19 20:16:12

标签: javascript xpath web-scraping yql e4x

我正在尝试执行一些图像报废工具,该工具允许用户使用xpath处理报废图像来废弃给定页面中包含的所有图像,以找到具有alt标记但没有返回的结果,并将结果返回为2单独的json对象

即。 {alted: “”, “”],nonAlted: “”, “”]}

现在出现了我的问题,虽然我能够废弃页面并检索所有图像并将它们分离到alted和nonAlted类别,但我不能将它们放在响应对象中!

我想进一步澄清我的问题,最好添加一些代码,所以下面的代码就是我在YQL表的执行块中使用的代码:

query = "select * from html where url='http://www.mysite.com/page-path' and xpath='//li'";
var result = y.query(query);

y.log(result.results..img.(@alt));

var querieselement = <urls/>; 
querieselement.query = result.results..img.(@alt);

response.object = querieselement;

所以我的问题是如何设置响应对象以包含已处理的图像列表,请注意,运行查询后结果不会显示任何数据,尽管日志显示列表,希望有人可以指点我这个问题的原因。


PS 我在标题中提到“资源使用”的原因是因为我知道能够为每个图像类别分别调用,这意味着将同一页面报废两次认为是低效的。


P.S。如果有人可以帮我理解这两行的含义,我也会很高兴

querieselement = <urls/>;
querieselement.query = result.results..img.(@alt);

为什么“&lt; urls /&gt; ”以及为什么“ querieselement.query ”,我不知道他们应该做什么而他们似乎是改变它们做关键工作会破坏代码。

感谢。

1 个答案:

答案 0 :(得分:0)

  

所以我的问题是如何设置响应对象以包含已处理的图像列表

使用样式表而不是XPath选择器:

 select * from xslt where url="http://www.mysite.com/page-path" and stylesheet="http://www.mysite.com/page-path.xsl"

定义样式表:

  <xsl:template match="img[@alt]">
    <xsl:for-each select="@alt">
      <script>
        alt.push(<xsl:value-of select="."/>);
      </script>
    </xsl:for-each>
  </xsl:template>

  <xsl:template match="img[not(@alt)]">
    <xsl:for-each select="@src">
      <script>
        noalt.push(<xsl:value-of select="."/>);
      </script>
    </xsl:for-each>
  </xsl:template>