ubuntuusers.de

Website Scraping - Nur neuen Content

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

FreierBrokolli

Anmeldungsdatum:
28. Mai 2021

Beiträge: 10

Hi, manche Seiten habe ich gerne zur Sicherung offline auf meiner Festplatte. Dazu verwende ich folgendes Skript:

1
2
3
#!/bin/sh

wget --mirror --page-requisites --convert-links --adjust-extension --compression=auto --reject-regex "/search|/rss" --no-if-modified-since --no-check-certificate --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" $1

Bei Blogs habe ich nun das Problem, das mein Scrape von Tag X nicht mehr aktuell ist. Führe ich das Skript nun erneut aus, will dieses die ganze Website wieder neu laden. Ist es möglich, dass Skript so zu erweitern, dass es nur Dateien herunterlädt, welche nach dem Datum X erstellt worden sind vom Webseitenbetreiber?

Freue mich auf eure Antworten ☺

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

FreierBrokolli schrieb:

1
2
3
#!/bin/sh

wget --mirror --page-requisites --convert-links --adjust-extension --compression=auto --reject-regex "/search|/rss" --no-if-modified-since --no-check-certificate --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" $1

Anmerkungen:

  1. Man kann das umbrechen und so etwas lesbarer machen.

  2. Ich würde $1 qoten, weil URLs Metazeichen der Shell enthalten können.

  3. Man kann einige der doppelten Anführungsstriche in einfache ändern.

Vorschlag:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/sh

wget --mirror \
  --page-requisites \
  --convert-links \
  --adjust-extension \
  --compression=auto \
  --reject-regex '/search|/rss' \
  --no-if-modified-since \
  --no-check-certificate \
  --user-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' \
  "$1"

Bei Blogs habe ich nun das Problem, das mein Scrape von Tag X nicht mehr aktuell ist. Führe ich das Skript nun erneut aus, will dieses die ganze Website wieder neu laden. Ist es möglich, dass Skript so zu erweitern, dass es nur Dateien herunterlädt, welche nach dem Datum X erstellt worden sind vom Webseitenbetreiber?

Ich fürchte, da gibt es keine allgemeingültige Lösung, weil es ja auch verschiedene Mechanismen der Behandlung von Änderungen gibt (Zeitstempel, ETags). Warum verwendest Du denn "--no-if-modified-since"? Das erzeugt einen HEAD-Request pro Seite mehr und könnte die Änderungsprüfung aushebeln.

Ich sehe gerade, es gibt wget2, vielleicht ist das ja was für Deinen Anwendungsfall. Ansonsten, wenn es noch individueller werden muss, könntest Du auch Ruby mit den Gems Mechanize und Nokogiri verwenden. Da musst Du dann aber das Scraping und die Datenhaltung selber ausprogrammieren.

Antworten |