【Python】スクレイピングしたあとのデータ保存
2023.07.05
うまくいかないグチです(;´Д`)
年のせいか物覚えと理解力の低下が著しいです・・

スクレイピングといえば、Rubyか、Pythonが流行りと聞いて
どうせならとPythonでSeleniumとBeautiful Soupを試してます。
私の得意言語、Delphiで出来ればいいのだけどいいライブラリが無いのでね仕方ないね(;´Д`)

試してみて思ったこと・・・
Pythonでも1つで完璧にこなすのは無理なのね(;´Д`)


Seleniumはブラウザのバージョンと合致したドライバーを持っていないと使えない弱点があり、
動作も遅い。
しかし最近はJava Scriptを通さないと重要な部分は見せないページが増えてきたので、
Seleniumの機能が無いと始まらない(;´Д`)


Beautiful Soupは軽快且つ単独でHTMLを読みにいき
解析を行ったあとに対して検索を行うので
ドライバーがいらない快適性があるも、
Xpathに対応してないので、
裏技的にlxmlで変換してからなんて面倒なことをする・・
素人にはこれがストレス極まりない(;´Д`)

そして、SeleniumとBeautiful Soupどちらをうまく使っても
XPATHで拾えないデータが結構出てくる。
もちろんCSSセレクタ使ってもダメ・・・
これがまたストレス(;´Д`)
データを捨てるわけにもいかないので、
階層を一つ上げて全部を吸い上げ、コードでゴリゴリ分解とか
ホームページの仕様変更に耐性が弱すぎるので
信用に値しないものを作る意味は?と考え込む・・
そして拾ったデータを整理し2次元配列に仕舞い込んで
最後、CSV出力しようと思ったときにもうまくいかないで躓く・・・
慣れない言語をあつかうときの窮屈感たるや吐き気を催すレベル(;´Д`)
とりあえず、一般的なCSV吐き出しで使われる

csv.writer(出力ファイル)

と私は相性が悪いらしい・・・・
delimiterとquotecharを設定してもうまく機能しない・・・
空白が文字コード化されて保存されたり面倒くさい事件が多く起きる。
しかもカンマで区切ってほしいのにスペースでも区切ってしまう現象もおきて
文字列がコマ切れ状態に(;´Д`)

これについては解決策を見つけることができて、
煩わしいことをきれいに全部解決してくれたpandasに拍手。

import pandas as pd

columns = ["date", "serial", "name", "tanka", "kosu", "kingaku"]
df = pd.DataFrame(配列 , columns=columns)
df.to_csv('d:\output.csv' , index=False, encoding="shift_jis")


これだけで配列があっさりCSVファイルを出力できるのでコードもすっきり。
項目名がいらないのならさらに1行消せる。大満足(;´Д`)

しかしXPathもCSSセレクタでも拾えないデータはどうしようか・・・
ある意味これが対策されているってことなんだと思うけど、
正規表現でなら正確に抜け出せるのだろうか・・

1つ1つ解決していくのにえらい時間かかる。
まだまだ迷走中(;´Д`)

- CafeNote -