Lorsque je travaillais sur l'écriture de référencement auparavant, je travaillais sur la collecte manuelle des 10 principales URL et titres des mots de recherche. À ce moment-là, j'ai pu économiser beaucoup de travail en utilisant le grattage, je vais donc vous décrire comment le faire.
Pour ceux qui veulent écrire leur propre blog et gagner de l'argent, quel type de titre le rendra plus facile d'accès, et comme il sera possible de passer à l'URL plutôt que d'exceller, le travail d'écriture peut être considérablement réduit.
** 1. Lancez google **
** 2. Entrez le mot que vous souhaitez rechercher dans le champ de recherche et entrez **
** 3. Obtenir l'URL des résultats de recherche **
** 4. Accédez à chaque URL et obtenez les attributs de titre et de description **
** 5. Exportez les données résumées sous forme de fichier Excel **
import time #Requis pour utiliser le sommeil
from selenium import webdriver #Utiliser automatiquement le navigateur Web (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
#Changez ici si vous le souhaitez
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("S'il vous plaît entrer un mot de recherche:")
self.search_num = int(input("Combien de cas recevez-vous:"))#Combien d'acquisitions
self.options = Options()
#self.options.add_argument('--headless') ##Arrêter de lancer le navigateur
#self.options.add_argument('--no-sandbox') ##Les restrictions d'accès disparaissent, mais c'est dangereux car tout programme sera téléchargé
self.options.add_argument('--disable-dev-shm-usage')#Parce que chrome ne clignote pas car il peut utiliser la mémoire pleine
def search(self):
driver = webdriver.Chrome(options=self.options) #les mac people commentent cette ligne
driver.get(self.url)
search = driver.find_element_by_name('q') #Champ de recherche en HTML(name='q')Spécifier
search.send_keys(self.search_word) #Envoyer le mot de recherche
search.submit() #Effectuer une recherche
time.sleep(1)
#Créer une boîte de rangement
title_list = [] #Titre du magasin
url_list = [] #URL du magasin
description_list = [] #meta-Description du magasin
##acquisition html
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, "html.parser")
#Obtenez les titres et les liens des résultats de recherche
link_elem01 = soup.select('.yuRUbf > a')
#Obtenez uniquement le lien et supprimez la partie supplémentaire
if self.search_num<=len(link_elem01): #Si le nombre d'urls est inférieur au nombre de recherches, analysez uniquement le nombre d'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)
#À ce stade, la création de l'URL est terminée
#url_Obtenez les titres les uns après les autres de la liste
for i in range(len(url_list)):
driver.get(url_list[i])
##acquisition html
html2 = driver.page_source.encode('utf-8')
##Perth pour une belle soupe
soup2 = BeautifulSoup(html2, "html.parser")
#Obtenir le titre
title_list.append(driver.title)
#Obtenir la description
try:
description = driver.find_element_by_xpath(("//meta[@name='description']")).get_attribute("content")
description_list.append(description)
except:
description_list.append("")
#Renvoyez le navigateur une fois
driver.back()
time.sleep(0.3)
#Pouvez-vous l'enregistrer une fois ici?
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()
Je vais expliquer le code.
import time #Requis pour utiliser le sommeil
from selenium import webdriver #Utiliser automatiquement le navigateur Web (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
#Changez ici si vous le souhaitez
from selenium.webdriver.chrome.options import Options
L'explication de la bibliothèque essentielle est la suivante.
time: bibliothèque de contrôle du temps sélénium: bibliothèque qui contrôle le navigateur beautifulsoup: bibliothèque de grattage chromedriver_binary: Rendre le navigateur de sélénium google chrome
Les points suivants permettent de lancer le navigateur sur google.
driver = webdriver.Chrome(options=self.options) #les mac people commentent cette ligne
driver.get(self.url)
driver = webdriver.Chrome(options=self.options)
Est une déclaration pour lancer le sélénium.
driver.get (" url que vous voulez rechercher ")
Vous pouvez accéder à l'URL que vous souhaitez rechercher dans Chrome avec.
Cette fois, il s'agit de self.url = navigateur google
.
Le code pour rechercher à partir du formulaire de recherche Google en utilisant le sélénium est le suivant.
search = driver.find_element_by_name('q') #Champ de recherche en HTML(name='q')Spécifier
search.send_keys(self.search_word) #Envoyer le mot de recherche
search.submit() #Effectuer une recherche
time.sleep(1) #Arrêtez-vous pendant 1 seconde
Vous pouvez extraire l'élément avec l'attribut name avec driver.find_element_by_name ()
.
Après find_element_by_, vous pouvez également spécifier la classe, l'id, etc.
Vous pouvez entrer le mot que vous voulez mettre dans l'élément spécifié par driver.fine ... avec .send_keys (" mot que vous voulez mettre ")
.
submit ()
agit comme enter.
Vous pouvez arrêter l'exécution pendant le nombre de secondes spécifié avec time.sleep (nombre de secondes)
. En l'utilisant lors du chargement du navigateur, vous pouvez attendre que l'écran s'affiche, et les erreurs de décalage dues à la communication sont moins susceptibles de se produire.
À l'étape 2, l'écran change réellement et les résultats de la recherche s'affichent.
Le code pour obtenir l'URL à partir des résultats de la recherche est le suivant.
#Créer une boîte de rangement
title_list = [] #Titre du magasin
url_list = [] #URL du magasin
description_list = [] #meta-Description du magasin
##acquisition html
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, "html.parser")
#Obtenez les titres et les liens des résultats de recherche
link_elem01 = soup.select('.yuRUbf > a')
#Obtenez uniquement le lien et supprimez la partie supplémentaire
if self.search_num<=len(link_elem01): #Si le nombre d'urls est inférieur au nombre de recherches, analysez uniquement le nombre d'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)
Les parties les plus importantes de ce code sont:
##acquisition html
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, "html.parser")
#Obtenez les titres et les liens des résultats de recherche
link_elem01 = soup.select('.yuRUbf > a')
driver.page_source.encode ('utf-8')
définit de force le code de caractère sur utf-8.
Rappelez-vous que BeautifulSoup (html," html.parser ")
est une déclaration, donc c'est comme un sort.
Vous pouvez extraire l'élément spécifié du sélecteur css avec soup.select ()
.
Le code après cela dit link_elem01 [i] .get ('href')
, mais il lit l'attribut href des données obtenues par soup.select.
Le code pour obtenir le titre et la description est ci-dessous.
for i in range(len(url_list)):
driver.get(url_list[i])
##acquisition html
html2 = driver.page_source.encode('utf-8')
##Perth pour une belle soupe
soup2 = BeautifulSoup(html2, "html.parser")
#Obtenir le titre
title_list.append(driver.title)
#Obtenir la description
try:
description = driver.find_element_by_xpath(("//meta[@name='description']")).get_attribute("content")
description_list.append(description)
except:
description_list.append("")
#Renvoyez le navigateur une fois
driver.back()
time.sleep(0.3)
Nous chercherons avec du sélénium sur la base de la liste d'urls obtenue en 3.
Le code est complété par la connaissance de la belle soupe et du sélénium qui ont été libérés jusqu'à présent.
driver.back ()
est une commande pour sauvegarder le navigateur.
J'ai créé une liste avec URL, titre, description jusqu'à 4. Enfin, nous utiliserons des pandas pour formater les données et les écrire dans le fichier Excel. Le code correspondant est ci-dessous.
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")
Aucune explication particulière n'est nécessaire pour le fonctionnement des pandas.
Enfin, fermez le navigateur avec driver.quit ()
.
Le code source peut être obtenu à partir du github suivant. Veuillez l'utiliser pour écrire. https://github.com/marumaru1019/python_scraping/tree/master
Recommended Posts