[PYTHON] Ich habe versucht, die verkratzten Daten in CSV zu speichern!

Einführung

Ich habe kürzlich etwas über Scraping gelernt und es implementiert. Dieses Mal habe ich ein Schlüsselwort in " CiNii-Artikel - Suche nach japanischen Artikeln - Nationales Institut für Informatik " erstellt. Alle "Titel", "Autoren" und "Papierveröffentlichungsmedien" der Artikel, die auf das Schlüsselwort treffen, werden in CSV erfasst und gespeichert. Es war eine gute Studie, um das Schaben zu lernen, also schrieb ich einen Artikel. Wir hoffen, es hilft denen, die das Schaben lernen!

Code

Unten ist der Code, den ich selbst geschrieben habe. Die Erklärung ist mit dem Code geschrieben, also schauen Sie sie sich bitte an. Besuchen Sie auch die Website " CiNii-Artikel - Suche nach japanischen Artikeln - Nationales Institut für Informatik " und Chrome Ich denke, dass sich das Verständnis vertiefen wird, wenn Sie es tun, während Sie die Struktur von HTML mithilfe der Überprüfungsfunktion von betrachten. Diesmal habe ich diesen Code als "search.py" gespeichert.

import sys
import os
import requests
import pandas as pd
from bs4 import BeautifulSoup
import re


def main():
    url ='https://ci.nii.ac.jp/search?q={}&count=200'.format(sys.argv[1])
    res = requests.get(url)
    soup = BeautifulSoup(res.content , "html.parser")

    #Überprüfen Sie die Anzahl der Suchvorgänge.
    #Im Text'\n Suchergebnisse\n\t\n\t0 Fälle\n\t'Es enthält solche Daten.
    search_count_result = soup.find_all("h1" , {"class":"heading"})[0].text
    #Ermitteln Sie die Anzahl der Suchvorgänge mit regulären Ausdrücken
    pattern = '[0-9]+'
    result = re.search(pattern, search_count_result)
   
   #Wenn kein Suchergebnis vorhanden ist, endet die Funktion hier
    search_count = int(result.group())
    if  search_count == 0:
        return print('Es gibt keine Suchergebnisse.')

    print('Die Anzahl der Suchvorgänge beträgt' + str(search_count) + 'Es ist eine Sache.')

    #Erstellen eines Verzeichnisses zum Speichern von Daten.
    try:
        os.makedirs(sys.argv[1])
        print("Ein neues Verzeichnis wurde erstellt.")
    except FileExistsError:
        print("Es wird ein Verzeichnis sein, das bereits existiert.")

    #Um alle Suchergebnisse zu erhalten, geben Sie die Nummer für ein.
    #Dieses Mal ist es auf 200 eingestellt, da es alle 200 Fälle angezeigt wird.
    if search_count // 200 == 0:
        times = 1
    elif search_count % 200 == 0:
        times = search_count // 200
    else:
        times = search_count // 200 + 1

    
    #Erwerben Sie Autoren, Titel und Publikationsmedien sofort
    title_list = []
    author_list = []
    media_list = []

    #Verarbeitung zum Löschen von Leerzeichen hier
    escape = str.maketrans({"\n":'',"\t":''})
    for time in range(times):
        
        #URL abrufen
        count = 1 + 200 * time
        #search?q={}Geben Sie hier das Schlüsselwort ein, nach dem Sie suchen möchten.
        #count=200&start={}Es zählt alle 200 und gibt die Nummer ein, von der aus angezeigt werden soll.
        url ='https://ci.nii.ac.jp/search?q={}&count=200&start={}'.format(sys.argv[1], count)
        print(url)
        res = requests.get(url)
        soup = BeautifulSoup(res.content , "html.parser")


        for paper in soup.find_all("dl", {"class":"paper_class"}):#Drehen Sie die Schlaufe für jedes Papier.
            
            #Titel holen
            title_list.append(paper.a.text.translate(escape))
            #Erwerb des Autors
            author_list.append(paper.find('p' , {'class':"item_subData item_authordata"}).text.translate(escape))
            #Erwerb von Publikationsmedien
            media_list.append(paper.find('p' , {'class':"item_extraData item_journaldata"}).text.translate(escape))
    
    #Als CSV als Datenrahmen speichern.
    jurnal = pd.DataFrame({"Title":title_list , "Author":author_list , "Media":media_list})
    
    #Die Codierung wird durchgeführt, um verstümmelte Zeichen zu vermeiden.
    jurnal.to_csv(str(sys.argv[1] + '/' + str(sys.argv[1]) + '.csv'),encoding='utf_8_sig')
    print('Ich habe eine Datei erstellt.')
    print(jurnal.head())


if __name__ == '__main__':
    #Der Code, den Sie nur ausführen möchten, wenn Sie das Modul direkt ausführen
    main()

Ich habe versucht, es umzusetzen.

Ich habe versucht, das umzusetzen, was ich tatsächlich erstellt habe. Geben Sie zunächst Folgendes in das Terminal ein. Dieses Mal habe ich maschinelles Lernen als Suchbegriff eingegeben. Anstelle des maschinellen Lernens können Sie das Schlüsselwort eingeben, nach dem Sie suchen möchten.

python search.py maschinelles Lernen

Wenn alles gut geht, sieht es so aus: 2020-10-27 (3).png

Der Inhalt der CSV sieht so aus. 2020-10-27 (4).png

Schließlich

Wie war das? Ich habe vor ungefähr drei Tagen das Scraping gelernt, aber der Code war schmutzig, aber relativ einfach zu implementieren. Ich denke, ich habe noch mehr Zeit zum Lernen, also werde ich weiterhin mein Bestes geben.

Recommended Posts

Ich habe versucht, die verkratzten Daten in CSV zu speichern!
Ich habe mich im Labyrinth verlaufen
Ich habe an der ISUCON10-Qualifikationsrunde teilgenommen!
Überprüfen Sie die Datenzusammenfassung in CASTable
Ich habe die Warteschlange in Python geschrieben
Ich habe den Stack in Python geschrieben
Dateneingabe / -ausgabe in Python (CSV, JSON)
Lesen Sie alle CSV-Dateien im Ordner
Schriftliche Auswahlsortierung in C.
Ich kann das Element in Selen nicht bekommen!
Ich habe das Datenaufbereitungstool Paxata berührt
Ich habe den Gleitflügel in der Schöpfung geschrieben.
Wie sollen die in Curl --data-urlencode übergebenen Daten in Python Requests dargestellt werden?
Ich habe nach Railway Kawayanagi aus den Daten gesucht
Bei der Konvertierung von CSV in JSON mit Python bin ich auf einen Zeichencode gestoßen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, "Birthday Paradox" mit Python zu simulieren
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich kann keine Zeichen in den Textbereich eingeben! ?? !! ?? !! !! ??
[Datenanalyse] Soll ich die Harumi-Flagge kaufen?
Die Geschichte des Lesens von HSPICE-Daten in Python
Ich habe versucht, die inverse Gammafunktion in Python zu implementieren
CSV in Python
Ich habe den im Qiita Adventskalender 2016 gelöschten Kalender überprüft
Ich habe versucht, Human In The Loop zu implementieren - Teil ① Dashboard -
Ich möchte den Fortschritt in Python anzeigen!
[Erste Datenwissenschaft ⑥] Ich habe versucht, den Marktpreis von Restaurants in Tokio zu visualisieren
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich konvertiere AWS JSON-Daten wie folgt in CSV
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Registrieren Sie gemeinsam Daten im Firestore mithilfe der CSV-Datei in Python
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, das Spiel in der J League vorherzusagen (Datenanalyse)
Lesen Sie die CSV-Datei und zeigen Sie sie im Browser an
Über die Ineffizienz der Datenübertragung im luigi on-memory
[Django] Tabelle abschneiden (alle Tabellendaten löschen)
Lesen Sie die Linkliste im CSV-Format mit dem Graph-Tool
Den Inhalt der Daten in Python nicht kennen
Ich habe die Datenzuordnung zwischen ArangoDB und Java untersucht
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Verwenden wir die offenen Daten von "Mamebus" in Python
Versuchen Sie, die in Firefox gespeicherten Anmeldedaten zu entschlüsseln
[Hinweis] Das installierte Modul kann nicht im Jupiter aufgerufen werden.
Was ich durch die Teilnahme am ISUCON10-Qualifying gelernt habe
Ich möchte R-Datensatz mit Python verwenden
Ich kann den Darknet-Befehl in Google Colaboratory nicht verwenden!
Abtastung in unausgeglichenen Daten
So berechnen Sie die Summe oder den Durchschnitt von Zeitreihen-CSV-Daten in einem Augenblick
Ich habe die Körner gezählt
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Ich habe das in Google Cloud Dataflow vorinstallierte Python-Paket überprüft
Ich habe an der Übersetzungsaktivität des offiziellen Django-Dokuments teilgenommen
[Python] Öffnen Sie die CSV-Datei in dem von Pandas angegebenen Ordner
Ich habe den Super-Resolution-Algorithmus "PULSE" in einer Windows-Umgebung ausprobiert
Ich habe versucht, eine Rangliste zu erstellen, indem ich das Mitgliederteam der Organisation abgekratzt habe
Mezzanine-Einführungsnotiz, dass ich im Fluss stecken geblieben bin
Ich habe die Grundoperation von Seaborn im Jupyter Lab geschrieben