[Python Scraping] Ich habe versucht, Google Search Top10 mit Beautifulsoup & Selenium

Einführung

Als ich zuvor am SEO-Schreiben gearbeitet habe, habe ich daran gearbeitet, die Top-10-URLs und Titel von Suchwörtern manuell zu sammeln. Zu dieser Zeit konnte ich durch Scraping viel Arbeit sparen, daher werde ich beschreiben, wie es geht.

Für diejenigen, die ihren eigenen Blog schreiben und Geld verdienen möchten, wird die Art des Titels den Zugriff erleichtern. Da es möglich ist, eher zu URL als zu Excel zu springen, kann die Schreibarbeit erheblich reduziert werden.

Inhaltsverzeichnis

fließen

Das ganze Bild des Codes

Kommentar

** 1. Starten Sie Google **

** 2. Geben Sie das zu suchende Wort aus dem Suchfeld ein und geben Sie ** ein

** 3. URL aus Suchergebnissen abrufen **

** 4. Greifen Sie auf jede URL zu und erhalten Sie die Titel- und Beschreibungsattribute **

** 5. Exportieren Sie die zusammengefassten Daten als Excel-Datei **

Quellcode

fließen

  1. Starten Sie Google
  2. Geben Sie das zu suchende Wort aus dem Suchfeld ein und geben Sie es ein
  3. URL aus den Suchergebnissen abrufen
  4. Greifen Sie auf jede URL zu und erhalten Sie die Titel- und Beschreibungsattribute
  5. Exportieren Sie die zusammengefassten Daten als Excel-Datei

Der ganze Code

import time                                 #Erforderlich, um Schlaf zu verwenden
from selenium import webdriver              #Betreiben Sie automatisch den Webbrowser (Python-m pip install selenium)
from selenium.webdriver.common.keys import Keys
import chromedriver_binary
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np                               
#Ändern Sie hier, wenn Sie möchten
from selenium.webdriver.chrome.options import Options

class Chrome_search:
    def __init__(self):
        self.url = "https://www.google.co.jp/search"
        self.search_word = input("Bitte geben Sie ein Suchwort ein:")
        self.search_num = int(input("Wie viele Fälle bekommen Sie:"))#Wie viele Akquisitionen
        
        self.options = Options()
        #self.options.add_argument('--headless') ##Stoppen Sie den Browser-Start
        #self.options.add_argument('--no-sandbox')  ##Zugriffsbeschränkungen verschwinden, sind jedoch gefährlich, da jedes Programm heruntergeladen wird
        self.options.add_argument('--disable-dev-shm-usage')#Weil Chrome nicht zurückblitzt, weil es den vollen Speicher nutzen kann
        
    def search(self):
        driver = webdriver.Chrome(options=self.options) #Mac-Leute kommentieren diese Zeile aus
        driver.get(self.url)
        search = driver.find_element_by_name('q')  #Suchfeld in HTML(name='q')Konkretisieren
        search.send_keys(self.search_word)        #Suchwort senden
        search.submit()                         #Führen Sie eine Suche durch
        time.sleep(1)    
        #Erstellen Sie eine Aufbewahrungsbox
        title_list = []     #Titel speichern
        url_list = []     #URL speichern
        description_list = []   #meta-Geschäftsbeschreibung
        ##HTML-Erfassung
        html = driver.page_source.encode('utf-8') 
        soup = BeautifulSoup(html, "html.parser")        
        #Holen Sie sich Titel und Links zu Suchergebnissen
        link_elem01 = soup.select('.yuRUbf > a')
        #Holen Sie sich nur den Link und entfernen Sie das zusätzliche Teil
        if self.search_num<=len(link_elem01):       #Wenn die Anzahl der URLs geringer ist als die Anzahl der Suchvorgänge, analysieren Sie nur die Anzahl der URLs
            for i in range(self.search_num):
                url_text = link_elem01[i].get('href').replace('/url?q=', '')
                url_list.append(url_text)  
        elif self.search_num > len(link_elem01):
            for i in range(len(link_elem01)):
                url_text = link_elem01[i].get('href').replace('/url?q=','')
                url_list.append(url_text)
        
        time.sleep(1)
        
        #Zu diesem Zeitpunkt ist die URL-Erstellung abgeschlossen
        #url_Holen Sie sich Titel nacheinander aus der Liste
        for i in range(len(url_list)):
            driver.get(url_list[i])
            ##HTML-Erfassung
            html2 = driver.page_source.encode('utf-8') 
            ##Perth für schöne Suppe
            soup2 = BeautifulSoup(html2, "html.parser")
            #Titel holen
            title_list.append(driver.title)
            #Beschreibung abrufen
            try:
                description = driver.find_element_by_xpath(("//meta[@name='description']")).get_attribute("content")
                description_list.append(description)
            except:
                description_list.append("")
            #Geben Sie den Browser einmal zurück
            driver.back()
            time.sleep(0.3)
        #Kannst du es hier einmal speichern?
        print(url_list)
        print(title_list)
        print(description_list)

        search_ranking = np.arange(1,len(url_list)+1)
        
        my_list = {"url": url_list,"ranking":search_ranking, "title": title_list,"description":description_list}
        my_file = pd.DataFrame(my_list)
        driver.quit()
        my_file.to_excel(self.search_word+".xlsx",self.search_word,startcol=2,startrow=1)
        df = pd.read_excel(self.search_word+".xlsx")
        return df
    
    
if __name__ == '__main__':
    se = Chrome_search()
    df=se.search()
    df.head()

Kommentar

Ich werde den Code erklären.

Bibliothek laden

import time                                 #Erforderlich, um Schlaf zu verwenden
from selenium import webdriver              #Betreiben Sie automatisch den Webbrowser (Python-m pip install selenium)
from selenium.webdriver.common.keys import Keys
import chromedriver_binary
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np  
#Ändern Sie hier, wenn Sie möchten
from selenium.webdriver.chrome.options import Options

Die Erklärung der wesentlichen Bibliothek lautet wie folgt.

Zeit: Zeitsteuerungsbibliothek Selen: Bibliothek, die den Browser steuert beautifulsoup: Schrottbibliothek chromedriver_binary: Machen Sie den Browser von Selen zu Google Chrome

1. Starten Sie Google

Die folgenden Punkte werden verwendet, um den Browser auf Google zu starten.

driver = webdriver.Chrome(options=self.options) #Mac-Leute kommentieren diese Zeile aus
driver.get(self.url)

driver = webdriver.Chrome(options=self.options) Ist eine Erklärung zum Start von Selen.

driver.get (" URL, nach der Sie suchen möchten ") Sie können auf die URL zugreifen, nach der Sie in Chrome suchen möchten.

Diesmal ist es "self.url = google browser".

2. Geben Sie das zu suchende Wort aus dem Suchfeld ein und geben Sie es ein

Der Code für die Suche über das Google-Suchformular mit Selen lautet wie folgt.

search = driver.find_element_by_name('q')  #Suchfeld in HTML(name='q')Konkretisieren
search.send_keys(self.search_word)        #Suchwort senden
search.submit()                         #Führen Sie eine Suche durch
time.sleep(1)                          #1 Sekunde anhalten

Sie können das Element mit dem Namensattribut mit "driver.find_element_by_name ()" extrahieren. Nach find_element_by_ können Sie auch Klasse, ID usw. angeben. Sie können das Wort, das Sie in das von driver.fine ... angegebene Element einfügen möchten, mit .send_keys (" Wort, das Sie einfügen möchten ") eingeben. submit () fungiert als enter. Sie können die Ausführung für die angegebene Anzahl von Sekunden mit "time.sleep (Anzahl von Sekunden)" stoppen. Wenn Sie es beim Laden des Browsers verwenden, können Sie warten, bis der Bildschirm angezeigt wird, und Verzögerungsfehler aufgrund von Kommunikation sind weniger wahrscheinlich.

3. URL aus den Suchergebnissen abrufen

In Schritt 2 ändert sich der Bildschirm tatsächlich und die Suchergebnisse werden angezeigt.

Der Code zum Abrufen der URL aus den Suchergebnissen lautet wie folgt.

#Erstellen Sie eine Aufbewahrungsbox
title_list = []     #Titel speichern
url_list = []     #URL speichern
description_list = []   #meta-Geschäftsbeschreibung
##HTML-Erfassung
html = driver.page_source.encode('utf-8') 
soup = BeautifulSoup(html, "html.parser")        
#Holen Sie sich Titel und Links zu Suchergebnissen
link_elem01 = soup.select('.yuRUbf > a')
#Holen Sie sich nur den Link und entfernen Sie das zusätzliche Teil
if self.search_num<=len(link_elem01):       #Wenn die Anzahl der URLs geringer ist als die Anzahl der Suchvorgänge, analysieren Sie nur die Anzahl der URLs
    for i in range(self.search_num):
        url_text = link_elem01[i].get('href').replace('/url?q=', '')
        url_list.append(url_text)  
elif self.search_num > len(link_elem01):
    for i in range(len(link_elem01)):
        url_text = link_elem01[i].get('href').replace('/url?q=','')
        url_list.append(url_text)

time.sleep(1)

Die wichtigsten Teile dieses Codes sind:

##HTML-Erfassung
html = driver.page_source.encode('utf-8') 
soup = BeautifulSoup(html, "html.parser")        
#Holen Sie sich Titel und Links zu Suchergebnissen
link_elem01 = soup.select('.yuRUbf > a')

driver.page_source.encode ('utf-8') setzt den Zeichencode zwangsweise auf utf-8. Denken Sie daran, dass BeautifulSoup (html," html.parser ") eine Deklaration ist, also wie ein Zauber. Sie können das angegebene Element mit oup.select () aus dem CSS-Selektor extrahieren. Der Code danach lautet "link_elem01 [i] .get (" href ")", liest jedoch das href-Attribut der vonoup.select erhaltenen Daten.

4. Titel und Beschreibung abrufen

Der Code, um den Titel und die Beschreibung zu erhalten, ist unten.

for i in range(len(url_list)):
    driver.get(url_list[i])
    ##HTML-Erfassung
    html2 = driver.page_source.encode('utf-8') 
    ##Perth für schöne Suppe
    soup2 = BeautifulSoup(html2, "html.parser")
    #Titel holen
    title_list.append(driver.title)
    #Beschreibung abrufen
    try:
        description = driver.find_element_by_xpath(("//meta[@name='description']")).get_attribute("content")
        description_list.append(description)
    except:
        description_list.append("")
    #Geben Sie den Browser einmal zurück
    driver.back()
    time.sleep(0.3)

Wir werden mit Selen basierend auf der Liste der in 3 erhaltenen URLs suchen. Der Code wird mit dem Wissen über schöne Suppe und Selen vervollständigt, die bisher veröffentlicht wurden. driver.back () ist ein Befehl zum Sichern des Browsers.

5. Exportieren Sie die zusammengefassten Daten als Excel-Datei

Ich habe eine Liste mit URL, Titel, Beschreibung bis zu 4 erstellt. Schließlich werden wir Pandas verwenden, um die Daten zu formatieren und in die Excel-Datei zu schreiben. Der entsprechende Code ist unten.

my_list = {"url": url_list,"ranking":search_ranking, "title": title_list,"description":description_list}
my_file = pd.DataFrame(my_list)
driver.quit()
my_file.to_excel(self.search_word+".xlsx",self.search_word,startcol=2,startrow=1)
df = pd.read_excel(self.search_word+".xlsx")

Für den Betrieb von Pandas ist keine besondere Erklärung erforderlich. Schließen Sie zum Schluss den Browser mit "driver.quit ()".

Quellcode

Der Quellcode kann vom folgenden Github bezogen werden. Bitte benutzen Sie es zum Schreiben. https://github.com/marumaru1019/python_scraping/tree/master

Recommended Posts

[Python Scraping] Ich habe versucht, Google Search Top10 mit Beautifulsoup & Selenium
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, mit Python zu kratzen
Web Scraping mit Selenium (Python)
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, mit Python auf Google Spread Sheets zuzugreifen
Python-Programmierung: Ich habe versucht, Nachrichtenartikel mit Selenium und BeautifulSoup4 abzurufen (zu crawlen)
Ich habe versucht, WebScraping mit Python.
Ich habe versucht, Thonny (Python / IDE) zu verwenden.
[Anfänger] Leicht verständliches Python-Web-Scraping mit Google Colaboratory
Ich habe versucht, Selen mit Headless-Chrom zu verwenden
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Ich habe versucht, die selektive Suche als R-CNN zu verwenden
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Ich habe versucht, Yahoo Wetter zu kratzen (Python Edition)
Ich habe versucht, Headless Chrome von Selenium zu verwenden
Ich habe versucht zu kratzen
Scraping mit Python
Ich habe versucht, den Google-Kalender mit CSV-Terminen mithilfe von Python und Google API zu aktualisieren
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe versucht, Mecab mit Python2.7, Ruby2.3, PHP7 zu verwenden
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe versucht, Google Translate aus Python zu verwenden, und es war einfach zu einfach
[Python-Selen] CSV-Ausgabe Titel und URL nach dem Scraping der Google-Suchergebnisse
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe Python> autopep8 ausprobiert
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Suchen Sie Twitter mit Python
Schaben mit Selen [Python]
Ich habe versucht, doctest zu verwenden
Ich habe Python> Decorator ausprobiert
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Python Selen Chromedriver schöne Suppe