2

我正在尝试执行一些图像抓取工具,该工具使用户能够使用 xpath 处理给定页面中包含的所有图像,以查找哪些具有 alt 标签,哪些没有,并将结果作为两个单独的 json 对象返回

{alted:["<img ......>","<img ......>"],nonAlted:["<img ......>","<img .. ....>"]}

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

我认为为了进一步澄清我的问题,最好添加一些代码,因此以下代码是我在 YQL 表的执行块中使用的代码:

query = "select * from html where url='http://www.example.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我在标题中提到“资源使用”的原因是因为我知道能够为每个图像类别执行单独的调用,这意味着两次抓取同一页面,我认为这有点低效。


PS如果有人可以帮助我理解这两行的含义,我也会很高兴

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

为什么是“ <urls/> ”和为什么是“ querieselement.query ”,我不知道他们应该做什么,而他们似乎在做关键工作,因为更改它们会破坏代码。

谢谢。

4

1 回答 1

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>
于 2013-09-04T21:03:31.640 回答