这看起来比平常要难一些。我是 wget 的新用户,我在想也许可以以某种方式登录 Facebook 并只下载特定对话中的图片。
我的意思是,我想告诉 wget 我的密码和用户或使用 cookies(我不知道如何写行命令)并仅从对话中下载图像。
我知道这肯定是可能的但我该怎么做呢?
答案1
您可以使用 Ruby Mechanize 等工具编写登录脚本(如果您拥有凭据并且没有遇到 Captchas 之类的问题),但对于初学者,您可以先使用 Web 浏览器登录并导出在此过程中创建的 cookie。为此,您不需要了解 FB 登录表单的内部结构,但您需要安装一个允许您导出 cookie(针对特定网站或所有网站)的浏览器扩展。
使用 Chrom(e|ium,你可以使用https://chrome.google.com/webstore/detail/cookietxt-export/lopabhfecdfhgogdbojmaicoicjekelh。这将导出您当前所在网站的 cookie。
导出登录 cookie 后(我假设您已将它们保存到cookies.txt
),您需要将它们加载到wget
并提供真实浏览器的 UserAgent 字符串(以免 FB 无法满足您的要求)。下面我使用“Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36”,这是我从http://useragentstring.com/。现在您可以wget
像在登录 FB 的网络浏览器上一样访问 FB 页面:
wget --load-cookies="cookies.txt"\
-U "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36"\
https://www.facebook.com
代替https://www.facebook.com加上您的对话的 URL,您就成功了一半。
更难的部分是处理结果。您不能使用诸如wget
这样的功能,-A .jpg
因为 FB 并不是真正的简单静态页面。FB 上的大多数内容都是使用 javascript 动态生成的。如果您不想使用完整的 javascript 引擎并让它为您提供实际渲染的图像,您可以采取粗暴的方法,例如 grep 出所有img
标签(无论它们在哪里以及是否有效),然后下载其中的每一个:
cat "$YOUR_DOWNLOADED_HTML" | grep '<img[^>]*>' -o | grep -Po '(?<=src=\")[^"]*' | \
while read url
do
wget --load-cookies="cookies.txt"\
-U "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36"\
"$url"
done