我正在尝试备份包含带有如下标签的页面的网站:
<a id="12379-video"></a>
</div>
<script>
jwplayer("12379-video").setup({
file: "http://xyz.cloudfront.net/abc/moviename.mp4",
flashplayer: "/sites/all/jwplayer/player.swf",
stretching: "exactfit",
height: 480,
width: 640 });
</script></span>
</div>
是否
wget
提取 URL 并跟踪它?(以及给命令提供的正确参数是什么)wget
用于解析文件并提取 URL 的机制究竟是什么?有什么方法可以告诉解析器也考虑该标签吗?(使用正则表达式或类似表达式)
如果不可能的话,您建议采取什么其他策略?(
grep
使用 bash 编写脚本或其他方式)
答案1
有一个-p
/--page-requisites
参数(与之-r
一起),它将下载正确显示给定 HTML 页面所需的大多数外部 URL(除非它们在 robots 文件中被排除)。
更多相关内容可以参阅手册(man wget
):
值得知道的是,Wget 对外部文档链接的概念是
<A>
标签、<AREA>
标签或<LINK>
除 之外的标签中指定的任何 URL<LINK REL="stylesheet">
。由于 Wget 通常不区分外部文档和内联文档,因此通常会剩下缺少必需品的“叶文档”。
请注意,Wget 有一个 HTML 标签/属性对的内部表,它在递归检索期间查找链接文档时会考虑该表。要添加一个,请尝试使用--follow-tags=list
(逗号分隔列表),与 相对--ignore-tags=list
。
此标签列表可能定义在html-url.c
其内容如下:
/* For tags handled by tag_find_urls: attributes that contain URLs to
download. */
static struct {
int tagid;
const char *attr_name;
int flags;
} tag_url_attributes[] = {
{ TAG_A, "href", ATTR_HTML },
{ TAG_APPLET, "code", ATTR_INLINE },
{ TAG_AREA, "href", ATTR_HTML },
{ TAG_BGSOUND, "src", ATTR_INLINE },
{ TAG_BODY, "background", ATTR_INLINE },
{ TAG_EMBED, "href", ATTR_HTML },
{ TAG_EMBED, "src", ATTR_INLINE | ATTR_HTML },
{ TAG_FIG, "src", ATTR_INLINE },
{ TAG_FRAME, "src", ATTR_INLINE | ATTR_HTML },
{ TAG_IFRAME, "src", ATTR_INLINE | ATTR_HTML },
{ TAG_IMG, "href", ATTR_INLINE },
{ TAG_IMG, "lowsrc", ATTR_INLINE },
{ TAG_IMG, "src", ATTR_INLINE },
{ TAG_INPUT, "src", ATTR_INLINE },
{ TAG_LAYER, "src", ATTR_INLINE | ATTR_HTML },
{ TAG_OBJECT, "data", ATTR_INLINE },
{ TAG_OVERLAY, "src", ATTR_INLINE | ATTR_HTML },
{ TAG_SCRIPT, "src", ATTR_INLINE },
{ TAG_TABLE, "background", ATTR_INLINE },
{ TAG_TD, "background", ATTR_INLINE },
{ TAG_TH, "background", ATTR_INLINE }
};