OP提供了一个很好的问题来扩展。我最近为来自新Yahoo!的数据抓取URL、标题和缩略图的另一个SO 答案创建了一个 jsFiddle !屏幕视频播放器网页。
我刚刚重写了那个 jsFiddle,所以它是 Pinterest 特有的,并且直接使用了Metatag Object Numbers
(稍后会详细介绍),这使得这个 jsFiddle 与那个非常不同。
整个过程涉及使用Yahoo 的查询语言和 jQuery.ajax()
函数来获取所需的抓取数据,这些数据通常在网页源metatag
部分中可用。
首先,让我解释一些事情。
我将使用的Pinterest 链接将是固定项目的直接链接。这意味着网页将包含主要的固定项目以及许多其他较小的固定项目,这与包含大量仅固定项目的主页不同。
该Pinterest 链接的网页标题为固定项目的网页标题以及Title
组成固定项目的几个单词Description
。这很可能是不需要的,只需要固定的项目Title
即可。
查看Pinterest 链接的 HTML 源页面向我们展示了当前使用的元标记。这是其中的大多数:
<meta property="fb:app_id" content="274266067164"/>
<meta property="og:site_name" content="Pinterest"/>
<meta property="og:type" content="pinterestapp:pin"/>
<meta property="og:url" content="http://pinterest.com/pin/40250990391375228/"/>
<meta property="og:title" content="FUNNY!!"/>
<meta property="og:description" content="Someone please do this."/>
<meta property="og:image" content="http://media-cache0.pinterest.com/upload/62980094758941134_yXgT124O_c.jpg"/>
<meta property="og:see_also" content="http://9gag.com/gag/2934786" />
<meta property="pinterestapp:pinboard" content="http://pinterest.com/amjo32/funny/"/>
<meta property="pinterestapp:pinner" content="http://pinterest.com/amjo32/"/>
<meta property="pinterestapp:source" content="http://9gag.com/gag/2934786"/>
<meta property="pinterestapp:likes" content="21"/>
<meta property="pinterestapp:repins" content="30"/>
<meta property="pinterestapp:comments" content="0"/>
<meta property="pinterestapp:actions" content="51"/>
<meta name="twitter:card" content="photo">
<meta name="twitter:url" content="http://pinterest.com/pin/40250990391375228/">
<meta name="twitter:site" content="@pinterest">
<meta name="google-site-verification" content="NvDayNupl7R0MDceeuRcs7xUf9yqUsxg6WGjEeRdAnc" />
<meta name="application-name" content="Pinterest" />
<meta name="msapplication-TileColor" content="#ffffff" />
如您所见,我们所追求的那些metatags
包含og:title
和数据。og:image
然后意识到这些og metatags
是执行数据抓取过程的直接目标。
可以肯定的是,os:image
上面的内容链接是通过_c.jpg
. 缩略图版本使用_b.jpg
. 本质上,每个固定项目都有两个独特的图像尺寸。
由于数据抓取过程不返回这些og property names
,只是Metatag Object Numbers
,我们需要对返回content
的每一个进行关联分析Metatag Object Number
。
查看上面的metatag
源代码,很明显image
将始终位于以 . 开头的某个位置http://media-
。这些13
字符在所有元标记中是唯一的,因此当匹配时,整个 URL 就是image location
.
当然,如果 Pinterest 对图片使用多个 URL 模板,则需要相应地进行调整。
看着你立即意识到内容部分og:title
中没有唯一的字符串来表明这个标签是. 因此,假设所有元标记都遵循一个模板并且在一段时间内不会改变,我们将把它分配给提供. 需要明确的是,这个数字 7 是基于并来自这个脚本过程,而不是上面看到的源 HTML 结构。image's title
Metatag Object Number 7
Pinterest Pinned Item's Image Title
.ajax()
YQL Results
同样,如果 Pinterest 更改了 的模板head section
,则可能需要进行调整。
下面是我根据这篇在线文章中看到的数据抓取技术/脚本编写的实时分步教程。
jsFiddle Pinterest 数据抓取 DEMO
提示:
虽然没有演示,但您可以使用总找到的 Metatags的数值,可以根据页面应包含的预定值检查该数值,表明已更改。例如,当前元标记计数是项目。如果在任何其他Pinterest 固定项目网页上返回的值不等于此值,则您知道使用中存在不同...这可能会影响脚本,因为它只需要 25并通过它直接调用其中两个。head section
25
head section
Metatag Object Number
额外的东西:
如果您对如何检索主页上看到的当前 Pinterest 固定项目感到好奇,请首先了解这个 jsFiddle 演示是如何工作的。然后,您需要制作自己的 jsFiddle 版本进行测试,并使用Pinterest 主页 URL以及更改对数据抓取XPATH
的.ajax()
调用relevant div's
中的 body section
. 要了解更多信息XPATH basics
,请单击此处。然后你就可以理解:XPATH for Select Divs in Body on YQL Playground。
例如,该格式最多body section
包含50个引脚:
"href": "/pin/15833036160340477/"
这些href fragments
将作为重新创建 URL 的起点。重要提示:某些引脚可能repins
意味着您将返回少于 50 个引脚。
对于那些读到这里的人,这里是:
一些额外的 jsFiddle 演示。
这是YQL Playground 上 Body 中 Select Divs的改进XPATH ,但请理解上面较长的 XPATH 是如何工作的。
另请参阅我的其他 Pinterest SO 答案:
自定义 URL 的自定义 Pinterest 按钮(文本链接、图像或两者)
如何复制 Pinterest 网站的模态效果?