最近、スクレイピングを勉強し始めたshinです!
今日はPythonのスクレイピングにおいて特定のエラーに直面した経験を共有したいと思います。
特に「Pythonスクレイピング&クローリング データ収集マスタリングハンドブック」という本を参考にしている方は、同じエラーに遭遇する可能性があります。
発生した問題
ChoromeDriverManagerを使ってスクレイピングの環境を設定していた際、以下のエラーメッセージが出現しました。
NameError: name 'driver' is not defined. Did you mean: 'webdriver'?
原因
このエラーは、通常、driverという変数や名前が定義されていない場合に発生します。本の指示に従ってコードを記述していたので、何かコードが抜けているか、または誤った箇所があったのかもしれないと思って、色々調べてましたが全然解決できませんでした。
そうしたら、Amazonのレビューにも同じことが書いてあってそれを元に書くと解決しました!
解決策
解決策は以下の手順になります。
解決手順
- 一番上の定義するところに次のコードを入力する
from selenium.webdriver.chrome.service import Service
- 真ん中あたりの以下のコードを書き換える
# driver = webdriver.Chrome(ChromeDriverManager().install()) driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
以上の手順を実行することで、無事コードを動かすことが出来ました。
補足
その後も色々調べていたんですが、もっと短いコードで書けることが分かりましたのでそれも共有しておきます。
以下のサイトが勉強になりました!
【Selenium】ChromeDriver自動更新で楽する方法【Python】
Seleniumバージョン4.6以上の方なら少ないコードを減らすことができます。
ちなみにSeleniumのバージョンを調べる方法は以下のコマンドを実行します。
pip show selenium Name: selenium Version: 4.12.0 Summary: Home-page: https://www.selenium.dev Author: Author-email: License: Apache 2.0 Location: d:\python\scraping\.scraping\lib\site-packages Requires: certifi, trio, trio-websocket, urllib3 Required-by:
自分の場合は「4.12.0」でした。
Selenimuコード
じゃあ実際にどんなコードなのかというと、次のようになります。
from selenium import webdriver driver = webdriver.Chrome()
ですので、本に書かれているコードを書き直すと次のようになります。
from selenium import webdriver # from selenium.webdriver.chrome import service as fs → こいつをコメントアウト # ChromeDriverManagerを使用した場合 # driver = webdriver.Chrome(ChromeDriverManager().install()) → こいつをコメントアウト driver = webdriver.Chrome()
若干、文字数が減ってすっきりしました!
まとめ
スクレイピングは非常に強力なツールですが、エラーに遭遇することもしばしば。
しかし、エラーメッセージをじっくりと読み、その原因と解決策を一つ一つ確認することで、多くの問題は解決できます。
今回の経験が、皆さんのスクレイピングの冒険を少しでもスムーズに進める手助けとなれば幸いです。
以上です。ありがとうございました。
コメント