Üben des Web-Scrapings mit Python und Selen

Einführung

Dieses Mal möchte ich Web-Scraping mit Python und Selen durchführen, die ich gerade studiere. Die Zielwebsite ist Google, das mit dem angegebenen Schlüsselwort sucht, die angegebene Anzahl von Elementen erfasst und die drei Elemente "Titel, URL, Zusammenfassung" in die Datenbank schreibt.

Holen Sie sich die folgenden Artikel. sele_01.png Das ultimative Ziel ist es, die Informationen in die SQLite-Datenbank zu schreiben. sele_02.png

Entwicklungsumgebung

Verwenden Sie Python 3.7.1. Die Entwicklungsumgebung ist Visual Studio 2019. Ich habe den Treiber für Firefox von [geckodriver] heruntergeladen (https://github.com/mozilla/geckodriver/releases).

Code

Der Quellcode lautet wie folgt. ** Bitte beachten Sie, dass der folgende Code ab dem "23. April 2020" funktioniert, jedoch möglicherweise aufgrund von Änderungen in den Spezifikationen der Website in der Zukunft nicht funktioniert. ** ** **

google.py


import urllib.parse
import records
from selenium.webdriver import Firefox, FirefoxOptions
from sqlalchemy.exc import IntegrityError

#Suchen Sie mit den folgenden Schlüsselwörtern
keywd = ['Python','Maschinelles Lernen']

#Der Name der Datei, in der die abgerufenen Daten gespeichert werden
db = records.Database('sqlite:///google_search.db')

db.query('''CREATE TABLE IF NOT EXISTS items (
            url text PRIMARY KEY,
            title text,
            summary text NULL)''')

def store_data(url, title, summary):
    try:
        db.query('''INSERT INTO items (url, title, summary)
                    VALUES (:url, :title, :summary)''', 
                    url=url, title=title, summary=summary)
    except IntegrityError:
        #Überspringen Sie dieses Element, da es bereits vorhanden ist
        print("it's already exist.")
        return False

    return True

def visit_next_page(driver, url):
    driver.get(url)

    items = driver.find_elements_by_css_selector('#rso > div.g')

    for item in items:
        tag = item.find_element_by_css_selector('div.r > a')
        link = tag.get_attribute('href')
        title = tag.find_element_by_tag_name('h3').text.strip()

        summary = item.find_element_by_css_selector('div.s span.st').text.strip()

        if store_data(link, title, summary):
            print(title, link, sep='\n', end='\n\n')

def main():
    #Zielwebsite und Anzahl der Suchvorgänge (Suche_unit * search_loop)
    base_url = "https://www.google.co.jp/"
    search_unit = 20 #Anzahl der auf einer Seite angezeigten Elemente (Es scheint unmöglich, 100 oder mehr anzugeben)
    search_loop = 5
    start = 0

    #Kombinieren Sie Schlüsselwörter zu einer Zeichenfolge
    target = ' '.join(keywd)

    #URL-Codierung (Standardcodierung ist"utf-8")
    target = urllib.parse.quote(target)

    opt = FirefoxOptions()
    
    #Wenn Sie das Verhalten des Browsers selbst beobachten möchten, kommentieren Sie dies bitte
    opt.add_argument('-headless')
    driver = Firefox(options=opt)

    #Stellen Sie die Wartezeit ein
    driver.implicitly_wait(10)

    #Seite für Seite lesen
    for i in range(search_loop):
        url = "{0}search?num={1}&start={2}&q={3}".format(base_url, search_unit, start, target)
        start += search_unit

        print("\npage count: {0}...".format(i + 1), end='\n\n')
        visit_next_page(driver, url)

    driver.quit()

if __name__ == '__main__':
    main()

Kommentar

Wie Sie den Kommentaren in der Quelle entnehmen können, werde ich den zentralen Teil des Scrapings erläutern.

Der Teil, der die Daten für einen Fall enthält, ist wie folgt. sele_03.png Holen Sie sich dies mit Code wie folgt:

items = driver.find_elements_by_css_selector('#rso > div.g')

Die URL des Titels und des Links lautet wie folgt. sele_04.png Der Gliederungsteil ist wie folgt. sele_05.png

Holen Sie sich dies mit Code wie folgt:

tag = item.find_element_by_css_selector('div.r > a')
link = tag.get_attribute('href')
title = tag.find_element_by_tag_name('h3').text.strip()

summary = item.find_element_by_css_selector('div.s span.st').text.strip()

Wie benutzt man

Geben Sie bei der tatsächlichen Verwendung das Schlüsselwort an, nach dem Sie suchen möchten, und den Dateinamen, der am Anfang des Quellcodes gespeichert werden soll.

#Suchen Sie mit den folgenden Schlüsselwörtern
keywd = ['Python', 'Maschinelles Lernen']

#Der Name der Datei, in der die abgerufenen Daten gespeichert werden
db = records.Database('sqlite:///google_search.db')

Auch wenn dasselbe Programm mehrmals ausgeführt wird, wird dieselbe URL übersprungen, ohne registriert zu werden.

def store_data(url, title, summary):
    try:
        db.query('''INSERT INTO items (url, title, summary)
                    VALUES (:url, :title, :summary)''', 
                    url=url, title=title, summary=summary)
    except IntegrityError:
        #Überspringen Sie dieses Element, da es bereits vorhanden ist
        print("it's already exist.")
        return False

    return True

Ergänzung

Zuerst dachte ich, ich würde ungefähr 1000 Artikel auf einer einzelnen Seitenanzeige erhalten, aber es scheint, dass das Limit gemäß den Spezifikationen von Google bei ungefähr 100 Artikeln pro Seite liegt. Deshalb kratz ich, während ich mit zwei Variablen, "search_unit" und "search_loop", zur nächsten Seite wechsle.

Warum nicht auch Beautiful Soup verwenden? Ich wollte jedoch die Verwendung von Selen üben, und da es heutzutage viele Websites gibt, die JavaScript verwenden, scheint es mehr Möglichkeiten zu geben, Selen zu verwenden, also diesmal mit dieser Methode Ich versuchte zu.

Am Ende

Es steht Ihnen frei, den diesmal eingeführten Quellcode zu verwenden, dies geschieht jedoch auf eigenes Risiko.

Nachschlagewerke, Nachschlagewerke

[Grundlagen und Praxis des Python-Scrapings / Seppe vanden Broucke et al.](Https://www.amazon.co.jp/Python%E3%82%B9%E3%82%AF%E3%83%AC%E3%82% A4% E3% 83% 94% E3% 83% B3% E3% 82% B0% E3% 81% AE% E5% 9F% BA% E6% 9C% AC% E3% 81% A8% E5% AE% 9F% E8% B7% B5-% E3% 83% 87% E3% 83% BC% E3% 82% BF% E3% 82% B5% E3% 82% A4% E3% 82% A8% E3% 83% B3% E3 % 83% 86% E3% 82% A3% E3% 82% B9% E3% 83% 88% E3% 81% AE% E3% 81% 9F% E3% 82% 81% E3% 81% AEWeb% E3% 83 % 87% E3% 83% BC% E3% 82% BF% E5% 8F% 8E% E9% 9B% 86% E8% A1% 93-Impress-Top-Gang / dp / 4295005282 / ref = tmm_pap_swatch_0? _Encoding = UTF8 & qid = 1587624962 & sr = 1-1)

Recommended Posts

Üben des Web-Scrapings mit Python und Selen
Scraping mit Python, Selen und Chromedriver
Schaben mit Selen [Python]
Erste Schritte mit Python Web Scraping Practice
Erste Schritte mit Python Web Scraping Practice
Einfaches Web-Scraping mit Python und Ruby
Schaben mit Selen in Python
Ich habe versucht, Web-Scraping mit Python und Selen
Scraping mit Selen in Python
Web Scraping mit Selenium (Python)
Schaben mit Selen + Python Teil 2
Web Scraping Anfänger mit Python
Scraping mit Selen in Python (Basic)
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Kratzen mit Python und schöner Suppe
Schaben mit Selen
Schaben mit Selen ~ 2 ~
Schaben mit Selen
Webcrawlen, Web-Scraping, Zeichenerfassung und Speichern von Bildern mit Python
WEB-Scraping mit Python (für persönliche Notizen)
Pferderennseite Web Scraping mit Python
[Python] Lesen Sie die HTML-Datei und üben Sie das Scraping
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Erfolgreiches Schaben mit Selen
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Scraping mit Python + PhantomJS
Screenshot mit Selen (Python Edition)
Scraping mit Python + PyQuery
Scraping von RSS mit Python
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Kratzen Sie das Essen mit Python und geben Sie es an CSV aus
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Ziehen Sie eine lokale Datei mit Selenium (Python) per Drag & Drop.
Starten Sie einen Webserver mit Python und Flask
Web Scraping mit Python (Wettervorhersage)
Web Scraping mit Python (Aktienkurs)
Programmieren mit Python und Tkinter
Ich habe versucht, mit Python zu kratzen
Ver- und Entschlüsselung mit Python
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Schaben mit Chromedriver in Python
Festliches Scraping mit Python, Scrapy
Speichern Sie Bilder mit Web Scraping
Python: Arbeiten mit Firefox mit Selen
Analysieren und visualisieren Sie JSON (Webanwendung ⑤ mit Python + Flask)
WEB-Scraping-Technologie und Bedenken
Automatisches Folgen auf Twitter mit Python und Selen! (RPA)
Schnelles Web-Scraping mit Python (unterstützt das Laden von JavaScript)
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Einfaches Web-Scraping mit Scrapy
Scraping mit Tor in Python
Web-API mit Python + Falcon
Python-Anfänger bleiben beim ersten Web-Scraping stecken
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Kratzwettervorhersage mit Python