[PYTHON] Holen Sie sich mit Scrapy rekursiv den Titel und die URL der Website

Ich möchte ** Scrapy ** verwenden, ein Crawler- und Scraping-Framework für Python, um den Titel und die URL einer Webseite rekursiv abzurufen und im CSV-Format auszugeben. (Ist es ein Bild, das Dinge wie Sitemaps auflistet?) ※ Vollständiges Bild result.csv

URL Titel
http://www.example.com oben
http://www.example.com/news Nachrichten
http://www.example.com/news/2015 Nachrichten 2015

Umgebung

Einführung von Scrapy

Wie bei Python ist die 2.7-Serie standardmäßig unter CentOS 7 installiert. Verwenden Sie diese Option.

Führen Sie Scrapy from pip mit dem folgenden Befehl ein. $ sudo pip install Scrapy

Projekterstellung

Erstellen Sie mit dem folgenden Befehl ein Projekt für Scrapy. $ scrapy startproject HelloScrapy

Ich denke, der Inhalt des erstellten Projekts ist wie folgt. Scrapy_skeleton_half.png

Davon werden diesmal die folgenden Dateien verwendet.

Scrapy verwendet auch eine Klasse namens ** Spider **, um zu definieren, wie die Zielsite gecrawlt und abgekratzt wird. Um diese Spinne zu definieren, erstellen Sie eine Datei mit dem Namen "hellospider.py" im obigen Spinnenverzeichnis.

Bis zu diesem Punkt ist die Struktur des Projekts wie folgt. Scrapy_skeleton2_half.png

items.py Bearbeiten Sie zunächst items.py. Dieses Mal erhalten wir den Titel und die URL der Webseite. Definieren Sie daher die folgende Klasse.

items.py


from scrapy.item import Item, Field

class PageInfoItem(Item):
	URL = Field()
	title = Field()
	pass

settings.py Als nächstes bearbeiten Sie settings.py. Ich habe die folgenden Optionen hinzugefügt:

settings.py


DOWNLOAD_DELAY = 3
ROBOTSTXT_OBEY = True
DEPTH_LIMIT = 5

Die Absicht der obigen Einstellung ist, dass ich ein Crawling-Intervall von ungefähr 3 Sekunden festlegen wollte, um den Server des anderen Teilnehmers nicht zu belasten und nach robots.txt zu suchen. (Es scheint, dass eine automatische Anpassung durch AutoThrottle ebenfalls möglich ist. Wenn Sie also mehr wissen möchten, lesen Sie bitte das offizielle Dokument.) Wenn die Erkundung zu tief ist, wird es einige Zeit dauern, daher haben wir diesmal ein Limit festgelegt.

hellospider.py Definieren Sie schließlich Ihre eigene Spinne für Ihren Lieblings-Hellospider.

hellospider.py


from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.selector import Selector
from HelloScrapy.items import PageInfoItem

class HelloSpider(CrawlSpider):
    #Kennung beim Ausführen von Scrapy über die CLI
    name = 'hello'
    #Domänen, in denen Spinnen erkunden können
    allowed_domains = ["www.example.com"]
    #Startpunkt(Beginnen Sie mit der Erkundung)URL
    start_urls = ["http://www.example.com"]
    #Spezifische Regel mit LinkExtractor-Argument(Scrapen Sie beispielsweise nur Seiten, die neue URLs enthalten)Kann angegeben werden, aber dieses Mal gibt es kein Argument, da es auf alle Seiten abzielt
    #Wenn Sie eine Seite herunterladen, die der Regel entspricht, wird die im Rückruf angegebene Funktion aufgerufen.
    #Wenn follow auf True gesetzt ist, wird die Suche rekursiv durchgeführt.
    rules = [Rule(LinkExtractor(), callback='parse_pageinfo', follow=True)]
    
    def parse_pageinfo(self, response):
        sel = Selector(response)
        item = PageInfoItem()
        item['URL'] = response.url
        #Geben Sie an, welcher Teil der Seite entfernt werden soll
        #Neben der Angabe im xPath-Format ist auch die Angabe im CSS-Format möglich
        item['title'] = sel.xpath('/html/head/title/text()').extract()
        return item

erledigt.

Lauf

Wenn Sie danach den folgenden Befehl ausführen, wird crawl & scrape rekursiv von der angegebenen Startpunkt-URL ausgeführt und das Ergebnis als csv ausgegeben.

$ scrapy crawl hello -o result.csv (Beachten Sie, dass das Argument nicht hellospider.py ist, sondern der darin definierte Bezeichner.)

Das Ergebnis kann übrigens auch im JSON- oder XML-Format ausgegeben werden. Ich habe es auf meiner eigenen Website versucht, aber ich denke, dass es entsprechend dem fertigen Bild ausgegeben werden kann.

** * Wenn Sie es für eine Website im Internet ausführen, tun Sie dies bitte auf eigenes Risiko. ** ** **

Referenz: http://doc.scrapy.org/en/latest/ http://orangain.hatenablog.com/entry/scrapy http://akiniwa.hatenablog.jp/entry/2013/04/15/001411

Recommended Posts

Holen Sie sich mit Scrapy rekursiv den Titel und die URL der Website
Datum und Uhrzeit im angegebenen Format abrufen
Rufen Sie die aktuellen Standortinformationen und den Benutzeragenten in Python ab
Holen Sie sich Aktienkurse und erstellen Sie mit Python Kerzendiagramme
Suchen Sie rekursiv nach Dateien und Verzeichnissen in Python und geben Sie sie aus
Rufen Sie die Benutzer-ID und den Bildschirmnamen des Teilnehmers in Slack ab
Ändern Sie das statische Dateispeicherverzeichnis und die URL in Flask
So erhalten Sie RGB- und HSV-Histogramme mit OpenCV
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.