Ich möchte bibliografische Informationen + Abstracts aller im Journal of Science Direct veröffentlichten Artikel sammeln.
(Referenz: https://codezine.jp/article/detail/12230) Es scheint, dass dies im Wesentlichen mit dem Anforderungspaket und dem Beautiful Soup 4-Paket erfolgt. Installieren Sie also zuerst diese Typen
pip install requests, beautifulsoup4
Also habe ich so etwas versucht.
import request
from bs4 import BeautifulSoup
#Senden Sie eine Anfrage an die URL, die gelöscht werden soll, und rufen Sie den HTML-Code ab
res = requests.get('https://www.ymori.com/books/python2nen/test1.html')
#Erstellen Sie ein BeautifulSoup-Objekt aus dem Antwort-HTML
soup = BeautifulSoup(res.text, 'html.parser')
print(soup)
Vorläufig konnte ich das HTML als Text abrufen, aber wie mache ich das zum Beispiel, indem ich das Kontrollkästchen aktiviere oder auf die Schaltfläche klicke? ??
Nach der Untersuchung scheint es, dass Beautiful Soup keine Seiten erstellen kann, die den Anzeigeinhalt dynamisch ändern, indem Javascript vollständig verwendet wird. Nachdem ich untersucht hatte, was zu tun war, kam ich zu einem Paket namens Selen. (Referenz: https://qiita.com/Fujimon_fn/items/16adbd86fad609d993e8) Anscheinend können Sie so etwas wie RPA machen. Mit anderen Worten, bedienen Sie den Webbrowser so, dass er von Menschen gesehen werden kann. Wenn dies jedoch alles ist, was Sie benötigen, benötigen Sie einen Treiber, der dem von Ihnen verwendeten Browser entspricht. (Referenz: https://kurozumi.github.io/selenium-python/installation.html#drivers)
Installieren Sie Selen und Chromedriver. Überprüfen Sie vor der Installation auf der Seite ChromeDriver die Treiberversion, die Ihrer Chrome-Version entspricht (überprüfen). Dann war es 84.0.4147.30). (Referenz: https://qiita.com/hanzawak/items/2ab4d2a333d6be6ac760)
pip install selenium, chromedriver-binary==84.0.4147.30
Nach der Installation müssen Sie den Pfad nicht mehr festlegen (Sie müssen jedoch den "Chrome-Treiber importieren" einschließen). Die direkt von [ChromeDriver] heruntergeladene Exe-Datei (https://sites.google.com/a/chromium.org/chromedriver/downloads), z. B. in c: \ work, geben Sie den Pfad explizit ein. Sie können es auch geben. In diesem Fall müssen Sie das Paket nicht importieren.
Das Folgende ist ein Beispiel für die explizite Übergabe des Pfads anstelle von "import chromedriver".
OpenBrowser.py
import requests
from selenium import webdriver # import chromedriver_binary
load_url = "https://www.sciencedirect.com/journal/reliability-engineering-and-system-safety/vol/204/suppl/C"
driver = webdriver.Chrome(executable_path='c:/work/chromedriver.exe') # driver = webdriver.Chrome()
driver.get(load_url)
Dann startete der Browser ohne Erlaubnis und sprang unter der angegebenen Adresse zur Seite. Es ist komplett RPA.
Ich möchte auf Jounrals Seite gehen
Verarbeitung aufgerufen. Wenn Sie dies wiederholen, können Sie Informationen aus der gesamten Literatur erhalten. Erfahren Sie also, wie Sie auf "Alle auswählen", "Zitate exportieren" und "Zitieren und Zusammenfassung in Text exportieren" klicken.
Grundsätzlich können Sie das Ziel, das Sie bedienen möchten, auf der vom Treiber geladenen Seite finden, z. B. ID, Klassenname, Namensattribut und send .click (). Suchen Sie also zuerst nach "Select_All". Gehen Sie zur Seite mit Chrom und drücken Sie die Taste F12, um den Entwicklerbildschirm anzuzeigen. Drücken Sie dann "Strg" + "F", um das Suchfeld zu öffnen, und geben Sie "Alle auswählen" ein, um zu suchen. Dann finden Sie den Ort, an dem Select All geschrieben ist. Eigentlich wurde es mit einem Button-Tag gemacht. Nun, das stimmt. Auf den ersten Blick sah es jedoch nicht wie ein Knopf aus, so dass ich ein wenig überrascht war. Klicken Sie vorerst mit der rechten Maustaste auf dieses Schaltflächen-Tag und wählen Sie Kopieren ⇒ Kopierauswahl, um die CSS-Auswahl zu erhalten.
Also zurück zum Quellcode, Fügen Sie den CSS-Selektor von früher ein. Sie benötigen jedoch nur den "Button". Und unten. Deshalb
button = driver.find_element_by_css_selector("button.button-link.button-link-secondary.js-select-all")
button.click()
Selbst wenn ich das Obige plötzlich zu OpenBrowser.py hinzufüge und es ausführe, schlägt es fehl. Wenn Sie die URL an Chrome übergeben, ist der Zugriff nicht sofort möglich. Bevor Sie jedoch den HTML-Code von der URL abrufen, analysieren Sie ihn, und das Element kann darauf zugreifen. Weil es eine Zeitverzögerung gibt. Also muss ich eine Weile warten. Diese Seite ruft time.sleep () aus dem Zeitpaket ab und verwendet es. Diese Methode ist jedoch nicht intelligent, wie in diesem Handbuch beschrieben. Deshalb verwende ich die mit WebDriver gelieferte Wait-Funktion. Deshalb die folgenden Quellen. (Referenz: https://qiita.com/uguisuheiankyo/items/cec03891a86dfda12c9a) (Referenz: https://www.selenium.dev/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html) In Manual gab es nur eine Möglichkeit, das Element anhand der ID anzugeben, im Fall des CSS-Selektors Verwendet "CSS_SELECTOR". (Referenz: https://selenium-python.readthedocs.io/locating-elements.html)
Ich habe es tatsächlich versucht, aber es hat mit Wait nicht funktioniert. Es scheint, dass das Timing auf jeden Fall ausfällt und ein Fehler auftritt. Also habe ich mich doch für time.sleep () entschieden.
WaitAndOperation.py
import requests
from selenium import webdriver # import chromedriver_binary
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
load_url = "https://www.sciencedirect.com/journal/reliability-engineering-and-system-safety/vol/204/suppl/C"
driver = webdriver.Chrome(executable_path='c:/work/chromedriver.exe') # driver = webdriver.Chrome()
driver.get(load_url)
#WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located)
time.sleep(5)
#WebDriverWait(driver, 20).until(
# EC.element_to_be_clickable((By.CSS_SELECTOR, "button.button-link.button-link-secondary.js-select-all"))
#)
button = driver.find_element_by_css_selector("button.button-link.button-link-secondary.js-select-all")
button.click()
Für andere "Zitate zitieren" und "Zitate und Zusammenfassung in Text exportieren" rufen Sie die CSS-Auswahl auf und fügen Sie den zu klickenden Prozess hinzu.
Auf der anderen Seite war "Previous Vol / Issue" kein Button, sondern ein Link. Sie können den Link mit dem CSS-Selektor auf die gleiche Weise angeben, aber Sie können auch mit dem Text des Links auf das Element zugreifen. Also habe ich versucht, per Text darauf zuzugreifen.
final.py
import time
import requests
#from bs4 import BeautifulSoup
# import chromedriver_binary
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
load_url = "https://www.sciencedirect.com/journal/reliability-engineering-and-system-safety/vol/204/suppl/C"
Last_url = "https://www.sciencedirect.com/journal/reliability-engineering-and-system-safety/vol/20/issue/1"
driver = webdriver.Chrome(executable_path='c:/work/chromedriver.exe')
driver.get(load_url)
while 1:
time.sleep(5)
button = driver.find_element_by_css_selector("button.button-link.button-link-secondary.js-select-all")
button.click()
time.sleep(2)
button2 = driver.find_element_by_css_selector("button.button-alternative.text-s.u-margin-xs-top.u-display-block.js-export-citations-button.button-alternative-primary")
button2.click()
time.sleep(2)
button3 = driver.find_element_by_css_selector("button.button-link.button-link-primary.u-margin-xs-bottom.text-s.u-display-block.js-citation-type-textabs")
button3.click()
time.sleep(3)
#Holen Sie sich die aktuelle URL
Purl = driver.current_url
#Brechen Sie, wenn Purl und Curl gleich sind
if Purl== Last_url:
break
link = driver.find_element_by_link_text('Previous vol/issue')
link.click()
Recommended Posts