注意書き
用語とかあまりわからずに直感で勉強している節があるので、だいぶ雑な説明になりますが、その点ご容赦ください。
この記事ではAnacondaのJupyterLab4.3.4 Python3を用いています。
なんかエラー出てくるんだけど
さて、スクレイピングをするためにコードを書くと思うんですが、そのときに必ずする作業としてURLの取得がありますよね。
if __name__ == "__main__"
から始まるコードの最初の部分でする作業です。
おそらく、独学者の方の中で古い教材を使っている方には共感してもらえる話だと思うのですが(だからこそ、この記事を読んでいただいてるんじゃないかな)、「テキストに書いてある通りにコーディングをしているのにURLの取得のところでエラーが出てしまう」なんてことが起きてしまうんです。
具体的には
AttributeError Traceback (most recent call last)
というものが出てきます。
information
Attributeとは属性のことです。
この手のエラーが出てきたとき、タイプミスやオブジェクトの型の不適合を疑ってください。
エラーが出る理由
......いや何回見直しても違うところが見つからないじゃないか。
これ、実はSelenium3からSelenium4になった際、ここら辺の書き方がどうも変わったようなのです。実際に必要最低限のコードで違いをお見せします。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
if __name__ == "__main__":
try:
driver = webdriver.Chrome(ChromeDriverManager().install())
base_url = #任意のURL
driver.get(base_url)
finally:
driver.quit()
⇓ ⇓ ⇓
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
if __name__=="__main__":
try:
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
base_url = #任意のURL
driver.get(base_url)
finally:
driver.quit()
私はこれを知った時、「なんで複雑な方に変えたんだ」とぷんぷんしていましたが、どうやらドライバの制御や、管理の自動化の面でメリットがあるようです。
unique perspective
コードを書く側としては、ServiceがChromeDriverManagerとwebdriverの間の仲立ちをしているイメージを持つと適応しやすいのかなと思います。
最後に
今回はURLの取得の際に出てくるServiceというものについて紹介しましたが、スクレイピングはほかにも様々な処理があり、根気強く勉強をしていく必要がある分野です。一緒に頑張っていきましょう。
参考にどうぞ
似たような記事として次の2つがありますので、時間に余裕がある方はこちらの方も覗いてみてください。
【Python】Selenium 4の変更点とWarning
seleniumでchromeブラウザを操作してウェブサイトを開く