[Python scraping] J'ai essayé la recherche Google Top10 en utilisant Beautifulsoup et sélénium

introduction

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.

table des matières

couler

La vue d'ensemble du code

Commentaire

** 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 **

Code source

couler

  1. Lancez google
  2. Saisissez le mot que vous souhaitez rechercher dans la zone de recherche et saisissez
  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

Le code entier

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()

Commentaire

Je vais expliquer le code.

Charger la bibliothèque

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

1. Lancez Google

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.

2. Saisissez le mot que vous souhaitez rechercher dans la zone de recherche et saisissez

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.

3. Obtenir l'URL des résultats de recherche

À 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.

4. Obtenez le titre et la description

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.

5. Exportez les données résumées sous forme de fichier Excel

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 ().

Code source

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

[Python scraping] J'ai essayé la recherche Google Top10 en utilisant Beautifulsoup et sélénium
J'ai essayé le web scraping en utilisant python et sélénium
J'ai essayé de gratter avec Python
Web scraping avec Selenium (Python)
J'ai essayé de gratter avec du python
J'ai essayé d'accéder aux feuilles de calcul Google en utilisant Python
Programmation Python: j'ai essayé d'obtenir (l'exploration) des articles de presse en utilisant Selenium et BeautifulSoup4
J'ai essayé webScraping avec python.
J'ai essayé d'utiliser Thonny (Python / IDE)
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé d'utiliser l'optimisation bayésienne de Python
J'ai essayé d'utiliser la recherche sélective comme R-CNN
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé de gratter la météo Yahoo (édition Python)
J'ai essayé d'utiliser Headless Chrome de Selenium
J'ai essayé de gratter
Scraping à l'aide de Python
J'ai essayé de mettre à jour le calendrier Google avec des rendez-vous CSV à l'aide de Python et de l'API Google
J'ai essayé la détection d'objets en utilisant Python et OpenCV
J'ai essayé d'utiliser l'API Google Cloud Vision
J'ai essayé d'utiliser mecab avec python2.7, ruby2.3, php7
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé d'utiliser Google Translate à partir de Python et c'était trop facile
[Sélénium Python] Titre et URL de la sortie CSV après avoir récupéré les résultats de recherche Google
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé Python> autopep8
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
Rechercher sur Twitter avec Python
Grattage avec du sélénium [Python]
J'ai essayé d'utiliser doctest
J'ai essayé Python> décorateur
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
python sélénium chromedriver beautifulsoup