Zum Inhalt

Page-Scraping mit Groovy

„nicht abgesicherte“ Seiten

Unter nicht abgesicherten Seiten ist zu verstehen, dass beim Aufruf der Seite keine Prüfung auf Header-Informationen stattfindet.

D.h.:

  • es wird nicht geprüft mit welchem Browser die Seite aufgerufen wird
  • wie oft die Seite aufgerufen wurde

Der Umfang und die Art unterscheidet sich in Abhängigkeit des Betreibers der Seite. Pauschal kann man davon ausgehen, dass Portale, die vom Traffic leben, z.B. Amazon, sehr genau drauf schauen wer und wie (zumindest mit welchem Browser) ihre Seiten abruft.

Hier der einfach Script:

@Grapes([
    @Grab(group='net.sourceforge.nekohtml', module='nekohtml', version='1.9.14')
])
import org.cyberneko.html.parsers.SAXParser
def page = new XmlSlurper(new SAXParser()).parse("http://www.handelsblatt.com/unternehmen/dienstleister/sharing-economy-krokodil-frisst-taxi/13980082.html")

def element = page.'**'.find{ node -> node.@class=='vhb-headline'}
println element

Der XMLSlurper von Groovy braucht einen XMLParser, welches in Form des NekoHtml importiert wird. Der NekoHtml ist mit dem Ziel implementiert worden das ungenaue XML der HTML Seiten zu verarbeiten.

 

„abgesicherte“ Seiten

Das folgende Beispiel kann mehr oder weniger analog in Java implementiert werden. Hier verzichte ich auf den Groovy XMLSlurper und setze auf das Java Framework jsoup auf. Das Framework erlaubt mir auf einfache Weise einen Browserzugriff zu simulieren und damit z.B. die Daten von einer Amazon Produktseite auszulesen. Ein Versuch eine Amazon Produktseite mit dem ersten Beispiel auszulesen wird spätestens beim dritten Zugriff mit „Server returned HTTP response code: 503 for URL: https://www.amazon.com/Game-Thrones-Complete-Season-Blu-ray/dp/B01H2JPULU“ quittiert

@Grapes([
        @Grab(group = 'org.jsoup', module = 'jsoup', version = '1.9.2')
])
import org.jsoup.Jsoup
import org.jsoup.nodes.Document

def ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30"
def doc = Jsoup.connect("https://www.amazon.com/gp/product/B01H2JPULU").userAgent(ua).get()

def element = doc.select("td.a-color-price.a-size-medium.a-align-bottom")
print element.first().text()
Published inGroovyJavaProgrammieren

Schreibe den ersten Kommentar

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.