[Teil 2] Crawlen mit Python! Klicken Sie auf die Webseite, um sich zu bewegen!

zunaechst

Hoppla! Vor kurzem bin ich Jesse (ich bin von Human Wolf J ~ ♪) mit nur 15 umgekehrten Katzen! Die Fortsetzung des letzten Males ist abgeschlossen, also ist es für die Öffentlichkeit zugänglich! Wenn Sie möchten, lesen Sie aus dem vorherigen (https://qiita.com/Jessica_nao_/items/b9f38a4413e424e3e585)!

Was du machen willst

Es gibt nur eine URL, aber ich wollte alle Daten aus der Tabelle extrahieren, die 20 Seiten mit jeweils 100 Elementen gleichzeitig enthält. Ich habe den Selen-Webdriver dazu gebracht, mein Bestes zu geben! Oh, wie der Tag sagt, ich benutze Python3!

Crawlen x Scraping mit Python und Selen!

--Teil2: Diese Seite! Ich habe Chrome Webdriver verwendet, um auf ein Element auf der Seite zu klicken, um es zu verschieben! Die Daten wurden als csv ~ gespeichert.

Inhalt

Betrachtung

Ich finde es ziemlich klug, eine Funktion zum Erstellen eines Dateinamens zu haben! Lol

sample.py


 def mkFile():

Ich dachte, es wäre besser gewesen, den folgenden Prozess in diesen einzufügen und ihn in Funktionen zu unterteilen.

Ich denke auch, dass dies wahrscheinlich der Stolperstein ist. Das Laden der Seite dauert einige Zeit. Machen Sie also unbedingt eine Pause! Das ist ↓↓

sample.py


 sleep(3):

Vergessen Sie nicht, den Schlaf von Zeit zu Zeit zu importieren, da Sie eine Pause haben!

Ergebnisse

sample.py


import re
from selenium import webdriver
from time import sleep

#Ich dachte, es wäre besser, es mit Excel zu öffnen, also Shift_Ich bin einmal zu JIS gegangen,
#Gibt es Zeichen, die nicht angezeigt werden können? Ich weiß es nicht, aber ich habe aufgegeben, weil ich einen Fehler bekommen habe.
mojicode = "utf8"

def mkFN(cnt,typeindex):
    types = [
        ["sample_", ".txt"],
        ["trimmed_", ".txt"],
        ["fin_", ".csv"],
    ]
    cntstr = str(cnt)
    if len(cntstr) == 1:
        cntstr = "0" + cntstr
    ans = "data/"
    ans += types[typeindex][0] + cntstr + types[typeindex][1]
    return ans

def gettxt2(cnt):
    url = "https://www.sample.com"
    path = "/Users/sample/Downloads/chromedriver"
    fn0 = "data/sample"
    fn1 = ".txt"
    
    driver = webdriver.Chrome(path)
    driver.get(url)
    sleep(3)
    output = driver.page_source
    filename = mkFN(0,0)
    with open(filename,"w",encoding=mojicode) as f:
        f.write(output)
    print(filename + ": done.")

    #Scheint es, als müssten Sie es erneut initialisieren?
    output = driver.page_source
    sleep(3)

    for i in range(1,cnt):
        element = driver.find_element_by_link_text("Next")
        element.click()
        sleep(3)
        output = driver.page_source

        filename = mkFN(i,0)
        with open(filename,"w",encoding=mojicode) as f:
            f.write(output)
        print(filename + ": done.")


def trimming(cnt):
    filename = mkFN(cnt,0)
    filename2 = mkFN(cnt,1)
    with open(filename) as f:
        contents = f.read()
    regexen = [
        r'<tbody><tr class="jsgrid-row">',
        r'</td></tr></tbody></table></div><div class="jsgrid-pager-container"',
    ]
    #Die Pluralform des Index sind Indizes
    indices = [0,0]

    for i in range(0,2):
        matchObj = re.search(regexen[i],contents)
        indices[i] = matchObj.start()
    rslt = contents[indices[0]:indices[1]]

    with open(filename2,"w",encoding=mojicode) as f2:
        f2.write(rslt)

def removeTag(cnt):

    beforeAfter = [
        [r'</tr>', "\n"],
        [r'</td>', ","],
        [r'<.*?>', ""],
    ]

    with open(mkFN(cnt,1),encoding=mojicode) as f:
        contents = f.read()

    for i in range(0,3):
        contents = re.sub(beforeAfter[i][0],beforeAfter[i][1],contents)

    #Fügen Sie am Ende der Datei Kommas und Zeilenumbrüche hinzu!
    contents += ",\n"
    
    option = "a"
    if cnt == 0:
        option = "w"
    with open(mkFN("all",2),option,encoding=mojicode) as f:
        f.write(contents)


cnt = 20
gettxt2(cnt)

print("gettxt: done!")
sleep(1)


for i in range(0,cnt):
    trimming(i)
print("trimming: done!")

sleep(1)

for i in range(0,cnt):
    removeTag(i)
print("removeTag: done!")

Am Ende

Weil ich ein paar Stunden lang Probleme hatte, konnte ich am Ende nicht aufhören zu schreien, als ich sah, dass in wenigen Minuten immer mehr Informationen hinzugefügt wurden! Lol Ich hoffe, ich gewöhne mich ein bisschen mehr daran und mache mich in etwa 30 Minuten fertig.

Referenz

Recommended Posts

[Teil 2] Crawlen mit Python! Klicken Sie auf die Webseite, um sich zu bewegen!
Bewegen Sie die Schildkröte an die Stelle, an der Sie mit der Maus mit der Schildkröte in Python klicken
[CleanArchitecture with Python] Teil 2: Frameworks & Drivers Layer: Die Entstehung des Web
[Für Anfänger] Web-Scraping mit Python "Greifen Sie auf die URL auf der Seite zu, um den Inhalt abzurufen."
Speichern Sie Bilder im Web mit Python (Colab) auf einem Laufwerk.
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
[Python, Ruby] Selen-Holen Sie sich Webseiteninhalte mit Webdriver
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Laden Sie mit Python Dateien im Web herunter
[Teil1] Scraping mit Python → Organisieren Sie bis zu CSV!
Der Weg zum Kompilieren zu Python 3 mit Thrift
So schneiden Sie den unteren rechten Teil des Bildes mit Python OpenCV
Der einfachste Weg, um Stimme mit Python zu synthetisieren
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Einführung in Tornado (1): Python Web Framework mit Tornado gestartet
Geben Sie die ausführbare Python-Datei an, die mit virtualenv verwendet werden soll
Begrüßen Sie die Welt mit Python mit IntelliJ
Versuchen Sie es mit dem Python-Webframework Tornado Part 1
[Python] Mit Metie schnell Webseiten-Metadaten abrufen
Der einfachste Weg, OpenCV mit Python zu verwenden
[Einführung in Python3 Tag 20] Kapitel 9 Enträtseln des Webs (9.1-9.4)
So messen Sie die Ausführungszeit mit Python Teil 1
Einführung in Python mit Atom (unterwegs)
Versuchen Sie es mit dem Python-Webframework Tornado Part 2
So messen Sie die Ausführungszeit mit Python Part 2
Extrahieren Sie mit Python Daten von einer Webseite
[Python] So speichern Sie Bilder mit Beautiful Soup sofort im Web
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Hochladen mit Heroku, Flask, Python, Git (Teil 3)
Ich habe versucht, Soma Cube mit Python zu lösen
[Python] So legen Sie den Download-Speicherort mit youtube-dl fest
Konvertieren Sie das Bild in .zip mit Python in PDF
Ich möchte mit Python-Datenklasse nach hinten erben
Webanwendung erstellt mit Python3.4 + Django (Teil.1 Umgebungskonstruktion)
Hochladen mit Heroku, Flask, Python, Git (Teil 1)
Geben Sie MinGW als den in Python verwendeten Compiler an
Hochladen mit Heroku, Flask, Python, Git (Teil 2)
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
[Python] So schreiben Sie den Tabellenstil mit python-pptx um [python-pptx]
Bildverarbeitung mit Python (Teil 2)
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich möchte Daten mit Python analysieren können (Teil 3)
Stellen Sie mit Python eine Verbindung zu BigQuery her
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Python mit freeCodeCamp Teil1 studieren
Angrenzende Bilder mit Python Teil 1
Web Scraping mit Python + JupyterLab
Ich wollte den Panasonic Programming Contest 2020 mit Python lösen
Schaben mit Selen + Python Teil 1
Die erste API, die mit dem Python Djnago REST-Framework erstellt wurde
Ich möchte Daten mit Python analysieren können (Teil 1)
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Python> Liste> Partitionen = [0] * len (all_filepaths) / Partitionen [: test_set_size] = [1] * Nachdem Sie eine Liste mit test_set_size> 0 erstellt haben, setzen Sie den vorderen Teil auf 1.
Verschieben Sie das, was Sie mit pip installiert haben, in die Conda-Umgebung