Ladda ner alla bilder från en webbplats med wget

  • Posted on: 7 March 2016
  • By: Pontus

Att ladda ner tusentals bilder från en webbplats manuellt kan vara en riktig pina. Men det går att automatisera, nu pratar jag inte om när alla bilder ligger i en katalog och man bara kan ladda ner hela katalogen med ftp. Säg att du ska migrera en blogg och alla inläggen har bilder, bilderna ska sedan tillbaka till rätt inlägg. Då fungerar det inte riktigt att bara ladda ner alla. 

Med hjälp av wget kan vi ladda ner alla bilderna i separata kataloger för varje inlägg och sedan är det bara att ladda upp dem till nya eller vad man nu ska göra. Följande kommande brukar jag använda:

wget -r -e robots=off -P /home/user/bilder/291 -nd -l1 -H -A jpg,jpeg,gif,png http://blogg.example.com/?p=291 --exclude-domains='plus.google.com, www.facebook.com, www.example.com' --exclude-directories='category, comments, feeds, 2012, 2013, 2014, 2015, 2016'  --user-agent='Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3' --wait=0.5

-r
Hämtar recursivt, annars hade den bara hämtat filen vi länkar till.
-e robots=off
Wget lyder robots.txt och ifall bilderna ligger på en extern sida och vi behöver ladda ner dem och om då robots.txt säger att wget inte får så kommer den inte att ladda ner de bilder. Genom att lägga till den här så ignorerar vi robots.txt
-P /home/user/.../291
Sökvägen till var vi ska spara bilderna. I slutet har jag nummret för blogginlägget i wordpress. På det sättet sparas alla bilder i en separat katalog för varje blogginlägg. 
-nd
Skapa inte kataloger, utan den här så kommer sökvägen till bilderna på din dator att få samma struktur som på servern. 
-l1
Följ länkar max ett steg, alltså hämta bara filer från den sidan vi säger. Annars följer den alla länkar och med nästa tag så kan det sluta i att vi hämtar hem hela internet ...
-H
Hämta från främmande värdar. Ifall bilderna ligger på externa sidor.
-A jpg,jpeg,gif,png
Hämta bara filer med de här filändelserna.
http://blogg.example.com/?p=291
Sökvägen till blogginlägget som vi ska hämta bilderna till. Här är det icke SEO-urlen från wordpress. Anledningen att jag tar den här trots att URLerna egentligen består av text är för att då kan jag lägga upp det i ett kalkylprogram och radda upp alla inläggens nummer. Till exempel kan jag fylla ett ark med 1-10 000 och sedan bara skapa kommandot för wget. När man fyller upp listan med kommandor och infogar nummret på rätt plats så kan men sen bara kopiera och klistra in alla rader i ett textdokument och göra ett bash-script.
--exclude-domains='plus.google.com, www.facebook.com, www.example.com'
Vilka länkar vi inte vill följa. Har vi facebook och google+ knappar så vill vi till exempelt inte hämta något därifrån.
--exclude-directories='category, comments, feeds, 2012, 2013, 2014, 2015, 2016'
I fallet med en wordpress blogg så för att spara lite tid så skippar vi massa kataloger som det länkas till från sidan. Kommentarer, senaste inläggen, taggar med mera.
--user-agent='Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3'
Använd en annan user-agent än wget. Vissa servrar kan blockera baserat på user-agent
--wait=0.5
Efter varje fil så väntar vi 0,5 sekunder. För att inte lägga för stor belastning på servern.

Alla blogginlägg har kanske inte bilder? Då kommer det att skapas en tom katalog. Dessutom eftersom att jag hämtar bilder från alla blogginlägg genom att söka efter id't så kommer det att saknas en del inlägg. Varje inlägg som görs får ju ett unikt id, om man sedan tar bort blogginlägget så kommer den siffran att returnera en 404. Men det kommer att skapas en katalog, den kommer också att vara tom.

För att slippa gå igenom alla kataloger så använder jag find för att ta bort alla tomma kataloger.

 

 

Kategorier: