LoginSignup
0
1

More than 1 year has passed since last update.

Pythonスクレイピングにおけるパスの書き方

Posted at

初めに

現在学習でスプレイピングを学習しているのですが、抽出したデータをcsvなどで保存する際にわざわざ絶対パスで書くことによる障害が起きるのではないかと思った。

そしてそのコードを他の人が使用する際にローカルのパスでは動かないのでコードを変更する必要があった。

自分の学習のメモだと思ってみてください。

問題点

とあるサイトのページからデータを取得したい。
その際にサイトの情報をHTMLファイルで保存を行う。その際に以下のコードでは問題が起きる。

sc.py
p = f"/Users/ユーザー名/Python-Scraping/html/{driver.title}.html"
    with open(p,"w") as f:
        f.write(html)

途中は端折っていますが、要するにPython-Scrapingフォルダの下に別々にsc.pyファイル、htmlフォルダが同じ階層に存在しています。

この場合に異なるフォルダ形式や異なるユーザー名ではコードが動かなくなるのが現在の問題点です。

解決策

まず初めにライブラリをインポートします。

sc2.py
import os

この後で続きのコードを記入していきます。

sc2.py
#現在のファイルの位置のパスを表示することができる。
print(os.path.abspath(__file__))
#上のファイルが格納されているフルパスを得ることができる
print(os.path.dirname(os.path.abspath(__file__)))

実際にターミナルで実行が可能であるか確認してみてください。パスが確認できると思います。

ターミナル
/Users/ユーザー名/Python-Scraping/lesson.py
/Users/ユーザー名/Python-Scraping

このように出力されます。


sc2.py
dir = os.path.dirname(os.path.abspath(__file__))

os.path.join(dir,"html","index.html")

先ほどの二つ目のコードを変数dirに格納します。そして同じ階層にあるhtmlフォルダ内のindex.htmlファイルとして作成を行うことができます。

実際に作成が行われるかの確認を行うために出力を行なってみてください。

sc2.py
print(os.path.join(dir,"html","index.html"))
ターミナル
/Users/ユーザー名/Python-Scraping/html/index.html

このように出力されていれば成功です。


あとは最初に記述したコードを書き換えるだけです。

sc.py
dir_name = os.path.dirname(os.path.abspath(__file__))
#p = f"/Users/ユーザー名/Python-Scraping/html/{driver.title}.html"
p = os.path.join(dir_name,"html",f"{driver.title}.html")
    with open(p,"w") as f:
        f.write(html)

まとめ

このように一見なんともないコードも他者との連携が取りにくい場合があります。
一文変えることによって、ユーザーに囚われることなくフォルダの中にファイルを格納することが可能となりました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1