In Python gibt es verschiedene Ansätze zum Web-Scraping. In diesem Artikel nehmen wir Scrapy, ein Framework zum Scraping, als Thema und lernen Scrapy kennen, während wir tatsächlich ein einfaches Beispiel erstellen.
Scarpy ist ein schnelles High-Level-Scraping-Framework. Es hat verschiedene Funktionen im Zusammenhang mit dem Crawlen und Scraping von Websites. Die Hauptfunktionen sind in Komponenten unterteilt, und der Benutzer erstellt Klassen für jede Komponente, um ein Programm zu erstellen.
Von http://doc.scrapy.org/en/1.0/topics/architecture.html
Die Hauptkomponenten sind:
Scrapy Engine
Scheduler
Downloader
Spiders
Item Pipeline
Wie Sie sehen können, hat Scrapy verschiedene Funktionen. Erstellen Sie dieses Mal zuerst Spider, das das Grundkonzept von Scrapy ist. Schreiben wir ein Programm, um die URL im Adventskalender von Qiita zu veröffentlichen.
Zuerst mit pip installieren.
pip install scrapy
Erstellen Sie als Nächstes Spider, eine der Komponenten. Spider hat einen URL-Endpunkt, um den Crawling-Prozess zu starten. Beschreibt den Vorgang zum Extrahieren der URL.
# -*- coding: utf-8 -*-
import scrapy
class QiitaSpider(scrapy.Spider):
name = 'qiita_spider'
#Endpunkt (Liste der URL, mit der das Crawlen gestartet werden soll)
start_urls = ['http://qiita.com/advent-calendar/2015/categories/programming_languages']
custom_settings = {
"DOWNLOAD_DELAY": 1,
}
#Beschreiben des URL-Extraktionsprozesses
def parse(self, response):
for href in response.css('.adventCalendarList .adventCalendarList_calendarTitle > a::attr(href)'):
full_url = response.urljoin(href.extract())
#Erstellen Sie eine Anfrage basierend auf der extrahierten URL und laden Sie sie herunter
yield scrapy.Request(full_url, callback=self.parse_item)
#Erstellen Sie ein Element, um den Inhalt basierend auf der heruntergeladenen Seite zu extrahieren und zu speichern
def parse_item(self, response):
urls = []
for href in response.css('.adventCalendarItem_entry > a::attr(href)'):
full_url = response.urljoin(href.extract())
urls.append(full_url)
yield {
'title': response.css('h1::text').extract(),
'urls': urls,
}
Scrapy enthält viele Befehle. Diesmal um Spider zu starten Führen Sie Spider mit dem Befehl runspider aus. Mit der Option -o können Sie das von parse_item erstellte Ergebnis in einer Datei im JSON-Format speichern.
scrapy runspider qiita_spider.py -o advent_calendar.json
Das Ausführungsergebnis ist wie folgt. Ich konnte eine Liste mit Titeln und geposteten URLs für jeden Adventskalender erhalten!
{
"urls": [
"http://loboskobayashi.github.io/pythonsf/2015/12-01/recomending_PythonSf_one-liners_for_general_python_codes/",
"http://qiita.com/csakatoku/items/444db2d0e421265ec106",
"http://qiita.com/csakatoku/items/86904adaa0922e80069c",
"http://qiita.com/Hironsan/items/fb6ee6b8e0291a7e5a1d",
"http://qiita.com/csakatoku/items/77a36888d0851f6d4ff0",
"http://qiita.com/csakatoku/items/a5b6c3604c0d411154fa",
"http://qiita.com/sharow/items/21e421a2a40275ee9bb8",
"http://qiita.com/Lspeciosum/items/d248b64d1bdcb8e39d32",
"http://qiita.com/CS_Toku/items/353fd4b0fd9ed17dc152",
"http://hideharaaws.hatenablog.com/entry/django-upgrade-16to18",
"http://qiita.com/FGtatsuro/items/0efebb9b58374d16c5f0",
"http://shinyorke.hatenablog.com/entry/2015/12/12/143121",
"http://qiita.com/wrist/items/5759f894303e4364ebfd",
"http://qiita.com/kimihiro_n/items/86e0a9e619720e57ecd8",
"http://qiita.com/satoshi03/items/ae616dc080d085604b06",
"http://qiita.com/CS_Toku/items/32028e65a8bfa97266d6",
"http://fx-kirin.com/python/nfp-linear-reggression-model/"
],
"title": [
"Python \u305d\u306e2 Advent Calendar 2015"
]
},
{
"urls": [
"http://qiita.com/nasa9084/items/40f223b5b44f13ef2925",
"http://studio3104.hatenablog.com/entry/2015/12/02/120957",
"http://qiita.com/Tsutomu-KKE@github/items/29414e2d4f30b2bc94ae",
"http://qiita.com/icoxfog417/items/913bb815d8d419148c33",
"http://qiita.com/sakamotomsh/items/ab6c15b971587905ef43",
"http://cocu.hatenablog.com/entry/2015/12/06/022100",
"http://qiita.com/masashi127/items/ca092c13e1300f4f6ade",
"http://qiita.com/kaneshin/items/269bc5f156d86f8a91c4",
"http://qiita.com/wh11e7rue/items/15603e8970c36ab9733d",
"http://qiita.com/ohkawa/items/368e6bcadc56a118adaf",
"http://qiita.com/teitei_tk/items/5c5c9e653b3a13108d12",
"http://sinhrks.hatenablog.com/entry/2015/12/13/215858"
],
"title": [
"Python Advent Calendar 2015"
]
},
Dieses Mal habe ich Spider erstellt, eine grundlegende Komponente von Scrapy, und das Scraping durchgeführt. Wenn Sie Scrapy verwenden, übernimmt das Framework die routinemäßige Verarbeitung im Zusammenhang mit dem Crawlen. Daher können Entwickler nur die Teile beschreiben und entwickeln, die für Dienste und Anwendungen wirklich erforderlich sind, z. B. die URL-Extraktionsverarbeitung und die Datenspeicherverarbeitung. Ab dem nächsten Mal werden wir den Cache abdecken und die Verarbeitung speichern. freue mich auf!
Recommended Posts