[Python] Eine Geschichte über das Sammeln von Twitter-Kontonamen aus Handle-Namen (wie @ 123456) durch Kombinieren von BeautifulSoup- und Excel-Eingabe / Ausgabe.

Ich möchte einen Twitter-Kontonamen mit Python kratzen! !!

Da ich über das Obige nachgedacht habe, habe ich so einen kleinen Code geschrieben, also werde ich ihn teilen. (Diesmal wird davon ausgegangen, dass der Name des Handles bekannt ist.)

Vorsichtsmaßnahmen zum Schaben

Was das Schaben betrifft, muss ich grundsätzlich verschiedene Regeln befolgen. Lesen Sie hier

Bitte seien Sie bei der Ausführung sehr vorsichtig, da dies zur Belastung des Servers des anderen Teilnehmers führen kann.

Informationserfassungsfluss

Ordnen Sie die Handle-Namen in der ersten Zeile von Excel an ↓ Informationen aus Excel abrufen ↓ Googeln ↓ Extrahieren Sie Informationen (Kontoname) daraus ↓ Listen Sie die Kontonamen in der dritten Spalte von Excel auf

Ich werde es so machen.

Installieren Sie die erforderlichen Module

4 Module zu verwenden

  1. Anfragen nach URL
  2. Openpyxl für Excel-Dateivorgänge
  3. bs4 aus dem HTML der Site extrahiert
  4. Zeit für die Einführung der Sleep-Funktion, um den Server nicht zu überlasten

Ich habe in meiner lokalen Umgebung unter Dokumente ein Scraype-Verzeichnis erstellt.

Lassen Sie uns 4 sofort mit dem obigen Pip installieren.

pip3 install requests
pip3 install openpyxl
pip3 install BeautifulSoup4
pip3 install time

Und in die gerade erstellte Datei importieren

handle_name-search.py


import requests
import openpyxl
from bs4 import BeautfulSoup as bs
import time

Ordnen Sie die Handle-Namen in der ersten Spalte von Excel an

スクリーンショット 2020-03-18 23.51.40.png

Nehmen Sie die obigen Einstellungen vor, speichern Sie sie als handle.xlsx und speichern Sie sie im Scraype-Ordner.

Informationen zu Spalte A1 erhalten Sie in Excel

Verwenden Sie das openpyxl-Modul, um Dateien in die lokale Umgebung zu laden und Sheet1 zu betreiben

handle_name_search.py


wb = openpyxl.laod_workbook('/Users/{Mein Einheimischer}/Documents/scraype/handle.xlsx')
sheet1=wb['Sheet1']

Damit ist die Einstellung von Sheet1 abgeschlossen. Nehmen wir also alle A1-Spalten.

handle_name_search.py


for i in range(0,sheet1.max_row):
    print(sheet1.cell(row=i+1,column=1).value

In diesem Fall werden alle Informationen in Spalte A1 aus Excel ausgegeben! Dann suchen Sie danach!

Durchsuchen Sie Google nach den extrahierten

handle_name_search.py


req = requests.get("https//www.google.com/search?q=" + sheet1.cell(row = i+1, column=1).value)

Suchen Sie mit Beatiful Soup nach Tags mit Kontonamen

handle_name_search.py


req = req.text
soup = bs(req,"html.parser")
tags = soup.find_all("div",class_="ZINbbc xpd O9g5cc uUPGi")
if(tags[0].find("div",class_="BNeawe vvjwJb AP7Wnd") != None):
    title = tags[0].find("div",class_="BNeawe vvjwJb AP7Wnd").string

Der Inhalt, mit dem ich hier zu kämpfen hatte, ist, dass der Klassenname, der bei der Überprüfung von Chrome angezeigt wird, und die von bs4 erworbene Klasse unterschiedlich sind. Daher ist inoup.prettify () der Titel der Google-Suche in der Klasse von BNeawe vvjwJb AP7 Wnd enthalten Bestätigung.

Entfernen Sie Hindernisse aus den Suchergebnissen

handle_name_search.py


if "(@" in title:
    title = title.split('(@')[0]
else:
    if "- Twitter" in title:
        title = title.split('-')[0]
    if "✓" in title:
        title = title.split('✓')[0]

Zum Schluss in Excel ausgeben und speichern

handle_name_searchpy


sheet1.cell(row=i+1,column=3).value = title
wb.save('/Users/{Ihr lokaler Name}/Documents/scraype/handle.xlsx')

Ich werde es unter das ganze Bild setzen

handle_name_search.py


import requests
import openpyxl
from bs4 import BeautifulSoup as bs
import time


##Lokales Handle.Greifen Sie auf xlsx zu (geben Sie den Handle-Namen in die erste Spalte ein).)
wb = openpyxl.load_workbook('/Users/{Ihr lokaler Name}/Documents/scraype/handle.xlsx')
sheet1=wb['Sheet1']

##Holen Sie sich das Handle der ersten Excel-Spalte und geben Sie es in der dritten Spalte aus
for i in range(0,sheet1.max_row):
    time.sleep(1)
    print(sheet1.cell(row=i+1,column=1).value)    
    req = requests.get("https://www.google.com/search?q=" + sheet1.cell(row=i+1,column=1).value)
    req = req.text
    soup = bs(req,"html.parser")
    tags = soup.find_all("div", class_="ZINbbc xpd O9g5cc uUPGi")
    if(tags[0].find("div",class_="BNeawe vvjwJb AP7Wnd") != None):
        title = tags[0].find("div", class_="BNeawe vvjwJb AP7Wnd").string 
        if "(@" in title:
            title = title.split('(@')[0]
        else:
            if "- Twitter" in title:
                title = title.split('-')[0]
            if "✓" in title:
                title = title.split('✓')[0]
        print(title)
        sheet1.cell(row=i+1,column=3).value= title
        wb.save('/Users/{Ihr lokaler Name}/Documents/scraype/handle.xlsx')
wb.save('/Users/{Ihr lokaler Name}/Documents/scraype/handle.xlsx')    

Danach kompilieren und überprüfen Sie es bitte. Wird der Kontoname in der dritten Spalte ausgegeben? ??

Wir haben eine Sleep-Funktion in der Mitte eingeführt, um einen Serverangriff zu verhindern. Beachten Sie jedoch unbedingt die Regeln, wenn Sie Scraping ausführen.

Das kratzte.

Recommended Posts

[Python] Eine Geschichte über das Sammeln von Twitter-Kontonamen aus Handle-Namen (wie @ 123456) durch Kombinieren von BeautifulSoup- und Excel-Eingabe / Ausgabe.
Eine Geschichte über Python Pop und Append
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
Python-Eingabe und Ausgabe
Scrapen der gewünschten Daten von der Website durch Verknüpfen von Python und Excel
Sammeln von Informationen von Twitter mit Python (Integration von MySQL und Python)
Eine Geschichte über die Vorhersage von Präfekturen aus Städtenamen mit Jubatus
Eine Geschichte über alles von der Datenerfassung über die KI-Entwicklung bis hin zur Veröffentlichung von Webanwendungen in Python (3. KI-Entwicklung)
Eine Geschichte von einer Person, die Django aus der interaktiven Python-Shell importieren und Dinge in der DB speichern wollte