Drehen Sie in Python mehrere Listen mit for-Anweisung gleichzeitig

Verwenden Sie "zip".

Verwenden Sie in der Artikelliste einer Site "BeautifulSoup4", um eine Liste der URLs und Titel abzurufen. Der Zweck besteht darin, eine Liste von "[" url >>> title "," url >>> title "] zu erstellen, die die URL und den Titel mit"> >> "verbindet.

Wenn die Seite einen Titel im a-Tag-Element hat, wie unten gezeigt ...


import requests, bs4

res = requests.get('https://qiita.com/takuto_neko_like')
posts = bs4.BeautifulSoup(res.text, 'html.parser').select('.u-link-no-underline')
print(posts)

Die Variable posts enthält <class'bs4.element.Tag '>, und Sie können den Inhalt eines HTML-Tags anzeigen, indem Sie einzeln als posts [0] darauf zugreifen.

Der Titel wird im Element des a-Tags beschrieben


[<a class="u-link-no-underline" href="/takuto_neko_like/items/52c6c52385386544aa62">Wo ich mir Sorgen um Heroku machte</a>, <a class="u-link-no-underline" href="/takuto_neko_like/items/c5791f267e0964e09d03">Ich habe ein Tool erstellt, um neue Artikel zu erhalten</a>, <a class="u-link-no-underline" href="/takuto_neko_like/items/93b3751984e5e3fd3670">Fisch bewegte sich zu langsam, um Ärger zu machen</a>, <a class="u-link-no-underline" href="/takuto_neko_like/items/62aeb4271614f6f0347f">Verwenden Sie Diagramme, die mit Plotly mit Django erstellt wurden</a>, <a class="u-link-no-underline" href="/takuto_neko_like/items/c9c80ff453d0c4fad239">【Python】super()Gründe für das Überschreiben mit</a>, <a class="u-link-no-underline" href="/takuto_neko_like/items/14e92797fa2b23a64adb">[Python] Was wird durch Mehrfachvererbung geerbt?</a>, <a class="u-link-no-underline" href="/takuto_neko_like/items/6cf9bade3d9515a724c0">【Python】@Was sind Klassenmethoden und Dekorateure?</a>, <a class="u-link-no-underline" href="/takuto_neko_like/items/aed9dd5619d8457d4894">【Python】*args **Was ist Kwrgs?</a>, <a class="u-link-no-underline" href="/takuto_neko_like/items/bb8d0957347636b5bf4f">[Bootstrap] So reparieren Sie die Navigationsleiste und zeigen sie an, auch wenn Sie einen Bildlauf durchführen</a>]

Der Inhalt jedes Tags ist "<class'bs4.element.Tag"> "= Tag-Objekt. Wenn Sie es also in einen Zeichenfolgentyp mit str () konvertieren, können Sie" .find () "mit" Tag-Namen und -Attributen verwenden. Unter Verwendung des Index, der durch Angabe des Namens usw. erhalten wird, können nur die Zeichenfolgen des URL-Teils und des Titelteils extrahiert werden.

URL und Titel formatieren



    for post in posts:
        #URL extrahieren
        index_first = int(str(post).find('href=')) + 6
        index_end = int(str(post).find('">'))
        url = (str(post)[index_first : index_end])
        #Titel extrahieren
        index_first = int(str(post).find('">')) + 2
        index_end = int(str(post).find('</a'))
        title = (str(post)[index_first : index_end].replace('\u3000', ' '))

        url_title_set.append(f"{url}>>>{title}")

Wenn ja, ist es geschafft.

Es gibt jedoch viele Websites vom Typ **, bei denen kein Titel als Element des Tags ** a aufgeführt ist. Beispielsweise wird ein Muster, in dem Artikelinformationen als Karte angezeigt werden, die aus einem Bild und einem Titel besteht, und ein Link an die gesamte Karte angehängt.

Beispiel



    <div class='card'><a href='#' class='link'>
        <div class='image'><img src='#'></div>
        <div class='title'>Titel</div>
        </a>
    </div>

In einem solchen Fall können Sie in das div-Tag gelangen, auf das die Kartenklasse angewendet wird, indem Sie die Klasse card in .select von bs4 angeben. Ich möchte von dort die href-Informationen des a-Tags und des Elements der Titelklasse div abrufen.

Der eigentliche Code hat mehr überlappende Elemente, daher kann es etwas ärgerlich sein, eine bestimmte Zeichenfolge in .find aus dem übergeordneten Element zu finden.

BS4 hat auch eine Möglichkeit, auf die untergeordneten Elemente zuzugreifen, aber es schien ein bisschen ärgerlich, als ich mir die Dokumentation ansah, so dass ich jedes einzeln wie folgt bekam.


posts_links = bs4.BeautifulSoup(res.text, 'html.parser').select('.link')
posts_titles = bs4.BeautifulSoup(res.text, 'html.parser').select('.title')

Ich werde einzeln auf das "Tag-Objekt" zugreifen, indem ich die Liste der Beiträge mit der for-Anweisung mit der URL und dem Titelformat des vorherigen Codes umdrehe. Diesmal gibt es jedoch zwei Listen. Drehen Sie zwei Listen gleichzeitig mit einer for-Anweisung und kombinieren Sie die URL und den Titel, die Sie aus jeder Liste erhalten haben. Dann möchte ich es in einer neuen Liste speichern.

Auf diese Weise verwenden Sie "zip", wenn Sie mehrere Listen gleichzeitig mit einer for-Anweisung drehen möchten.


now_posts_link_title_set = []

for (posts_link, posts_title) in zip(posts_links, posts_titles):
        index_first = int(str(posts_link).find('href=')) + 6
        index_end = int(str(posts_link).find('">'))
        posts_link_set = (str(posts_link)[index_first : index_end])

        index_first = int(str(posts_title).find('h2')) + 3
        index_end = int(str(posts_title).find('</h2'))
        posts_title_set = (str(posts_title)[index_first : index_end].replace('\u3000', ' ')) #Leerer Ersatz
        now_posts_link_title_set.append(f"{posts_link_set}>>>{posts_title_set}")

Es ist okay, mehr als zwei zu haben

for (a, b, c, d) in zip(a_list, b_list, c_list, d_list)

Wenn sich die Anzahl der Elemente in der Liste unterscheidet, wird das größere ignoriert

aa = [1,2,3,4,5]
bb = ['a', 'b', 'c']

for (a, b) in zip(aa, bb):
  print(f'{a} : {b}')

#Ergebnis
1 : a
2 : b
3 : c

Das ist praktisch

Recommended Posts

Drehen Sie in Python mehrere Listen mit for-Anweisung gleichzeitig
Verarbeiten Sie mehrere Listen mit for in Python
python Hinweis: enumerate () - Index und Element der Liste gleichzeitig abrufen und zur Anweisung wenden
So definieren Sie mehrere Variablen in einer Python for-Anweisung
Drehen Sie ein Array von Zeichenfolgen mit einer for-Anweisung (Python3).
Ändern Sie die Liste in der for-Anweisung
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
MongoDB mit Python zum ersten Mal
[Einführung in die Udemy Python3 + -Anwendung] 47. Verarbeiten Sie das Wörterbuch mit einer for-Anweisung
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Richten Sie einen Server ein, der mehrere Verbindungen gleichzeitig verarbeitet
Zeichnen Sie mit Pythons Matplotlib mehrere Karten und Daten gleichzeitig
Verwenden Sie vorerst Logger mit Python
Schleifen Sie gleichzeitig Variablen in der Vorlage
Zählen Sie, wie oft zwei Werte gleichzeitig in einem Element vom Typ Python 3-Iterator angezeigt werden
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Führen Sie es vorerst mit CentOS7 + Apache2.4 + Python3.6 aus
Registrieren Sie zum ersten Mal eine Aufgabe in cron
Automatisieren Sie das Entfernen des Hintergrunds für die neuesten Porträts in einem Verzeichnis mit Python und API
Erstellen Sie ein untergeordnetes Konto für die Verbindung mit Stripe in Python
[In kürzester Zeit verstehen] Python-Grundlagen für die Datenanalyse
Erstellen Sie einen Twitter-BOT mit dem GoogleAppEngine SDK für Python
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ②
Ich habe die gleiche Datenanalyse mit kaggle notebook (python) und PowerBI gleichzeitig versucht ①
So drehen Sie die for-Anweisung, wenn das Wörterbuch mehrere Werte für einen Schlüssel enthält
[Python] Was ist eine with-Anweisung?
Siehe Python zum ersten Mal
[Python 3.8 ~] Schreiben Sie Arrays usw. gleichzeitig mit der Definition neu [Tipps]
Erstellen Sie mit Python + Qt (PySide) einen Farbwähler für das Farbrad.
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Lesen Sie die Datei in Python mit einem relativen Pfad aus dem Programm
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
Durchsuchen Sie .loc und .iloc gleichzeitig in pandas DataFrame
Lösen Sie Teilsummenprobleme mit der vollständigen Suche in Python
Sehen Sie sich die in Python 3.8.2 integrierte Ausnahmebaumstruktur an
Versuchen Sie vorerst, FireBase Cloud Firestore mit Python zu verwenden
Schlafverarbeitung für einen bestimmten Zeitraum (Sekunden) oder länger in Python
Was ich durch das Schreiben einer Python Pull-Anfrage zum ersten Mal in meinem Leben gelernt habe
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Ein Memo, das durch Umbenennen der Dateinamen im Ordner mit Python organisiert wird
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Tipps zum Umgang mit Binärdateien in Python
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
Zeigen Sie Python 3 im Browser mit MAMP an
Durchsuche das Labyrinth mit dem Python A * -Algorithmus
Lesen Sie die Python # .txt-Datei für Super-Anfänger in Python mit .py
Führen Sie den Python-Interpreter im Skript aus
Rufen Sie den Python-Debugger jederzeit auf
Abrufen und Konvertieren der aktuellen Zeit in der lokalen Systemzeitzone mit Python
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Erstellen Sie mit dem Python-Anforderungsmodul einen Datensatz mit Anhängen in KINTONE
Lesen von Standardeingabe- oder Variablendateien gleichzeitig wie der Befehl Einfügen in Python
[Python] So öffnen Sie zwei oder mehr Dateien gleichzeitig
Verwenden Sie für den Diktatschlüssel in Python etwas anderes als eine <br> Zeichenfolge
Versuchen Sie die Bildverarbeitung mit Python, wenn Sie bei einer Hochzeit um Unterhaltung gebeten werden