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.
** 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 **
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()
Ich werde den Code erklären.
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
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".
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.
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.
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.
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 ()".
Der Quellcode kann vom folgenden Github bezogen werden. Bitte benutzen Sie es zum Schreiben. https://github.com/marumaru1019/python_scraping/tree/master
Recommended Posts