作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用Javascript / jQuery来识别与具有多个图像和描述的网页上的图像相对应的描述或标题?
可以很容易地提取页面标题,但是标题可能与图像不对应,特别是如果页面上存在很多图像
var title = document.title;
h1
,
h2
,
h3
或图像的
alt
属性的算法有关,如果算法无法识别图像的描述,则回退到
document.title
在页面上。
最佳答案
OP提供了一个很好的扩展问题。我最近为另一个SO Answer创建了一个jsFiddle,用于从新Yahoo!抓取数据,URL,标题和缩略图。屏幕视频播放器网页。
我刚刚重写了该jsFiddle,因此它是Pinterest特定的,并且直接使用了Metatag Object Numbers
(稍后会详细介绍),这使得该jsFiddle与该jsFiddle非常不同。
整个过程涉及使用Yahoo的查询语言以及jQuery .ajax()
函数来获取所需的抓取数据,通常可在网页源metatag
部分中找到。
首先,让我解释一些事情。
我将使用的Pinterest Link是指向固定项目的直接链接。这意味着网页将包含主要固定项目以及许多其他较小的固定项目,而首页只包含多个固定项目。
该Pinterest Link的网页标题为固定项目的Title
,以及构成固定项目Description
的几个单词。这很可能是不希望的,仅需要固定项目的Title
。
查看Pinterest Link的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
。
og:title
,您立即意识到内容部分中没有唯一的字符串来指示此标记为
image's title
。因此,假设所有元标记都遵循模板并且在一段时间内不会发生变化,我们将分配此
Metatag Object Number 7
以提供
Pinterest Pinned Item's Image Title
。需要明确的是,这个数字7是基于此脚本过程中的
.ajax()
和
YQL Results
,而不是上面所示的源HTML结构。
head section
的模板,则可能需要进行调整。
head section
已更改。例如,当前的元标记计数是
25
个项目。如果返回的值不等于任何其他Pinterest固定项目网页上的值,则您知道正在使用不同的
head section
...,这可能会影响脚本,因为它只希望25,并直接调用其中的两个
Metatag Object Number
。
XPATH
调用中的
.ajax()
更改为仅将
relevant div's
中的
body section
抓取到的数据。要了解有关
XPATH basics
的更多信息,请单击
HERE。然后您可以了解:
XPATH for Select Divs in Body on YQL Playground。
body section
最多包含以下格式的50个引脚:
"href": "/pin/15833036160340477/"
href fragments
将作为重新创建URL的起点。重要说明:某些引脚可能是
repins
,这意味着您返回的引脚少于50个。
关于javascript - 识别并提取图像的标题/说明(数据剪贴Pinterest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13796859/
我是一名优秀的程序员,十分优秀!