Wenn Sie mit Python ein System für maschinelles Lernen erstellen, können Sie Daten verwenden, die ohne Einschränkungen für Kontrollmechanismen wie Patente verwendet werden können, die als im Internet veröffentlichte offene Daten bezeichnet werden. Natürlich verwenden wir die erfassten Daten, um das Modell effizient zu aktualisieren, aber manchmal möchten wir es automatisieren. Dieses Mal werde ich Selenium für das sogenannte Web-Scraping verwenden.
Mechanische Downloads sind häufig verboten. Lesen Sie daher bitte die Nutzungsbedingungen der Website, die Sie besuchen.
Soweit ich überprüft habe, gibt es einige Auswahlrahmen, aber ich habe sie diesmal nicht verwendet, daher werde ich versuchen, Selen zu verwenden. Meines Wissens ist Selen ein Tool, das Bildschirmoperationen im Web automatisiert, aber die Automatisierung von Bildschirmoperationen zum Scraping verwendet.
Zwischen Selenium und dem Browser ist ein Treiber namens WebDriver erforderlich (diesmal Chrome).
Python verwendet Anaconda, also installieren Sie es mit conda.
conda install selenium
WebDriver hat die Binärdatei von http://chromedriver.chromium.org/downloads heruntergeladen Sie können es entweder an einen Ort kopieren, an dem Path übergeben wird, oder es mit pip installieren. Dieses Mal mit pip (conda) installieren.
conda install chromedriver-binary
Nachdem die Umgebung vollständig ist, führen wir zunächst das Beispiel von der folgenden Chromedriver-Site aus. Der Inhalt ist, dass die Google-Website angezeigt wird, ChromeDriver durchsucht wird und 5 Sekunden lang in den Ruhezustand versetzt wird und endet. 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
Nach der Ausführung startet der Browser und sucht nach dem Chrome-Treiber. Der Browser sagt "Von automatisierter Testsoftware gesteuert"! Und es ist einfach!
Da es einsam ist, nur das Beispiel zu starten, werde ich ein Beispiel erstellen, das CSV von der folgenden Site herunterlädt.
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("Tägliche Daten(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()
Blenden Sie im folgenden Teil des Codes den Browser aus, indem Sie beim Starten des Browsers als Option --headless übergeben.
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)
Der folgende Teil des Codes gibt an, wo die Download-Datei gespeichert werden soll.
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)
Im Fall von --hedless ist ein zusätzlicher Code erforderlich, um das Speicherziel der Download-Datei anzugeben.
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)
Damit ist der Download abgeschlossen! Einfach.
Es scheint, dass der Code zunimmt, wenn Sie komplizierte Dinge tun, aber wenn Sie Selen verwendet haben, denke ich, dass Sie Selen für das Web-Scraping wählen können. Der Nachteil ist, dass mehr Browsertreiber und mehr Dinge installiert werden müssen. Es erscheint praktisch, wenn das erstellte Selenium-Skript im Browser funktioniert, aber es scheint noch unvollständig zu sein.
Recommended Posts