Web scraping avec Selenium (Python)

Lorsque vous créez un système pour l'apprentissage automatique à l'aide de Python, vous pouvez utiliser des données qui peuvent être utilisées sans restrictions sur les mécanismes de contrôle tels que les brevets, appelés données ouvertes publiées sur Internet. Bien sûr, nous utilisons les données acquises pour mettre à jour efficacement le modèle, mais il y a des moments où nous voulons l'automatiser. Cette fois, j'utiliserai Selenium pour ce que l'on appelle le Web scraping.

Remarques

Les téléchargements mécaniques sont souvent interdits, veuillez donc lire les termes et conditions du site que vous visitez.

Bibliothèque de scraping Web typique

D'après ce que j'ai vérifié, il y a quelques cadres de sélection, mais je ne l'ai pas utilisé cette fois, donc je vais essayer d'utiliser Selenium. À ma connaissance, Selenium est un outil qui automatise les opérations d'écran sur le Web, mais il utilise l'automatisation des opérations d'écran pour le scraping.

environnement

Un pilote appelé WebDriver est requis entre Selenium et le navigateur (Chrome cette fois).

Installation de sélénium

Python utilise Anaconda, donc installez-le avec conda.

conda install selenium

Installation de WebDriver

WebDriver a téléchargé le fichier binaire sur http://chromedriver.chromium.org/downloads Vous pouvez soit le copier à un emplacement où Path passe, soit l'installer avec pip. Cette fois, installez avec pip (conda).

conda install chromedriver-binary

Exemple d'exécution

Maintenant que l'environnement est terminé, exécutons d'abord l'exemple à partir du site chromedriver ci-dessous. Le contenu est que le site Google est affiché, ChromeDriver est recherché, et il dort pendant 5 secondes et se termine. http://chromedriver.chromium.org/getting-started

test1.py


import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.google.com/');
time.sleep(5) # Let the user actually see something!
search_box = driver.find_element_by_name('q')
search_box.send_keys('ChromeDriver')
search_box.submit()
time.sleep(5) # Let the user actually see something!
driver.quit()
python test1.py

Une fois exécuté, le navigateur démarre et commence à rechercher le pilote Chrome. Le navigateur dit "Contrôlé par un logiciel de test automatisé"! Et c'est facile!

1.png

Échantillon d'acquisition de données ouvertes

Puisqu'il est solitaire de terminer le démarrage de l'exemple, je vais créer un exemple qui télécharge le CSV à partir du site suivant.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')

download_dir = 'C:\\project'
prefs = {}
prefs['download.prompt_for_download'] = False
prefs['download.directory_upgrade'] = True
prefs['download.default_directory'] = download_dir

options.add_experimental_option('prefs', prefs)

driver = webdriver.Chrome(chrome_options=options)

driver.get('https://XXXXXXXXXXXXXXXXXXXXXX');
time.sleep(5) # Let the user actually see something!
url = driver.find_element_by_partial_link_text("Données quotidiennes(CSV)")


driver.command_executor._commands["send_command"] = (
    "POST",
    '/session/$sessionId/chromium/send_command'
)
params = {
    'cmd': 'Page.setDownloadBehavior',
    'params': {
        'behavior': 'allow',
        'downloadPath': download_dir
    }
}
driver.execute("send_command", params=params)

driver.get(url.get_attribute('href'));

time.sleep(5) # Let the user actually see something!
driver.quit()

Exécutez le navigateur caché

Dans la partie suivante du code, masquez le navigateur en passant --headless comme option lors du démarrage du navigateur.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)

Spécification de la destination d'enregistrement du fichier téléchargé

La partie suivante du code spécifie où enregistrer le fichier téléchargé.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
download_dir = 'C:\\project'
prefs = {}
prefs['download.prompt_for_download'] = False
prefs['download.directory_upgrade'] = True
prefs['download.default_directory'] = download_dir
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)

Dans le cas de --hedless, spécifiez la destination de sauvegarde du fichier téléchargé en plus

Dans le cas de --hedless, un code supplémentaire pour spécifier la destination de sauvegarde du fichier téléchargé est requis.

driver.command_executor._commands["send_command"] = (
    "POST",
    '/session/$sessionId/chromium/send_command'
)
params = {
    'cmd': 'Page.setDownloadBehavior',
    'params': {
        'behavior': 'allow',
        'downloadPath': download_dir
    }
}
driver.execute("send_command", params=params)

Ceci termine le téléchargement! Facile.

Résumé

Il semble que le code augmentera si vous faites des choses compliquées, mais si vous avez utilisé Selenium, je pense que vous pouvez choisir Selenium pour le web scraping. L'inconvénient est que plus de pilotes de navigateur et plus de choses à installer. Cela semble pratique si le script Selenium créé fonctionne sur le navigateur, mais il semble encore incomplet.

Un site qui semble utile pour faire des choses compliquées

Recommended Posts

Web scraping avec Selenium (Python)
J'ai essayé le web scraping en utilisant python et sélénium
Scraping à l'aide de Python
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
Grattage avec du sélénium [Python]
Pratiquer le web scraping avec Python et Selenium
Un chercheur d'une société pharmaceutique a résumé le raclage Web à l'aide de Python
Scraping à l'aide de Python 3.5 async / await
Web scraping avec python + JupyterLab
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1
Scraping à l'aide de la syntaxe Python 3.5 Async
Grattage avec du sélénium en Python
Commencez à Selenium en utilisant python
Web scraping à l'aide d'AWS lambda
Grattage avec Selenium + Python Partie 2
[Python + Selenium] Conseils pour le grattage
Web scraping débutant avec python
[Scraping] Scraping Python
raclage Web
Scraping avec Selenium en Python (Basic)
Grattage avec Python, Selenium et Chromedriver
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
Web scraping pour les débutants en Python (1)
Web scraping pour les débutants en Python (4) -1
[Python] Introduction au scraping | Programme d'ouverture de pages Web (sélénium webdriver)
[Python scraping] J'ai essayé la recherche Google Top10 en utilisant Beautifulsoup et sélénium
Utilisez le navigateur à l'aide des liaisons Python du pilote Web Selenium
Mémo de raclage Python
Grattage au sélénium
[Python / Selenium] XPath
Scraping Python get_ranker_categories
Grattage au sélénium ~ 2 ~
Grattage avec Python
Grattage WEB avec Python (pour mémo personnel)
Grattage avec Python
Premiers pas avec Python Web Scraping Practice
grattage Web (prototype)
Commencez à utiliser Python
Grattage avec du sélénium
[Note personnelle] Scraping de pages Web en python3
Site de courses de chevaux Web scraping avec Python
Redémarrez le routeur en utilisant Python, Selenium, PhantomJS
Scraping de sites Web à l'aide de JavaScript en Python
Exploitez automatiquement les pages Web à l'aide du pilote Web Selenium
Premiers pas avec Python Web Scraping Practice
Python: grattage partie 1
[Python] Gratter une table avec Beautiful Soup
Scraping Web facile avec Python et Ruby
[Pour les débutants] Essayez le web scraping avec Python
Python: grattage, partie 2
Selenium + WebDriver (Chrome) + Python | Création d'un environnement pour le scraping
Exécutez régulièrement le scraping WEB avec AWS-Lambda + Python + Cron
Procédure pour utiliser l'API WEB de TeamGant (en utilisant python)
Grattage des listes de programmes télévisés chargées dynamiquement [Python] [Selenium]