镜像 stackexchange 包括外部镜像

镜像 stackexchange 包括外部镜像

该脚本将创建一个镜像文件夹,其中保存我的所有活动页面以供离线阅读,包括所有受影响的问题

#!/bin/bash
USERNAME=rubo77
MAXDEPTH=2 # increase this if you want to backup more of your history
USERID=1047481

mkdir -p mirror_$USERNAME
cd mirror_$USERNAME/
TEMP=/tmp/tmp.stackexchange_export
wget http://stackexchange.com/users/$USERID/$USERNAME?tab=accounts -q -O $TEMP
for SITE in $(grep account-icon $TEMP -A 4 | grep users | sed -r 's/.*(http[^"]*)".*/\1/g'); do
    echo '### ' $SITE ' ###'
    for c in $(seq 1 2); do
        DIR=$(echo $SITE|tr / _|sed s/^http:__//)$c
        mkdir -p $DIR
        cd $DIR
        httrack "$SITE$USERNAME/?tab=activity&sort=all&page=$c" \
                -* "+*/questions/*" +*sstatic.net* +*googleapis* \
                +*gravatar* +*imgur.com* +mime:text/css -r2 -N1
        cd ../
    done
done

但是我如何包含外部图像(例如头像)和来自 imgur 的包含图像?

答案1

首先,要小心刮痧礼仪,否则你会被阻止/限制

如果您喜欢编程,您可以考虑使用堆栈交换API相反,例如扩展其中之一堆栈应用程序喜欢堆栈打印机。看到这个相关问题了解更多获取数据的方法和执行此操作的应用程序。

但我从你的问题中猜测,只要简单地使用任何离线 Atom/RSS 阅读器来订阅,你就会得到最好的服务您帐户的更改

编辑1:如果您只想在离线时访问同一个站点,也许最好只使用一些缓存 HTTP 代理。我有过很好的经历wwwoffle例如,在过去(除非您手动告诉它,否则它永远不会过期,甚至会记住您单击的哪些链接在离线状态下不可用,因此会在您下次上线时获取它们),但几乎所有缓存代理都可以,如果您正确配置它(尤其是磁盘限制/过期时间)。如果您不想缓存整个互联网(在这种情况下通常不会这样做),您需要配置代理以仅缓存某些 URL,或者在网络浏览器本身中执行此操作(通过诸如狐狸代理或使用简单的.pac 文件。这将工作得很好且透明,不需要编程,甚至会减少 SE 站点的负载(而不是像屏幕抓取示例那样在短时间内用大量请求来敲击它们)

如果您仍然坚持使用屏幕抓取,它会起作用,但您必须小心地将其限制为仅获取您需要的内容而不再获取(并随着站点的更改继续更新脚本),并在 URL 检索之间添加延迟以防止被阻止,并重用现有的缓存内容(如果未更改)(wget --mirror等)。但它很可能需要一些编程来获得更细微的差别(即使在带有 sed/awk 的 shell 中)。

在这种情况下,请始终设置自定义用户代理(例如--user-agent="RuboScraper-1.1"),以便当脚本被阻止时,它不会阻止其余的非滥用行为获取在世界上。当你确实让它发挥作用时,把它放上堆栈应用程序并从这里链接到它,这样其他用户就不必重新发明轮子并完成所有撞墙的工作。

相关内容