如何使用 wget 从 facebook 上的消息中下载图片?

如何使用 wget 从 facebook 上的消息中下载图片?

这看起来比平常要难一些。我是 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

相关内容