[PYTHON] Einfaches Web-Scraping mit Scrapy

Wir haben auf leicht verständliche Weise beschrieben, wie Scrapy ausgeführt wird, ein Framework, das Web-Scraping ermöglicht. Ich bin froh, wenn Sie es als Referenz verwenden können.

Referenz: Python - Erstellen Sie einen Crawler mit Scrapy https://qiita.com/naka-j/items/4b2136b7b5a4e2432da8

Zeitaufwand 15 Minuten Inhalt

  1. Installieren Sie Scrapy und erstellen Sie ein Projekt
  2. Über Spider
  3. Lassen Sie uns tatsächlich die Webseiteninformationen erhalten!

1. Installieren Sie Scrapy und erstellen Sie ein Projekt

Führen Sie den folgenden Pip auf dem Terminal aus, um Scrapy zu installieren

pip install scrapy

Gehen Sie dann zu dem Verzeichnis, in dem Sie das Scrapy-Projekt erstellen möchten, und führen Sie die folgenden Schritte aus

scrapy startproject sake

Danach werde ich die Website in Bezug auf Sake durchsuchen, daher habe ich den Namen des Projekts in "Sake" geändert. Anschließend werden die folgenden Ordner im aktuellen Verzeichnis konfiguriert.

Screen Shot 2020-04-09 at 11.52.09.png

2. Über Spider

Web Scraping ist mit der obigen Datei allein nicht möglich. Geben Sie daher den folgenden Befehl und den folgenden Befehl ein Erstellen Sie Dateien im Spider-Verzeichnis.

#scrapy genspider <Dateiname> <Web-URL, die Sie kratzen möchten>
scrapy genspider scrapy_sake https://www.saketime.jp/ranking/

Dann können Sie sehen, dass im Spider-Verzeichnis eine Datei mit dem Namen "rapy_sake.py "erstellt wird. Screen Shot 2020-04-09 at 11.57.12.png Der Inhalt der erstellten Datei lautet wie folgt.

sake/sake/spiders/scrapy_sake.py


# -*- coding: utf-8 -*-
import scrapy


class ScrapySakeSpider(scrapy.Spider):
    name = 'scrapy_sake'
    allowed_domains = ['https://www.saketime.jp/ranking/']
    start_urls = ['http://https://www.saketime.jp/ranking/']

    def parse(self, response):
        pass

Wie ich später ausführlich erläutern werde, werde ich hauptsächlich diesen "def parse" -Teil codieren. Stellen Sie vor dem Codieren sicher, dass Sie die Webinformationen korrekt abrufen können. Fügen Sie dem Teil "def parse" eine Druckanweisung hinzu, um die erfassten Informationen anzuzeigen.

sake/sake/spiders/scrapy_sake.py


# -*- coding: utf-8 -*-
import scrapy


class ScrapySakeSpider(scrapy.Spider):
    name = 'scrapy_sake'
    allowed_domains = ['https://www.saketime.jp/ranking/']
    start_urls = ['http://https://www.saketime.jp/ranking/']

    def parse(self, response):
        #Pass löschen und Druckanweisung hinzufügen
        print(response)

Und wenn Sie den folgenden Befehl ausführen, wird eine Menge Ausgabe zurückgegeben, aber Sie können bestätigen, dass Sie HTML fest darin haben können.

Ausführungsbefehl


#scrapy crawl <Dateiname>
scrapy crawl scrapy_sake

Ausgabe



               <li class="brand_review clearfix">
                <div>
                  <p>
Isos Stolz, ein spezielles Buch, das rohen Sake gebraut hat

Klicken Sie hier für den heutigen Sake, den speziellen Honjo-Rohsake, auf den Iso stolz ist!
Reis...                    <br>
                    <span class="brand_review_user">
                      by
                      <span>Verklagen</span>
                      <span>
                        <span class="review-star">★</span>
                        <span>4.5</span>
                      </span>
                      <span class="reviewtime">
                        <span>23. März 2020</span>
                      </span>
                    </span>

                  </p>
                </div>
              </li>
                                        </ul>
          </a>
                  </div>
:
:
:
'scheduler/dequeued': 1,
 'scheduler/dequeued/memory': 1,
 'scheduler/enqueued': 1,
 'scheduler/enqueued/memory': 1,
 'start_time': datetime.datetime(2020, 4, 9, 3, 23, 24, 461847)}
2020-04-09 12:23:26 [scrapy.core.engine] INFO: Spider closed (finished)

Als nächstes extrahieren wir nur die notwendigen Informationen von hier!

3. Lassen Sie uns tatsächlich die Webseiteninformationen erhalten!

Grundsätzlich gibt es nur zwei Dateien, die von Scrapy implementiert werden:

Lassen Sie uns zuerst von item.py aus bearbeiten. Wenn Sie es zum ersten Mal öffnen, sieht es wie in der folgenden Datei aus.

sake/items.py


# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy

class SakeItem(scrapy.Item):
    pass

Registrieren Sie in diesem Klassenteil willkürlich die Informationen, die Sie mit Scrapy erhalten möchten.

sake/items.py


# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class SakeItem(scrapy.Item):
    #Informationsname, den Sie erhalten möchten(Irgendein) = scrapy.Field()
    prefecture_maker = scrapy.Field()
    prefecture = scrapy.Field()
    maker = scrapy.Field()
    brand = scrapy.Field()
    pass

Dies ist das Ende der Beschreibung von items.py. Als nächstes fahren wir mit der Codierung vonrapy_sake.py fort.

Das ausgefüllte Formular lautet wie folgt. Ich denke, dass das Innere von def parse () reicher ist als das in Kapitel 2 oben.

sake/sake/spiders/scrapy_sake.py


# -*- coding: utf-8 -*-
import scrapy
#items.Vergessen Sie nicht, py zu importieren
from sake.items import SakeItem

class ScrapySakeSpider(scrapy.Spider):
    name = 'scrapy_sake'
    #allowed_domains = ['ja.wikipedia.org']
    start_urls = ['https://www.saketime.jp/ranking/']
    
    def parse(self, response):
        items = []
        #HTML-Tag li.Japanische Sake-Informationen wurden an einem Ort namens Clearfix gespeichert.
        sakes = response.css("li.clearfix")

        #Mehrere li auf der Seite.Schauen wir uns jeden Clearfix an
        for sake in sakes:
            #item.Deklarieren Sie ein in py definiertes SakeItem-Objekt
            item = SakeItem()
            item["prefecture_maker"] = sake.css("div.col-center p.brand_info::text").extract_first()

            #<div class="headline clearfix">Im Falle einer Beschreibung wie,headline.Dazwischen als Clearfix.Etwas anziehen
            item["brand"] = sake.css("div.headline.clearfix h2 a span::text").extract_first()

            #Bereinigen der erfassten Daten
            if (item["prefecture_maker"] is not None) or (item["brand"] is not None):
                #Löschen \ n und Leerzeichen
                item["prefecture_maker"] = item["prefecture_maker"].replace(' ','').replace('\n','')
                #Trennung von Präfektur und Hersteller
                item["prefecture"] = item["prefecture_maker"].split('|')[0]
                item["maker"] = item["prefecture_maker"].split('|')[1]
                items.append(item) 
        print(items)

    #Reflektieren Sie die Seitenumschaltung mit rekursiver Verarbeitung
        #ein Tag rel="next"Holen Sie sich die Elemente von
        next_page = response.css('a[rel="next"]::attr(href)').extract_first()
        if next_page is not None:
            #In absoluten Pfad konvertieren, wenn URL relativer Pfad ist
            next_page = response.urljoin(next_page)
            #Rückgabeanforderung einmal mit Ertrag, Sakes werden nach der Anforderung auf der Seite registriert, und die obige for-Anweisung wird erneut ausgeführt
            yield scrapy.Request(next_page, callback=self.parse)

Wenn diese ausgeführt werden, ist dies wie folgt.

:
:
:
2020-04-10 16:52:58 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://www.saketime.jp/ranking/page:110/> from <GET https://www.saketime.jp/ranking/page:110>
2020-04-10 16:52:59 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.saketime.jp/ranking/page:110/> (referer: https://www.saketime.jp/ranking/page:109/)
[{'brand': 'Orochis Zunge',
 'maker': 'Kiji Sake Brauerei',
 'prefecture': 'Shimane',
 'prefecture_maker': 'Shimane|Kiji Sake Brauerei'}, {'brand': '禱 und Minoru',
 'maker': 'Fukumitsuya',
 'prefecture': 'Ishikawa',
 'prefecture_maker': 'Ishikawa|Fukumitsuya'}, {'brand': 'Kanazawa Schönheit',
 'maker': 'Fukumitsuya',
 'prefecture': 'Ishikawa',
 'prefecture_maker': 'Ishikawa|Fukumitsuya'}, {'brand': 'Jinkuro',
 'maker': 'Kitayuki Sake Brauerei',
 'prefecture': 'Niigata',
 'prefecture_maker': 'Niigata|Kitayuki Sake Brauerei'}, {'brand': 'Kenroku Sakura',
 'maker': 'Nakamura Sake Brauerei',
 'prefecture': 'Ishikawa',
 'prefecture_maker': 'Ishikawa|Nakamura Sake Brauerei'}, {'brand': 'Geburt',
 'maker': 'Tohoku Meijo',
 'prefecture': 'Yamagata',
 'prefecture_maker': 'Yamagata|Tohoku Meijo'}, {'brand': 'SUMMERGODDESS',
 'maker': 'Mana Tsuru Sake Brauerei',
 'prefecture': 'Fukui',
:
:
:
 'scheduler/dequeued/memory': 221,
 'scheduler/enqueued': 221,
 'scheduler/enqueued/memory': 221,
 'start_time': datetime.datetime(2020, 4, 10, 7, 51, 13, 756973)}
2020-04-10 16:53:00 [scrapy.core.engine] INFO: Spider closed (finished)

Ich habe in etwa 20 Sekunden 110 Seiten japanischer Sake-Informationen im JSON-Format erhalten. Es ist bequem.

Versuchen Sie, die Websites zu durchsuchen, an denen Sie interessiert sind, um Informationen zu erhalten.

Memo

Obwohl es sich um grundlegende Informationen handelt, ist es bei Chrome-Browsern und MacOS möglich, HTML-Informationen der Site anzuzeigen, die Sie mit cmd + option + i durchsuchen möchten. Sie können auch cmd + shift + c drücken, um auf ein Element auf der Site zu klicken und zu sehen, wo es im HTML-Code dargestellt wird. Screen Shot 2020-04-10 at 17.09.44.png

Recommended Posts

Einfaches Web-Scraping mit Scrapy
Schaben mit kratzender Schale
Einfaches Web-Scraping mit Python und Ruby
Web Scraping mit Python + JupyterLab
Festliches Scraping mit Python, Scrapy
Speichern Sie Bilder mit Web Scraping
Web Scraping Anfänger mit Python
Web Scraping
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Schaben mit Selen
Scraping mit Python
WEB-Scraping mit Python (für persönliche Notizen)
Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
Web Scraping (Prototyp)
Der HTTP-Zugriff über einen Proxy in Python Web Scraping war bei Anfragen einfach
Schaben mit Selen
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Pferderennseite Web Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
Einfache Web-App mit Python + Flask + Heroku
Üben des Web-Scrapings mit Python und Selen
WEB-Scraping mit BeautifulSoup4 (Seriennummernseite)
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Web Scraping mit Python (Wettervorhersage)
Web Scraping mit Python (Aktienkurs)
Erfolgreiches Schaben mit Selen
Easy Grad-CAM mit Pytorch-Gradcam
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Scraping mit Python + PhantomJS
Erste Schritte mit Web Scraping
Probleme bei der Installation von Scrapy
Schaben mit Selen [Python]
Scraping mit Python + PyQuery
Kratzen mit schöner Suppe
Einfaches Debuggen mit ipdb
Scraping von RSS mit Python
Einfache TopView mit OpenCV
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Einfaches Scraping mit Python (JavaScript / Proxy / Cookie-kompatible Version)
Einfaches maschinelles Lernen mit Scikit-Learn und Flask ✕ Web App
Python-Anfänger bleiben beim ersten Web-Scraping stecken
Ich habe versucht, mit Python zu kratzen
Laden Sie Bilder automatisch mit Scraping herunter
Einfache toxische Umgebung mit Jenkins
Schaben mit Selen in Python
Schaben mit Selen + Python Teil 1
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Einfache Erstellung und Bereitstellung von Webservern mit EB CLI + git + Django
Entwicklung von Webanwendungen mit Flask
Einfache Ordnersynchronisation mit Python
WEB-Scraping-Technologie und Bedenken
Erstellen Sie eine Webanwendung mit Django