【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つ解決していくのにえらい時間かかる。
まだまだ迷走中(;´Д`)
APC Smart-UPS 500 LCD 修理
2023.06.25


注文してから23日
ようやくリレーが届きました。
Aliexpressにしてはまだいい方か・・・(;´Д`)
その間、近くに雷が落ちて数時間停電があったんだよね・・
幸いPCを動かしている時間帯だからよかったものの、
やはりUPSは大事だなと・・(;´Д`)



部品を取り外すということで、基板を前回よりも扱いやすい状況まで剝き出しにします。
とにかく外すコネクタが多い(;´Д`)
似たようなコネクタがいっぱいあるのでわからなくならないようにマーキングは必須。
できれば写真取りもね。
交換するリレーは赤丸を付けた2つ。どちらが異常なのか特定できればよかったのだけど、
なかなかに難しい(;´Д`)
もしかしたらこの2つじゃない可能性も無きにしもあらず。



8ピンのリレーを外すのは困難を極めた(;´Д`)
故意なのか偶然なのか、微妙にピンを曲げられているので、
スッポンではハンダがきれいに吸いきれないし、部品も抜けてこない。
一度ハンダを盛ってから吸い取ろうと試みるも、元のハンダと盛ったハンダが馴染まず融合しない(;´Д`)
電動のハンダ吸い取り機なら楽なのだろうか?
ハンダこてでハンダを溶かしつつ、ピンを正しい形に矯正というのを同時にやって、
ようやくきれいに吸えた(;´Д`)



6本の方も割と苦労した(;´Д`)



フラックスをふんだんに使ったので基板が汚れてしまった(;´Д`)
IPAできれいに拭きふき。
新しいリレーをつけて基板を元通りへ。


バッテリーも外装も付けて全部元通りにして、電源投入。
あれ?おかしい(;´Д`)
交流電源が来てないってエラーが・・・・
コネクタをつけわすれたかな?
またバラすのメンドクサイ!!

今日はもう時間がないので
確認は後日・・・(;´Д`)
【Python】 ドハマリselenium サンプルコードが動かない
2023.06.12
PythonとSelenium、Beautiful Soupの組み合わせでスクレイピングの勉強をしていますが、
ネットで転がっているサンプルコードでエラーがでる。
というかほとんどすべてがダメ(;´Д`)
どうやら最近登場したseleniumのバージョン4が問題らしい。
そりゃぁ、インストールするときはその時の最新バージョン入れちゃうよね。
まさか従来のソースが使えなくなるなんて考えてもみなかったよ(;´Д`)


driver.findElementByClassName("******");
driver.findElementByCssSelector(".******");
driver.findElementById("******");
driver.findElementByLinkText("******");
driver.findElementByName("******");
driver.findElementByPartialLinkText("******");
driver.findElementByTagName("******");
driver.findElementByXPath("******");

ここら辺の類が全部ダメ。もちろん複数形もダメ。
なんか表記方法の仕様変更らしい。勘弁してくれ(;´Д`)

driver.findElement(By.className("******"));
driver.findElement(By.cssSelector(".******"));
driver.findElement(By.id("******"));
driver.findElement(By.linkText("******"));
driver.findElement(By.name("******"));
driver.findElement(By.partialLinkText("******"));
driver.findElement(By.tagName("******"));
driver.findElement(By.xpath("******"));

こんな感じにそれぞれが変更になった。
私はカッコが複数絡み合うのは見にくいのだが・・・
あと操作系は
クリック   element.click()
テキスト入力 element.send_keys("********")
キー入力   element.clear()
値のクリア  element.submit()
テキスト取得 element.text

のように各エレメントに対して.で接続する。

うーーん、これから読み進める書籍がとてもめんどくさいことに(;´Д`)

- CafeNote -