[PYTHON] Cheet sheet lors du scraping avec Google Colaboratory (Colab)

table des matières

Comment utiliser Beautiful Soup

Comment éliminer les caractères déformés

Lorsque vous utilisez requests, vous l'écrivez normalement comme suit

from bs4 import BeautifulSoup
import requests

res = requests.get(url)
soup = BeautifulSoup(res.content, 'html.parser')

Puisqu'il y a des sites qui sont brouillés avec cela, les caractères brouillés peuvent être considérablement éliminés en procédant comme suit.

from bs4 import BeautifulSoup
import requests

res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml", from_encoding='utf-8')

trouver la liste de codes

La description Exemple de code
1 recherche soup.find('li')
Rechercher tous les tags soup.find_all('li')
Recherche d'attributs soup.find('li', href='html://www.google.com/')
Obtenez plusieurs éléments soup.find_all(['a','p'])
recherche d'identifiant soup.find('a', id="first")
recherche de classe soup.find('a', class_="first")
Acquisition d'attributs first_link_element['href']
Recherche de texte soup.find('dt' ,text='Rechercher un mot')
Rechercher des correspondances de texte partielles soup.find('dt' ,text=re.compile('Rechercher un mot'))
Obtenir l'élément parent .parent
Obtenez 1 des éléments suivants .next_sibling
Obtenez tous les éléments suivants .next_siblings
Obtenir 1 élément précédent .previous_sibling
Obtenez tous les éléments précédents .previous_siblings
Obtenir des éléments de texte .string

liste de codes de sélection

La description Exemple de code
1 recherche soup.select_one('sélecteur css')
Rechercher tout soup.select('sélecteur css')

Liste des méthodes de spécification des sélecteurs

La description Exemple de code
recherche d'identifiant soup.select('a#id')
recherche de classe soup.select('a.class')
Recherche multiple de classe soup.select('a.class1.class2')
Recherche d'attribut 1 soup.select('a[class="class"]')
Recherche d'attribut 2 soup.select('a[href="http://www.google.com"]')
Recherche d'attribut 3 soup.select('a[href]')
Obtenir des éléments enfants soup.select('.class > a[href]')
Obtenir des éléments descendants soup.select('.class a[href]')

Modifiez l'élément d'attribut en fonction de l'élément que vous souhaitez rechercher. ʻId, class, href, name, summary, etc. Insérez >si vous voulez obtenir seulement des éléments enfants (un niveau plus bas), et mettezespace` si vous voulez obtenir des éléments descendants (tous d'un niveau inférieur).

Comment utiliser Selenium

Préparations pour l'utilisation du sélénium

Lors de l'utilisation avec Colab, Selenium ne peut pas être téléchargé et les spécifications de l'interface utilisateur ne peuvent pas être spécifiées. Ce paramètre est obligatoire.

#Téléchargez les bibliothèques nécessaires pour utiliser Selenium
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium

from selenium import webdriver

#Paramètres d'utilisation du pilote sans interface utilisateur
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=options)
driver.implicitly_wait(10)

Lorsque vous utilisez du sélénium et une belle soupe

En tant que cas d'utilisation, lorsque l'élément ne peut pas être acquis par Beautiful Soup Si vous souhaitez charger la page avec seleniumu, puis extraire les informations nécessaires avec Beautiful Soup.

driver.get(url)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, 'html.parser')

Code de base du sélénium

La description Exemple de code
Ouvrir le lien driver.get('URL')
Reculer d'une étape driver.back()
Faites un pas en avant driver.forward()
Mettre à jour le navigateur driver.refresh()
Obtenez l'URL actuelle driver.current_url
Obtenir le titre actuel driver.title
Fermer la fenêtre actuelle driver.close()
Fermez toutes les fenêtres driver.quit()
Obtenez des éléments en classe driver.find_element_by_class_name('classname')
Obtenir l'élément par ID driver.find_element_by_id('id')
Obtenez des éléments avec XPATH driver.find_element_by_xpath('xpath')
Recherche de texte sur XPATH driver.find_element_by_xpath('//*[text()="strings"]')
Recherche de correspondance partielle de texte avec XPATH driver.find_element_by_xpath('//*[contains(text(), "strings")]')
Cliquez sur un élément driver.find_element_by_xpath('XPATH').click()
Saisie de texte driver.find_element_by_id('ID').send_keys('strings')
Obtenir du texte driver.find_element_by_id('ID').text
Obtenir des attributs(Pour href) driver.find_element_by_id('ID').get_attribute('href')
Déterminer si l'élément est affiché driver.find_element_by_xpath('xpath').is_displayed()
Déterminer si l'élément est valide driver.find_element_by_xpath('xpath').is_enabled()
Déterminer si un élément est sélectionné driver.find_element_by_xpath('xpath').is_selected()

Lorsque vous souhaitez sélectionner une liste déroulante

from selenium.webdriver.support.ui import Select

element = driver.find_element_by_xpath("xpath")
Select(element).select_by_index(indexnum) #Sélectionnez par index
Select(element).select_by_value("value") #valeur de valeur
Select(element).select_by_visible_text("text") #Afficher le texte

Liste de la façon de spécifier Xpath

La description Exemple de code
Sélectionnez tous les éléments //*
Sélectionnez tous les éléments //a
Sélectionnez un attribut @href
Sélectionnez plusieurs éléments [a or h2]
Obtenir l'élément par identifiant //*[@id="id"]
Obtenez des éléments avec classe //*[@class="class"]
Recherche de texte //*[text()="strings"]
Recherche partielle de texte //*[contains(text(), "strings")]
Correspondance partielle de classe //*contains(@class, "class")
Obtenez le nœud suivant /following-sibling::*[1]
Deux éléments après /following-sibling::a[2]
Récupérez le nœud arrière /preceding-sibling::*[1]

Reportez-vous ici pour savoir comment obtenir d'autres nœuds

Lors du changement d'onglets

Utilisé lorsqu'un nouvel onglet est créé sans transition de page lorsque vous cliquez dessus

handle_array = driver.window_handles
driver.switch_to.window(handle_array[1])

Attendez qu'un élément spécifique s'affiche


from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

#Attendez que tous les éléments de la page soient chargés (jugement du délai d'attente dans 15 secondes)
WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)

#Attendez que l'élément de la page avec l'ID spécifié soit chargé (jugement du délai d'expiration dans 15 secondes)
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.ID, 'Nom de l'ID')))

#Nom de la CLASSE Attendez que l'élément de la page spécifiée soit chargé (jugement de délai d'attente dans 15 secondes)
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CLASS_NAME, 'Nom du cours')))

#Attendez que l'élément de la page spécifié par le nom CLASS dans Xpath soit chargé (jugement de délai d'attente dans 15 secondes)
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, 'xpath')))

Que faire lorsque vous ne pouvez pas cliquer

target = driver.find_element_by_xpath('xpath')
driver.execute_script("arguments[0].click();", target)

Comment utiliser les pandas

Comment créer un bloc de données et ajouter des données

import pandas as pd
columns = ['Objet 1', 'Point 2', 'Point 3', 'Point 4', 'Point 5']
df = pd.DataFrame(columns=columns)

#Processus d'acquisition de données

se = pd.Series([data1, data2, data3, data4, data5], columns)
df = df.append(se, columns)

Lors du téléchargement des données Pandas

from google.colab import files

filename = 'filename.csv'
df.to_csv(filename, encoding = 'utf-8-sig') 
files.download(filename)

Lors de l'enregistrement des données Pandas sur Mon disque

from google.colab import drive

filename = filename.csv'
path = '/content/drive/My Drive/' + filename

with open(path, 'w', encoding = 'utf-8-sig') as f:
  df.to_csv(f)

Comment travailler avec des feuilles de calcul

Préparatifs pour travailler avec des feuilles de calcul

#Téléchargez les bibliothèques nécessaires pour travailler avec des feuilles de calcul
!pip install gspread

from google.colab import auth
from oauth2client.client import GoogleCredentials
import gspread

#Processus d'authentification
auth.authenticate_user()
gc = gspread.authorize(GoogleCredentials.get_application_default())

Code fréquemment utilisé

ss_id = 'ID de la feuille de calcul'
sht_name = 'Nom de la feuille'

workbook = gc.open_by_key(ss_id)
worksheet = workbook.worksheet(sht_name)

#Lors de l'acquisition de données
worksheet.acell('B1').value
worksheet.cell(2, 1).value

#Lors de la mise à jour
worksheet.update_cell(row, column, 'Mettre à jour le contenu')

liste de codes gspread

Fonctionnement du classeur

La description Exemple de code
Sélectionnez la feuille de calcul par ID gc.open_by_key('ID')
Sélectionnez la feuille de calcul par URL gc.open_by_url('URL')
Obtenez le titre de la feuille de calcul workbook.title
Obtenir l'identifiant de la feuille de calcul workbook.id

Fonctionnement du siège

La description Exemple de code
Obtenir la feuille par nom de feuille workbook.worksheet('Nom de la feuille')
Obtenir une feuille avec index workbook.get_worksheet(index)
Obtenir toutes les feuilles dans un tableau workbook.worksheets()
Obtenir le nom de la feuille worksheet.title
Obtenir l'ID de la feuille worksheet.id

Manipulation cellulaire

La description Exemple de code
Acquisition de données par méthode A1 worksheet.acell('B1').value
Acquisition de données par méthode R1C1 worksheet.cell(1, 2).value
Sélectionnez plusieurs cellules et obtenez un tableau unidimensionnel worksheet.range('A1:B10')
Obtenir des données pour les lignes sélectionnées worksheet.row_values(1)
Obtenir la formule pour la ligne sélectionnée worksheet.row_values(1,2)
Obtenir des données pour les colonnes sélectionnées worksheet.column_values(1)
Obtenir la formule pour la colonne sélectionnée worksheet.column_values(1,2)
Obtenez toutes les données worksheet.get_all_values()
Mettre à jour la valeur de la cellule avec la méthode A1 worksheet.update_acell('B1','Valeur à mettre à jour')
Mettre à jour la valeur de la cellule avec la méthode R1C1 worksheet.update_cell(1,2,'Valeur à mettre à jour')

[Site de référence] Aide-mémoire BeautifulSoup4 (sélecteur, etc.) Mémo Python3 - Beau truc de Soup4 Bases du sélecteur CSS pour le web scraping Résumé des méthodes de fonctionnement fréquemment utilisées de Selenium webdriver Qu'est-ce que XPath? Apprenez les bases de XPath! Indispensable pour le web scraping! Résumé de Xpath Résumé de l'utilisation de la bibliothèque gspread! Travailler avec des feuilles de calcul en Python

Recommended Posts

Cheet sheet lors du scraping avec Google Colaboratory (Colab)
Étudiez Python avec Google Colaboratory
À propos de l'apprentissage avec Google Colab
Essayez OpenCV avec Google Colaboratory
Extraits de code souvent utilisés lors du traitement de vidéos avec Google Colaboratory
Extraits de code souvent utilisés lors de l'utilisation de BigQuery avec Google Colab
Exemple de résumé de code lorsque vous travaillez avec des feuilles de calcul Google de Google Colab
Aide-mémoire personnel Google Test / Mock
Extraits (scraping) enregistrés dans Google Colaboratory
Détection des fonctionnalités OpenCV avec Google Colaboratory
Jouez avec Turtle sur Google Colab
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
Collaboratoire Google
Comment rechercher Google Drive dans Google Colaboratory
Créez un classificateur en cascade avec Google Colaboratory
Utilisation du noyau Jupyter de Java avec Google Colaboratory
Utilisez TPU et Keras avec Google Colaboratory
Apprentissage automatique avec Pytorch sur Google Colab
Grattage au sélénium
Grattage au sélénium ~ 2 ~
Grattage avec Python
Grattage avec Python
Grattage avec du sélénium
Aide-mémoire au curry
Aide-mémoire SQLite3
feuille de triche pyenv
Comment charger des fichiers dans Google Drive avec Google Colaboratory
Un moyen facile de gratter avec Python en utilisant Google Colab
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"
Créer un environnement pour utiliser CaboCha avec Google Colaboratory