识别和提取图像的标题/描述(数据刮削Pinterest)
如何使用Javascript / jQuery来识别与具有多个图像和描述的网页上的图像相对应的描述或标题?
可以非常容易地提取页面标题,但是标题可能与图像不对应,尤其是如果页面上存在许多图像
var title = document.title;
我相信Pinterest的Pin-it书签已成功完成。 我猜它与算法有关,找到最近的h1
, h2
, h3
或图像的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:title
和og: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 section
的relevant 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 });