我正在编写一个bash脚本,以使用wget下载当天html网页的当前natgeo照片,它每天都在变化。当我转到链接https://www.nationalgeographic.com/photography/photo-of-the-day/时,它将重定向到当前页面,即https://www.nationalgeographic.com/photography/photo-of-the-day/2018/08/mandalay-golden-sunrise/,当天的照片在网站上每天都会更改。我想wget仅使用第一个链接下载第二个html链接(每天都会更改)(在浏览器中键入时会将我重定向到第二个链接)。我该怎么办?
直到现在我都尝试过:
longest=[]
current=[]
while True:
n = int(input())
if n == -1:
break
if current % current[-1] == 0:
current.append(n)
else:
current = [n]
if len(current) > len(longest):
longest = current
print(len(longest))
但是它没有给我想要的第二个链接html页面。
答案 0 :(得分:1)
这将为您工作,它是一个简单易行的好代码。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script language="javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js"></script>
<style>
html, body {
height: 100%;
margin: 0;
}
#divcontainer {
border: 1px solid lightgray;
width: 100%
height: 100%
}
#makeitmove {
background: lightgray;
resize: both;
overflow: auto;
text-align: center;
width: 500px;
height: 76px;
border: 1px solid grey;
}
#drag {
height: 20px;
width: 100%;
background: blue;
}
</style>
<script>
$(document).ready(function () {
$("#makeitmove").draggable({containment: "#divcontainer", handle: '#drag', scroll: false});
});
</script>
<div id="window" style="display: none;"></div>
</head>
<body>
<div id="divcontainer" style="height: 100vh;">
<div id="makeitmove">
<div id="drag"></div>
Calculator
</div>
</div>
</body>
</html>
它将把您要查找的URL写入名为 desired_url 的文件中:
该文件将类似于:
“ https://www.nationalgeographic.com/photography/photo-of-the-day/2018/08/mandalay-golden-sunrise/”
这是您想要的网址。
要下载文件,您只需执行以下操作:
curl https://www.nationalgeographic.com/photography/photo-of-the-day/ | grep -m 1 https://www.nationalgeographic.com/photography/photo-of-the-day/ | cut -d '=' -f 3 |head -c-3 > desired_url
答案 1 :(得分:0)
尝试一下:
#! /bin/bash
url=https://www.nationalgeographic.com/photography/photo-of-the-day/
wget -q -O- "$url" > index.html
og_url=$(xmllint --html --xpath 'string(//meta[@property="og:url"]/@content)' index.html 2>/dev/null)
og_image=$(xmllint --html --xpath 'string(//meta[@property="og:image"]/@content)' index.html 2>/dev/null)
rm index.html
name=${og_url%/}
name=${name##*/}
file="$name".jpg
wget -q -O "$file" "$og_image"
echo "$file"
首先,它加载基本URL。然后,它使用xmllint提取相关信息。标准错误被忽略,因为HTML代码包含许多错误。但是xmllint
仍然可以解析HTML页面的相关部分。图像的名称是URL的一部分,该URL存储在具有属性content
的{{1}}元素中的属性meta
的值中。图像的URL存储在具有属性property=og:url
的相似meta
元素中。 Bash的parameter substitution用于制作文件名。在第二个property=og:image
中使用文件名和URL来加载图像。最后,脚本报告了所创建文件的名称。
答案 2 :(得分:0)
如果您严格希望使用wget,则必须下载第一个URL的页面以获取每天更改的地址。由于我们不会将下载的页面用于其他任何事情,因此可以将其下载到/ tmp。我将下载的页面文件重命名为NG.html
wget https://www.nationalgeographic.com/photography/photo-of-the-day -O /tmp/NG.html
我认为您想要的URL是指向图片的直接链接,本例中为
我们怎么得到的?
一种方法是使用“ twitter:url”对标记进行grep并在其下方打印一行。
grep -A 1 twitter:url /tmp/NG.html
“-A 1”参数在包含我们要搜索的模式的行之后再打印一行。结果是这样的:
grep -A 1 twitter:url /tmp/NG.html
<meta property="twitter:url" content="https://www.nationalgeographic.com/photography/photo-of-the-day/2018/08/mandalay-golden-sunrise/"/>
<meta property="og:image" content="https://yourshot.nationalgeographic.com/u/fQYSUbVfts-T7odkrFJckdiFeHvab0GWOfzhj7tYdC0uglagsDNcYRm8vejuXg0QxTzqdASwYhpl6e-h74GxPyqutLd15lrhO2QpHQIwDhQhoBQJTxpBSU4oz1-dHfqeGM_woeke6FIaD5wOrPsDo_UOe_nesId87TLVU8qeMyW07MHDznqt_vj5hZAtvQEpuBxw4bZQEeUoPC_zgoESthc9dS8cSTY2RA/"/>
现在,我们可以对“ og:image”进行grep选择,以仅选择包含我们网址的行。之前我们无法grep表示“ og:image”,因为文档中还有其他带有“ og:image”的标签。
所以现在我们只得到包含URL的最后一行:
grep -A 1 twitter:url /tmp/NG.html | grep "og:image"
<meta property="og:image" content="https://yourshot.nationalgeographic.com/u/fQYSUbVfts-T7odkrFJckdiFeHvab0GWOfzhj7tYdC0uglagsDNcYRm8vejuXg0QxTzqdASwYhpl6e-h74GxPyqutLd15lrhO2QpHQIwDhQhoBQJTxpBSU4oz1-dHfqeGM_woeke6FIaD5wOrPsDo_UOe_nesId87TLVU8qeMyW07MHDznqt_vj5hZAtvQEpuBxw4bZQEeUoPC_zgoESthc9dS8cSTY2RA/"/>
现在我们可以使用cut从HTML标记内部提取URL
如果我们使用'“'符号作为分隔符(分隔符),则第4个字段将是URL:
1 <meta property=
2 og:image
3 content=
4 https://yourshot.nationalgeographic.com/u/fQYSUbVfts-T7odkrFJckdiFeHvab0GWOfzhj7tYdC0uglagsDNcYRm8vejuXg0QxTzqdASwYhpl6e-h74GxPyqutLd15lrhO2QpHQIwDhQhoBQJTxpBSU4oz1-dHfqeGM_woeke6FIaD5wOrPsDo_UOe_nesId87TLVU8qeMyW07MHDznqt_vj5hZAtvQEpuBxw4bZQEeUoPC_zgoESthc9dS8cSTY2RA/
5 />
因此,现在使用带有定界符'“'的cut并选择第四个字段,它将为我们提供:
grep -A 1 twitter:url /tmp/NG.html | grep "og:image" | cut -d '"' -f 4
https://yourshot.nationalgeographic.com/u/fQYSUbVfts-T7odkrFJckdiFeHvab0GWOfzhj7tYdC0uglagsDNcYRm8vejuXg0QxTzqdASwYhpl6e-h74GxPyqutLd15lrhO2QpHQIwDhQhoBQJTxpBSU4oz1-dHfqeGM_woeke6FIaD5wOrPsDo_UOe_nesId87TLVU8qeMyW07MHDznqt_vj5hZAtvQEpuBxw4bZQEeUoPC_zgoESthc9dS8cSTY2RA/
现在,我们可以提供该URL到wget并将其另存为jpg
wget $( grep -A 1 twitter:url /tmp/NG.html | grep "og:image" | cut -d '"' -f 4) -O image.jpg
在摘要中,您需要运行2行:
wget https://www.nationalgeographic.com/photography/photo-of-the-day -O /tmp/NG.html
wget $( grep -A 1 twitter:url /tmp/NG.html | grep "og:image" | cut -d '"' -f 4) -O image.jpg