【问题标题】:Performing image scraping using YQL with lowest resources usage possible i.e. lowest number of queries使用 YQL 以尽可能低的资源使用率(即最少的查询数)执行图像抓取
【发布时间】:2012-11-19 20:16:12
【问题描述】:

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

{alted:["",""],nonAlted:["",""]}

现在我的问题来了,虽然我能够抓取页面并检索所有图像并将它们分成 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;

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


P.S. 我在标题中提到“资源使用”的原因是因为我知道能够对每个图像类别执行单独调用,这意味着我会两次抓取同一页面想想有点低效。


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

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

为什么是“”和为什么是“querieselement.query”,我不知道他们应该做什么,而他们似乎在做关键的事情更改它们会破坏代码。

谢谢。

【问题讨论】:

    标签: javascript xpath web-scraping yql e4x


    【解决方案1】:

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

    使用样式表而不是 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>
    

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2018-01-16
      • 1970-01-01
      • 2014-07-30
      • 2016-06-16
      相关资源
      最近更新 更多