[Python] Untersuchen Sie die Eigenschaften der Titel der Top-Websites in den Google-Suchergebnissen

Was du machen willst

Ich möchte die Merkmale der Titel der Top-10-Websites kennen, die von Google mit einem bestimmten Keyword durchsucht wurden.

Bibliothek

Annahme

Dieses Mal werde ich mit Jupyter Notebook schreiben, also muss es installiert sein.

Implementierung

Ich werde den eigentlichen Code schreiben, aber da ich wenig Erfahrung damit habe, schreibe ich ihn möglicherweise ineffizient. Bitte beachten Sie.

Bibliothek importieren

Dieses Mal werden wir nur diese Bibliothek verwenden, also importieren Sie sie am Anfang.

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
from math import log
from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.tokenfilter import POSStopFilter
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np

Holen Sie sich den Titel des Suchergebnisses

Verwenden Sie BeautifulSoup, um die Google-Suchergebnisse zu durchsuchen.

#Header anfordern
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"}
list_keywd = ['Schlüsselwort 1','Schlüsselwort 2']
input_num = 10
url = 'https://www.google.co.jp/search?num={}&q='.format(input_num) + ' '.join(list_keywd)

#Verbinden
response = requests.get(url, headers=headers)

#Überprüfen Sie den HTTP-Statuscode (Ausnahmebehandlung außer 200).
response.raise_for_status()

#Analysieren Sie den abgerufenen HTML-Code
soup = bs(response.content, 'html.parser')

#Holen Sie sich Titel und Links zu Suchergebnissen
ret_link = soup.select('.r > a')
#Um das Entfernen von Brotresten zu vermeiden
ret_link2 = soup.select('.r > a > h3')

title_list = []
url_list = []
leng = len(ret_link)
r_list = []
cols = ['title','url']

for i in range(len(ret_link)):
    #Holen Sie sich den Textteil des Titels
    title_txt = ret_link2[i].get_text()

    #Holen Sie sich nur den Link und entfernen Sie das zusätzliche Teil
    url_txt = ret_link[i].get('href').replace('/url?q=','')

    title_list.append(title_txt)
    url_list.append(url_txt)
 
    tmp = []
    tmp = [title_txt,url_txt]
    r_list.append(tmp)

#Suchergebnisse anzeigen
df = pd.DataFrame(r_list,columns=cols)
df

Die Top 10 Websites in den Google-Suchergebnissen für ein bestimmtes Keyword waren wie folgt.

01.png

Morphologische Analyse der titelgetrennten Schrift

Nachdem wir die Titel der Top 10 Sites erhalten haben, werden wir alles von der morphologischen Analyse bis zur Teilung durchführen. Janome wurde für die morphologische Analyse verwendet.

#Registrieren Sie die Nomenklatur jedes Blogs separat
work = []
WAKATI = []
for i in BLOG.keys():
    texts_flat = "".join(BLOG[i]["title"])
    tokens = a.analyze(texts_flat)
    work.append(' '.join([t.surface for t in tokens]))
    WAKATI.append(work[i].lower().split())
#Bestätigung
for i in BLOG.keys():
    print("■WAKATI[{}]: {}".format(i,WAKATI[i]))

#scikit-Berechnen Sie die Häufigkeit des Auftretens von Wörtern mit learn
vectorizer = CountVectorizer()

#Bogenberechnung
X = vectorizer.fit_transform([work[i] for i in range(len(work))])
WORDS = vectorizer.get_feature_names()
WORDS.sort()
print('=========================================')
print('Alle Worte')
print('=========================================')
print(WORDS)

Es wurde auf diese Weise analysiert. 02.png

Funktionsdefinition

Dieses Mal habe ich eine Funktion geschrieben, um den tf-Wert, den idf-Wert und den tf-idf-Wert zu finden.

#Funktionsdefinition
def tf(t, d):
  return d.count(t)/len(d)

def idf(t):
  df = 0
  for wak in WAKATI:
    df += t in wak
  
  #return log(N/df) + 1
  return log(N/np.array(df)) + 1

def tfidf(t,d):
  return tf(t,d) * idf(t)

def highlight_negative(val):
    if val > 0:
        return 'color: {0}; font-weight: bold'.format('red')
    else:
        return 'color: {0}'.format('black')
#Ende der Funktionsdefinition

Schauen wir uns den tf-Wert an

Schauen wir uns zunächst den tf-Wert an.

#tf Berechnung
print('■ TF-Wert für jeden Standort')
print('Häufigkeit des Auftretens in einem Dokument')
ret = []
for i in range(N):
    ret.append([])
    d = WAKATI[i]
    for j in range(len(WORDS)):
        t = WORDS[j]
        if len(d) > 0:
            ret[-1].append(tf(t,d))

tf_ = pd.DataFrame(ret, columns=WORDS)
tf_.style.applymap(highlight_negative)

Wie in der folgenden Abbildung gezeigt, wurde der tf-Wert erfasst. Die verwendeten Teilwörter sind rot geschrieben. "Maske" und "cool" werden in vielen Titeln verwendet. Möglicherweise können Sie das Suchwort nur anhand des tf-Werts finden.

03.png

Schauen wir uns den idf-Wert an

Je höher der IDF-Wert ist, desto unwahrscheinlicher ist es, dass er in anderen Titeln erscheint, was ihn zu einem seltenen Wort macht. Umgekehrt wird der Wert umso häufiger verwendet, je kleiner er ist.

#IDF-Berechnung
ret = []
for i in range(len(WORDS)):
  t = WORDS[i]
  ret.append(idf(t))

idf_ = pd.DataFrame(ret, index=WORDS, columns=["IDF"])
idf_s = idf_.sort_values('IDF')
idf_s.style.applymap(highlight_negative)

04.png Was den tf-Wert betrifft, so ist der häufig auftretende idf-Wert von "mask" und "cool" natürlich klein. In diesem Ergebnis wird der Wert 2.609438 an zwei Stellen und der Wert 3.302585 nur an einer Stelle angezeigt.

Schauen wir uns den tf-idf-Wert an

Je höher der tf-idf-Wert ist, desto wichtiger ist das Wort im Titel.

ret = []
for i in range(N):
  ret.append([])
  d = WAKATI[i]
  for j in range(len(WORDS)):
    t = WORDS[j]
    if len(d) > 0:
        ret[-1].append(tfidf(t,d))

tfidf_ = pd.DataFrame(ret,columns=WORDS)
tfidf_.style.applymap(highlight_negative)

Das Ergebnis sieht so aus. Die Zeile ist die Site und die Spalte enthält alle Wörter. Der Wert von Wörtern, die nicht auf der Site erscheinen, ist "0". Wenn man sich jede Site ansieht, kann man sagen, dass ein Wort mit einem großen Wert eine große Rolle im Site-Titel spielt. 05.png

Zusammenfassung

Sie können die Funktionen wie folgt überprüfen. Dies kann hilfreich sein, wenn Sie ein Wort zum Einfügen finden, z. B. den Titel der Website.

Recommended Posts

[Python] Untersuchen Sie die Eigenschaften der Titel der Top-Websites in den Google-Suchergebnissen
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Auf der Suche nach dem schnellsten FizzBuzz in Python
Scraping von Google News-Suchergebnissen in Python (2) Verwenden Sie Beautiful Soup
Überprüfen Sie das Verhalten des Zerstörers in Python
Das Ergebnis der Installation von Python auf Anaconda
Grundlagen zum Ausführen von NoxPlayer in Python
Der API-Client für die Sitemap in der Google-Suchkonsole befindet sich in Webmastern anstelle der Suchkonsole
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Geben Sie die Anzahl der CPU-Kerne in Python aus
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Unbeaufsichtigter Betrieb von Google Spreadsheets (usw.) in Python
Holen Sie sich den Aufrufer einer Funktion in Python
Passen Sie die Verteilung jeder Gruppe in Python an
Zeigen Sie das Ergebnis der Geometrieverarbeitung in Python an
Kopieren Sie die Liste in Python
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Die Geschichte des Lesens von HSPICE-Daten in Python
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Lösen von Bewegungsgleichungen in Python (odeint)
Ausgabe in Form eines Python-Arrays
Suchen Sie nach dem Wert der Instanz in der Liste
[Python-Selen] CSV-Ausgabe Titel und URL nach dem Scraping der Google-Suchergebnisse
Holen Sie sich die Tag-Suchergebnisse von Nico Nico-Videos im XML-Format. (Kein Login erforderlich)
Eine Geschichte über einen Python-Anfänger, der versucht, Google-Suchergebnisse mithilfe der API abzurufen
Erleben Sie die gute Berechnungseffizienz der Vektorisierung in Python
So ermitteln Sie die Anzahl der Stellen in Python
Auf der Suche nach dem besten zufälligen Punktstereogramm (RDS).
Holen Sie sich das Bild von "Suzu Hirose" von Google Bildersuche.
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
[Python] Ruft die Liste der im Modul definierten Klassen ab
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Implementieren Sie die Lösung der Riccati-Algebra in Python
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Den Inhalt der Daten in Python nicht kennen
Unterschied in den Ergebnissen abhängig vom Argument von multiprocess.Process
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 4 von Hajipata in Python
Verwenden wir die offenen Daten von "Mamebus" in Python
Implementierte den Algorithmus von "Algorithm Picture Book" in Python3 (Heap Sort Edition)
[Python] Gibt alle Kombinationen von Elementen in der Liste aus
Verwenden Sie die Such-API der National Parliament Library in Python
Rufen Sie die URL des HTTP-Umleitungsziels in Python ab
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Reproduzieren Sie das Ausführungsbeispiel von Kapitel 5 von Hajipata in Python
Um das Äquivalent von Rubys ObjectSpace._id2ref in Python zu tun
Überprüfen Sie die atrophische Natur der Wahrscheinlichkeitsverteilung in Python
Dichotomie mit Python
der Zen von Python
Lineare Suche in Python
Binäre Suche in Python
Python-Skript, das von der Google-Suche zum sofortigen Speichern der Suchergebnisseite führt
Ich habe das in Google Cloud Dataflow vorinstallierte Python-Paket überprüft
Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Visualisieren Sie die Ergebnisse von Entscheidungsbäumen, die mit Python scikit-learn erstellt wurden
Lassen Sie uns das Ausführungsergebnis des Programms mit C ++, Java, Python messen.
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
[Memo] Das Geheimnis kumulativer Zuweisungsanweisungen in Python-Funktionen