Espelhamento stackexchange incluindo imagens externas

3

Este script criará uma pasta espelho com todas as minhas páginas de atividades salvas para leitura off-line, incluindo todas as perguntas afetadas

#!/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[^"]*)".*//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

Mas como posso incluir imagens externas como avatares e imagens inclusas da imgur?

    
por rubo77 07.11.2014 / 10:15

1 resposta

2

Primeiramente, cuidado com a etiqueta de raspagem ou você seja bloqueado / limitado .

Se você estiver em programação, considere usar a API do stackexchange , por exemplo, expandindo um dos stackapps como stackprinter . Veja esta meta e perguntas relacionadas para obter mais maneiras de acessar dados e aplicativos que fazem isso.

Mas estou supondo que você seria mais bem servido simplesmente usando qualquer leitor Atom / RSS off-line para assinar muda na sua conta

EDIT1 : Se você quer que o mesmo site esteja disponível quando estiver offline, talvez seja melhor usar apenas algum proxy HTTP em cache. Eu tinha tido boas experiências com wwwoffle no passado, por exemplo (nunca expirou nada a menos que você disse manualmente , e até se lembraria de quais links você clicou que não estavam disponíveis off-line, assim os buscaria na próxima vez que você estivesse on-line), mas quase todos os proxy de cache funcionarão se você configurá-lo corretamente (especialmente limite de disco / expirar). Se você não quiser armazenar em cache toda a Internet (como normalmente você não faz para tais casos), você precisa configurar o proxy para armazenar apenas alguns URLs em cache, ou fazê-lo no próprio navegador (via plugins como foxyproxy ou usando simples . pac file . Isso funcionará bem e transparentemente, não requer programação, e até reduzirá a carga nos sites do SE (em vez de martelá-los com muito pedido em curto tempo como no exemplo de screen scraping)

Se você ainda insistir em usar screen scraping, ele funcionará, mas você terá que limitá-lo cuidadosamente para buscar apenas as coisas que precisa e não mais (e continuar atualizando o script à medida que os sites mudam) e adicionar atrasos entre o URL recuperações para impedir que sejam bloqueadas e reutilize o conteúdo em cache existente se ele não tiver sido alterado ( wget --mirror etc). Mas provavelmente irá requerer alguma programação para obter nuances mais refinadas (mesmo se estiver no shell com o sed / awk).

Por favor, em tais casos, sempre configure o user-agent personalizado (como --user-agent="RuboScraper-1.1" ) para que, quando o script for bloqueado, ele não bloqueie o restante dos wget s não violentos do mundo. E quando você fizer isso funcionar, coloque-o em stackapps e faça um link daqui para ele, para que outros usuários não tenham que reinventar a roda e fazer toda a colisão nas paredes.

    
por 16.11.2014 / 22:02