识别和提取图像的标题/描述(数据刮削Pinterest)

如何使用Javascript / jQuery来识别与具有多个图像和描述的网页上的图像相对应的描述或标题?

可以非常容易地提取页面标题,但是标题可能与图像不对应,尤其是如果页面上存在许多图像

var title = document.title; 

我相信Pinterest的Pin-it书签已成功完成。 我猜它与算法有关,找到最近的h1h2h3或图像的alt属性,然后如果算法无法在页面上识别图像的描述,则回退到document.title

任何想法非常感谢!

编辑

这是用于抓取其他网站的数据

OP提供了一个很好的问题来扩展。 我最近为另一个SO创建了一个jsFiddle来回答来自新Yahoo!的数据抓取URL标题缩略图屏幕video播放器网页。

我刚刚重写了jsFiddle,所以它是Pinterest特有的并且直接使用了Metatag Object Numbers后面会有更多内容 ),这使得这个jsFiddle与那个非常不同。

整个过程涉及使用Yahoo的查询语言和jQuery .ajax()函数来获取所需的抓取数据,通常可在网页源metatag部分中找到。

首先,让我解释一些事情。

我将使用的Pinterest链接将是固定项目的直接链接 。 这意味着网页将包含主要固定项目以及许多其他较小的固定项目,这与包含大量固定项目的主页不同。

Pinterest Link为它的网页标题提供了固定项目的Title以及构成固定项目Description的几个单词。 这很可能是不可取的,只需要固定项目的Title即可。

查看Pinterest链接的HTML源页面向我们显示了当前使用的元标记。 以下是其中大部分内容:

                      

如您所见,这些metatags包含og:titleog:image我们所追求的og:image数据。 然后,我们意识到这些og metatags是执行数据抓取过程的直接目标。

可以肯定的是,上面的os:image内容链接是通过_c.jpg获取完整图像大小的版本。 缩略图版本使用_b.jpg 。 基本上,每个固定项目有两个独特的图像尺寸。

由于数据抓取过程不返回这些og property names ,只Metatag Object Numbers ,因此我们需要分析与每个Metatag Object Number关联的返回content

查看上面的metatag源,很明显image将始终位于以http://media-开头的某个位置。 这13字符在所有元标记中都是唯一的,因此当匹配时,整个URL就是image location

当然,Pinterest应该为图像使用多个URL模板,然后需要相应地调整。

查看og:title您会立即意识到内容部分中没有唯一的字符串,表示此标记是image's title 。 因此,假设所有元标签都遵循模板并且不会更改一段时间,我们将分配此Metatag Object Number 7以提供Pinterest Pinned Item's Image Title 。 需要说明的是,这个数字7基于此脚本进程的.ajax()YQL Results ,而不是上面看到的源HTML结构。

同样,如果Pinterest更改了head section模板,则可能需要进行调整。

接下来是基于本在线文章中所见的数据抓取技术/脚本,我写的一步一步的实践教程

jsFiddle Pinterest Data Scraping DEMO


小费:
虽然没有演示,但是您可以使用的是已发现的元标记数值 ,可以根据页面包含的预定值进行检查,指示标题head section已更改。 例如,当前元标记计数为25项目。 如果返回的值等于任何其他Pinterest固定项目网页上的此值,您知道有一个不同的head section正在使用…这可能会影响脚本,因为它只需要25个并且直接通过它的Metatag Object Number调用其中的两个Metatag Object Number


额外的东西:
如果您对如何检索主页上显示的当前Pinterest Pinned ITEMS感到好奇,请首先了解这个jsFiddle DEMO的工作原理。 然后,您需要制作自己的jsFiddle版本进行测试并使用Pinterest主页URL以及更改.ajax()调用中的XPATH数据仅刮除body sectionrelevant div's 。 要了解有关XPATH basics更多信息,请单击此处 。 然后你就可以理解: 在YQL Playground上选择Div Divs的XPATH

例如, body section包含以下格式的最大总共 50个引脚

  "href": "/pin/15833036160340477/" 

那些href fragments将作为重新创建URL的起点。 重要提示:某些引脚可能是repins ,这意味着您将返回少于50个引脚。

对于那些读到这里的人来说,这里是:

一些额外的jsFiddle DEMO

这是一个改进的XPATH,适用于YQL Playground的Body中的Select Divs ,但是要了解上面的长时间如何工作。


另请参阅我的其他Pinterest SO答案:

用于自定义URL的自定义Pinterest按钮(文本链接,图像或两者)

如何复制Pinterest网站的模态效果?

最好的答案是:看看Pinterest是如何做到的。

对于jQuery,请查看“最接近”的函数。

这里只是一些快速而肮脏的未经测试的代码,为您提供了思考这个问题的起点,但这是一个非常开放的问题,代码中的智能可以像您希望的那样复杂,健壮或简单。

 $('img').each(function() { var title = $(this).prop('alt') || $(this).prop('title') || $(this).closest('h1,h2,h3').text(); // do something with title });​