Sie können das Python-Modul Scrapy verwenden, um Website-Daten automatisch nacheinander abzurufen, während Sie durch die Links blättern.
Um die gewünschten Daten von der Website zu extrahieren, müssen Sie den ** Speicherort der gewünschten Daten ** angeben.
Was Sie angeben, heißt ** Selector **. In Scrapy gibt es CSS- und Xpath-Spezifikationsmethoden, aber dieses Mal werde ich erklären, wie Xpath verwendet wird.
Installieren Sie Scrapy mit pip.
commandline
$ pip install scrapy
Scrapy Shell Scrapy verfügt über ein Tool namens Scrapy-Shell, mit dem Sie die Datenextraktion interaktiv überprüfen können.
commandline
scrapy shell "http://hogehoge.com/hoge/page1"
Wenn Sie like angeben, wird die interaktive Python-Shell mit der Instanzantwort ** gestartet, die die Informationen der angegebenen Seite enthält. Wenn wir tatsächlich eine Spinne (Crawler) entwickeln, extrahieren wir auch Daten aus dieser Antwortinstanz.
Grundsätzlich werden wir die Daten mit einer solchen Syntax extrahieren.
shell
>>> response.xpath('//title/text()')
[<Selector (text) xpath=//title/text()>]
In diesem Beispiel wird der Text (text ()) aller Titel-Tags (// title) im empfangenen HTML-Text extrahiert. Wenn es jedoch unverändert bleibt, ist der Rückgabewert ein Selektor wie oben beschrieben. Verwenden Sie .extract ()
, um die Zeichen abzurufen.
shell
>>> response.xpath('//title/text()').extract()
[u'exsample title']
Da es sich bei den extrahierten Daten um eine Liste handelt, machen Sie sie durch Angabe eines Arrays zu einer Zeichenfolge.
shell
>>> response.xpath('//title/text()').extract()[0]
u'exsample title'
Übrigens bedeutet diese "Zeichenfolge" Unicode. Python behandelt Zeichenfolgen in Unicode.
Wenn Sie auf mehreren Websites patrouillieren, ist der von Ihnen angegebene xpath möglicherweise nirgendwo anwendbar. Wenn Sie in diesem Zustand den 0. response.xpath (hoge) .extract [0]
des Arrays wie oben angeben, tritt ein Fehler auf, um dies zu vermeiden
shell
>>> item['hoge'] = response.xpath('//title/text()').extract_first()
Und so weiter.
Wenn Sie alle erhaltenen Sequenzen "[u'hoge1", "u'hoge2", "u'hoge3"] "usw. verketten und als Zeichenfolge erhalten möchten.
shell
>>> extract_list = [u'hoge1', u'hoge2', u'hoge3']
>>> ''.join(extract_list)
u'hoge1hoge2hoge3'
Du kannst es schaffen.
xpath | Inhalt |
---|---|
//div | Alle div-Tags |
//div[@class='aaa'] | In allen Klassen'aaa'Div Tag mit |
//div[@id='aaa']/text() | Alle, id'aaa'Div-Tag->Körper |
//a[text()='aaa']/@href | Der ganze Text'aaa'Eine Markierung->Href-Attributwert von |
//div/tr | Alle Divs->Tr-Tag des untergeordneten Elements |
//table/tr/th[text()='price']/following-sibling::td[1]/text() | Alle Tabellen->Diese Linie->Feld namens Preis->Erstes der Datenelemente->Körper |
Der x-Pfad für die letzte Tabelle ist praktisch, da Sie den Wert aus der Tabelle auf der Webseite abrufen können, indem Sie das Feld angeben (Preis im obigen Fall, Betragsteil). Wenn Sie "td" angeben, wird das td-Element in derselben Zeile immer häufiger verwendet, sodass das erste als "td [1]" extrahiert wird. Es ist "[1]". Es ist nicht "[0]".
Recommended Posts