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 |
… | … |
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
Erstellen Sie mit dem folgenden Befehl ein Projekt für Scrapy.
$ scrapy startproject HelloScrapy
Ich denke, der Inhalt des erstellten Projekts ist wie folgt.
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.
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.
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