Scarica una copia locale funzionante di una pagina web [chiusa]


211

Vorrei scaricare una copia locale di una pagina Web e ottenere tutti i CSS, immagini, JavaScript, ecc.

Nelle discussioni precedenti (ad es. Qui e qui , che hanno entrambi più di due anni), vengono generalmente proposti due suggerimenti: wget -pe httrack . Tuttavia, entrambi questi suggerimenti falliscono. Gradirei molto aiuto nell'uso di uno di questi strumenti per svolgere il compito; anche le alternative sono adorabili.


Opzione 1: wget -p

wget -pscarica correttamente tutti i prerequisiti della pagina Web (css, images, js). Tuttavia, quando carico la copia locale in un browser Web, la pagina non è in grado di caricare i prerequisiti perché i percorsi di tali prerequisiti non sono stati modificati dalla versione sul Web.

Per esempio:

  • Nel codice HTML della pagina, <link rel="stylesheet href="https://stackoverflow.com/stylesheets/foo.css" />sarà necessario correggere per puntare al nuovo percorso relativo difoo.css
  • Nel file CSS, background-image: url(/images/bar.png)allo stesso modo dovrà essere modificato.

C'è un modo per modificare in wget -pmodo che i percorsi siano corretti?


Opzione 2: httrack

httracksembra un ottimo strumento per il mirroring di interi siti Web, ma non mi è chiaro come usarlo per creare una copia locale di una singola pagina. Ci sono molte discussioni nei forum httrack su questo argomento (ad es. Qui ) ma nessuno sembra avere una soluzione a prova di proiettile.


Opzione 3: un altro strumento?

Alcune persone hanno suggerito strumenti a pagamento, ma non riesco proprio a credere che non esista una soluzione gratuita.


19
Se la risposta non funziona, prova: wget -E -H -k -K -p http://example.com- solo questo ha funzionato per me. Credito: superuser.com/a/136335/94039
its_me

C'è anche un software per farlo, Teleport Pro .
pbies,

3
wget --random-wait -r -p -e robots=off -U mozilla http://www.example.com
davidcondrey,

Risposte:


262

wget è in grado di fare ciò che stai chiedendo. Prova solo quanto segue:

wget -p -k http://www.example.com/

Il -pti porterà tutti gli elementi necessari per visualizzare correttamente il sito (CSS, immagini, ecc). Il -kcambierà tutti i link (per includere quelli per i CSS e immagini) per consentire di visualizzare la pagina non in linea come si presentava in linea.

Dai documenti di Wget:

‘-k’
‘--convert-links’
After the download is complete, convert the links in the document to make them
suitable for local viewing. This affects not only the visible hyperlinks, but
any part of the document that links to external content, such as embedded images,
links to style sheets, hyperlinks to non-html content, etc.

Each link will be changed in one of the two ways:

    The links to files that have been downloaded by Wget will be changed to refer
    to the file they point to as a relative link.

    Example: if the downloaded file /foo/doc.html links to /bar/img.gif, also
    downloaded, then the link in doc.html will be modified to point to
    ‘../bar/img.gif’. This kind of transformation works reliably for arbitrary
    combinations of directories.

    The links to files that have not been downloaded by Wget will be changed to
    include host name and absolute path of the location they point to.

    Example: if the downloaded file /foo/doc.html links to /bar/img.gif (or to
    ../bar/img.gif), then the link in doc.html will be modified to point to
    http://hostname/bar/img.gif. 

Because of this, local browsing works reliably: if a linked file was downloaded,
the link will refer to its local name; if it was not downloaded, the link will
refer to its full Internet address rather than presenting a broken link. The fact
that the former links are converted to relative links ensures that you can move
the downloaded hierarchy to another directory.

Note that only at the end of the download can Wget know which links have been
downloaded. Because of that, the work done by ‘-k’ will be performed at the end
of all the downloads. 

2
Ho provato questo, ma in qualche modo collegamenti interni come index.html#link-to-element-on-same-pagesmesso di funzionare.
mano il


12
Alcuni server risponderanno con un codice 403 se usi wget senza un User Agent, puoi aggiungere-U 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4'
nikoskip

45
Se ti accorgi che ti mancano ancora le immagini, ecc., Allora prova ad aggiungere questo: -e robot = off ..... wget in realtà legge e rispetta robots.txt - questo mi ha davvero reso difficile capire perché niente lavorato!
John Hunt,

24
per ottenere risorse da host stranieri utilizzare-H, --span-hosts
davidhq
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.