動的AjaxページをSelenium使ってWebスクレイピング方法

帰国子女あるある。

 

帰国子女だから英語ができると思われている。

 

住んでいた時期が小学校~中学校ぐらいであれば現地の学校や友達ができたら英語が出来るようになってたかもしれない。

だけど、うちの子供が海外赴任でアメリカにいた年齢は

 

0歳~2歳

 

だったからね。

英語は愚か日本語だってまともに話して無かったわww

 

 

だけど帰国子女だから英語ができると思われている。

 

今回、子供が自宅学習により「英検5級」を受験しに会場に行った。

そこで、同じ小学校の知り合いにバッタリ会ってしまった。

 

保護者「あらー、ねほりさん宅は海外に住んでおられので、英検5級なんて受ける必要ないんじゃないからしら?ホホホ」

 

今までも何名からの帰国子女に出会ったけど、

外国に行ってたから英語が上手なんじゃなくて

 

そう言われるのが嫌で陰で一生懸命勉強している

 

から英語が出来るんだと思うよ。

因みに、私は海外赴任者なのに英語が全然できないけどねーーー。

何しに海外に行ったのさww

また「Yahoo!ニュース」からのWebスクレイピングができなくなった。

色々と調査して実装してブログを書いて……週末を潰したのに

 

10日

 

しか利用できなかった。

このサイトの訪問者は20人ぐらいで利益も年間50円ぐらなのに、しょっちゅう修正している。

ウーバーイーツで運搬作業やったほうがよっぽど金になるわ、糞ったれ。

[前回] 動的Ajaxのページを読み出す方法

静的サイトで発行されたトークンを探し出し、URLを生成する事でAjaxのサイトからJSON形式のデータを受け取る。

これが今までの方法だが、動作しなくなった。

動的AjaxページからSelenium無しでWebスクレイピング方法
Yahoo!ニュースって「エンタメ」に偏りすぎじゃない?「ひろゆき」「ゆたぽん」「堀江貴文」「かじさっく」を ニュースで客に見させる目的って何なの?次の表は、とある一週間「アメリカ」「イギリス」「日本」の...

ブラウザに見せかけるため、色々なヘッダを追加したけど駄目だった。

 

トークンは毎回ユニークなものが発行されるが、Javascriptが実行可能なクローラーでないとほしいデータが取れないような仕組みになってるんじゃないかな?

 
 

そして、このブログをYahooの関係者が読んでいるじゃない……?

アクセス数は数十人しかいないけどさwww

ローカルPCでWebスクレイピングを行いファイル転送する

契約しているさくらインターネットのレンタルサーバではChromeのインストールやGUI操作は不可能だ。

そのため、ローカルPCでSeleniumを使ってWebスクレイピングを行い、取得したデータをレンタルサーバーにSFTPでアップロードしてみる。

これは最終手段。

この方法は使いたくなかった。

何のためにサーバー契約しているのさ……。

Selenium使ってWebスクレイピング

Seleniumを使ったWebスクレイピングはググると大量に出てくる。

特に難しくはない。

ただ、昔はPHPで実装していたのでHTML生成部分もPythonで書き換えることになってしまった。

結果、当時400行程度で書いたPHPのソースコードはPythonで250行程度で書き直すことができた。

Pythonは優れているね。

幾つかの記載方法でPHPからの移植で困ってググる必要があったので載せておく。

python多次元リストをsort(並べ替え)する方法

これはLambda式を使えば簡単に記載することができる。

結果は次のようになる。

python3 多次元配列での要素追加方法

PHPではarray_multisortを使って記載していた。

実は、これをPythonで書く場合には非常に容易に書くことができる。

結果は次のようになる。

Proxy経由してローカルPCからリモートサーバーへファイル転送

Webスクレイピングが完了し index.html ファイルを作成できたら、次にファイルをレンタルサーバに転送する。

方法は以前調べたことがある。

SSH&SOCKSプロキシを通してリモートサーバ接続・処理をPython自動実行
楽天アフィリエイトの料率改正のメールが届いた。【重要なご案内】楽天アフィリエイトの料率について(2021/01/28)このたび、楽天アフィリエイトの一部の成果対象サービスにつきまして2021年4月1日(木)より商品ジ...

Proxyを利用する場合にはSOCKS5を使った socket通信も対応が必要。

実行してみるとレンタルサーバに転送することができた。

はい、週末終了……。

まとめ

この方法をタスクマネージャーによって定期的に呼びだせば、今まで通りのサービスを提供することはできる。

結局Seleniumを利用するしか方法が思いつかなかった。

他によい方法は無いのかな……

タイトルとURLをコピーしました