Pythonで改行コード\nを文字列から削除する

こんにちは!

少し間が空いてしまいましたが、本日は改行コードを文字列から削除する方法を書きたいと思います。

テキストファイルをPythonで利用するときには改行コードや空白が邪魔になります。

スクレイピングした際にはそういった情報がどうしても入ってくるので、

それを削除してみようというのが今回の目標です。

 

いくつか手段があるようです。

  • 文字列から全て改行コードを削除する方法
  • 文字列の先頭と末尾から改行コードを削除する方法
  • 文字列から末尾の改行コードを削除する方法

 

今回はすべての改行コードが邪魔になったため、削除してしまいます。

使うのはreplace()というメソッドです。

使い方は簡単。

x.replace(‘置換前’, ’後’, 個数)

※xは任意の変数

※個数の設定は任意。置き換える個数を指定できるようです

といった形で使います。

 

先頭と末尾から改行コードを削除する際にはstrip()、末尾の改行コードを削除する際にはrstrip()を使うそうですので、ぜひ試してみてください!

ではまた!

Conda-forgeについて

私は仮想環境としてminiforgeを利用していることもあり、

Condaコマンドを使ってライブラリをインストールしたりパッケージ管理をしています。

その中で使っているコマンド

Conda install -c conda-forge  hoge

のconda-forgeについて記載します。

Conda-forgeとは?

調べてみるとGithub上で構築されているパッケージコレクションのようです。
github上のconda-forgeに保管されているパッケージを自分の環境にインストールすることで、

pythonのプログラムを作成するときに、使いたいライブラリを活用することができます。

Condaとpipについて

一番大きな違いは保管されているパッケージが適切に管理されているか否かです。

Conda=Anacondaが管理している

PiP=PyPLが管理している

Anacondaの場合にはパッケージを組織で管理している一方でPipは誰でも自由にパッケージを公開できる状態であるため、

Pipを使うと正しく動作しないパッケージが含まれている可能性もあります。

そのため、

パッケージ数:conda<pip

パッケージ品質:conda>pip

となるわけです。

CondaとPipの使い分け

上記の記載の内容から考えると、

個人的には基本的にはcondaを活用し、もしパッケージがない場合にpipを使う方法が一番良いのかなと思ってます。

NoSuchDriverException: Message: Unable to obtain driver for chrome using Selenium Manager.NoSuchDriverException: Message: Unable to obtain driver for chrome using Selenium Manager.

と表示されてしまう件。

前回、Seleniumのアップデートをすることによってwebdriverの自動更新が簡単にできるようになると思い、試したところ別のエラーに再度ハマってしまったため、その解決に向けた備忘録となります。

 

スクレイピングを実行する際に、

NoSuchDriverException: Message: Unable to obtain driver for chrome using Selenium Manager.; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location

と出てしまいます。

 

今回はこのエラーを解決したいと思います。

 

エラーが発生した理由は、chromedriverが見つけられないということみたいです。

 

Terminalを開き、

~ % which chromedriver

とコマンドを打つと、

chromedriver not found

と表示されていてドライバーが見つけられないようです。

 

過去にインストールしたwebdriver-managerが悪さしているのかなぁと思い、

一旦seleniumとwebdriver-managerをuninstall!

Pip uninstall seleinium

Pip uninstall webdriver-manager

(Condaコマンドだとうまく行かなかったため、pipを使用)

その後、再度selenium(4.6以降)をインストールした。

Pip install selenium

 

結果、

from selenium import webdriver

driver = webdriver.Chrome()

を実行すると、無事にChromeが立ち上がることを確認しました!!

webdriver.chrome()について(Selenium)

Seleniumを利用している中で、一番面倒だなと思うのがChromedriverのバージョン管理です。

そのバージョン管理、簡単になったみたいです!!

なんと、Selenium4.6以降は自動的に適切なドライバーが読み込まれるようです。

なので、

    from selenium import webdriver
    driver = webdriver.Chrome()

のコードだけでドライバーを起動することができるよう。

早速試してみることに。

現状のSeleniumのバージョン確認。selenium4.5以下ならバージョンの最新化。

インストール済パッケージの一覧表示:conda list

インストール済パッケージの個別表示:conda list selenium

selenium4.6以降にアップグレードしてあげる。

    conda upgrade selenium

で最新の4.12.0へのアップデート完了。

Selenium 4.6.0は2022年11月にリリースされていたみたいです。

https://www.selenium.dev/blog/2022/selenium-4-6-0-released/

もっと早く知りたかったぁ。。

Seleniumをはじめる

Seleniumのエラー対処については記載したものの、

どのようにSeleniumを利用するかについて記載していなかったので、

今回はそちらを記載することにします。

Seleniumとは?

記述されたプログラムに沿って実際のWebブラウザを実行できる特徴を持ったライブラリ。

スクレイピングと言われる手法をする際にはこのライブラリを使われることが多いです。

私はPythonを利用して使用しますが、JavaRubyなどの言語にも対応しているみたいです。

実行環境

Python 3.10.9

Selenium 4.12.0

の環境で実行します。

pip install selenium
(私の環境ではConda install -c conda-forge selenium)

でインストールします。

Webdriverのダウンロード(今回はSelenium4.6.0以上を利用するため不要)

SeleniumではMozilla Firefox/Google Chrome/Safariのブラウザを利用することができます。

Webブラウザを起動するために必要なドライバーをインストールします。

Mozilla FirefoxGoogle Chromeの場合

Firefoxの場合にはgeckodriver、Chromeの場合にはChromedriverをインストールします。

ダウンロード後には環境変数のPATHを通してあげる必要がある場合がありますので、注意が必要です。

Safariの場合

ドライバーのインストールは不要ですが、ブラウザの設定変更が必要です。

Safari設定画面から[詳細]>[メニューバーに”開発”メニューを表示]で開発タブが現れます。

開発メニュー内で[リモートオートメーションを許可] を選択します。

Seleniumの基本的な使い方(ブラウザの起動)

    from selenium import webdriver
    driver = webdriver.*****()
    url='https://www.google.com'
    driver.get(url)

*****の部分をFirefox/Chrome/Safariに変更することで使用するブラウザを変更できます!

無事にブラウザを起動することができました!

the first argument must be callable エラーについて

定期的にスクレイピングを実行する際にschedule関数を用いますが、

schedule.every(3).seconds.do(task(“xx”))

引数が必要な関数を定期的に回す場合にこのように書きました。


これを実行すると,the first argument must be callableとエラーが出てきてしまいます。
あれ、引数は使えない?
そんなことありえないよなぁ。。

調べてみるとDoメソッドの中身の書き方が違うみたいです。

schedule.every(10).seconds.do(task,xx=“YYYYY”)

通常defで定義した引数のある関数を利用するときは

task(YYYYY)

としてあげると実行できますが、ここでは

task,xx=“YYYYY”

と宣言してあげる必要があるようです。
もしご参考になれば!

ValueError: There is no such driver by urlのエラー(Selenium)

Seleniumを使い、久々にスクレイピングでもやってみようかなぁ。

久々のChromeのWebドライバーを利用しようとしたところ、、、

Seleniumでありがちなエラーに遭遇!と思いきや少し違う。。。

ValueError: There is no such driver by url
https://chromedriver.storage.googleapis.com/116.0.5845/chromedriver_mac64.zip

https://chromedriver.chromium.org/home

Chromedriverを提供しているサイトを訪問してみるとこんな記載がありました。

If you are using Chrome version 115 or newer, please consult the Chrome for Testing availability dashboard. This page provides convenient JSON endpoints for specific ChromeDriver version downloading.

ここのダッシュボードを参照すれば良いのですね。

ダッシュボードから116.xx.xx.xxのバージョン用のStable版をダウンロードし、インストール。

無事に利用できるようになりました!

▼Googleアドセンス広告の配信について

当サイトはGoogle及びGoogleのパートナー(第三者配信事業者)の提供する広告を設置しております。その広告配信にはCookieを使用し、当サイトやその他のサイトへの過去のアクセス情報に基づいて広告を配信します。 Google が広告 Cookie を使用することにより、当サイトや他のサイトにアクセスした際の情報に基づいて、Google やそのパートナーが適切な広告を表示しています。 お客様はGoogleアカウントの広告設定ページ(https://adssettings.google.com/u/0/authenticated)で、パーソナライズ広告を無効にできます。また aboutads.info のページにアクセスして頂き、パーソナライズ広告掲載に使用される第三者配信事業者のCookieを無効にできます。 その他、Googleの広告におけるCookieの取り扱い詳細については、Googleのポリシーと規約ページ(https://policies.google.com/technologies/ads)をご覧ください。

▼Amazon.co.jpアソシエイトについて

当サイトは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。 Amazonのアソシエイトとして、当サイトは適格販売により収入を得ています。

▼問い合わせについて

お問い合わせは下記までお願いします。 https://docs.google.com/forms/d/e/1FAIpQLSdygXc6hECGIAPFRwkgtYMG3lOheb0I_7uKlTNsgRSKqqBKrg/viewform?usp=sf_link