我想使用此Wikipedia
页面 - http://en.wikipedia.org/wiki/Current_members_of_the_United_States_House_of_Representatives
它包含几个.jpg
图像的链接,我想将所有图像下载到一个文件夹中。我在Mac上。
我尝试过使用wget
但到目前为止一直无法使用。
编辑:为了澄清,我想要一个脚本点击页面上的每个链接,然后下载页面。这是因为我需要首先重定向页面。
答案 0 :(得分:0)
您可以将xmlstarlet
用于此目的:
xmlstarlet sel --net --html -t -m "//img" -v "@src" -n 'http://en.wikipedia.org/wiki/Current_members_of_the_United_States_House_of_Representatives'
会在src
的页面中为您提供img
代码的所有http://en.wikipedia.org/wiki/Current_members_of_the_United_States_House_of_Representatives
字段。
您会注意到输出行缺少标题http:
,因此我们必须添加此内容。
然后:
while IFS= read -r line; do
[[ $line = //* ]] && line="http:$line"
wget "$line"
done < <(
xmlstarlet sel --net --html -t -m "//img" -v "@src" -n 'http://en.wikipedia.org/wiki/Current_members_of_the_United_States_House_of_Representatives'
)
应检索图像文件。
根据您的评论,我现在了解您的要求:您希望获取包含href
节点的a
个节点的所有img
字段。满足此要求的xpath
是:
//a[img]
因此,
xmlstarlet sel --net --html -t -m "//a[img]" -v "@href" -n 'http://en.wikipedia.org/wiki/Current_members_of_the_United_States_House_of_Representatives'
将为您提供这些href
。
现在,检索到的网址不是您要下载的图片;相反,它是另一个HTML页面,其中包含指向所需图像的链接。我已使用以下xpath选择了这些页面中的图像:
//div[@class='fullImageLink']/a
即a
节点内的div
个节点class="fullImageLink"
。这似乎没问题,启发式。
然后,这应该做:
#!/bin/bash
base="http://en.wikipedia.org"
get_image() {
local url=$base$1
printf "*** %s: " "$url"
IFS= read -r imglink < <(xmlstarlet sel --net --html -t -m "//div[@class='fullImageLink']/a" -v "@href" -n "$url")
if [[ -z $imglink ]]; then
echo " ERROR ***"
return 1
fi
imglink="http:$imglink"
echo " Downloading"
wget -q "$imglink" &
}
while IFS= read -r url; do
[[ $url = /wiki/File:* ]] || continue
get_image "$url"
done < <(
xmlstarlet sel --net --html -t -m "//a[img]" -v "@href" -n "$base/wiki/Current_members_of_the_United_States_House_of_Representatives"
)
你会得到比你想要的更多的东西,但它是一个很好的基础:)
。