Python+Seleniumで自動実行(Yahooコメント収集を並列で)

スポンサーリンク

Webスクレイピング(Scraping)とは、Webサイトから任意の情報を抽出、整形、解析する技術のこと。

私は、この言葉が流行していない2001年頃から、CGI/PHPを使ってベンチャー企業でマッシュアップサービスを作っていた。

マッシュアップ

他者がWebサーバを通じて提供するソフトウェア機能を積極的に再利用することによって、自らのWebアプリケーションを構築すること

初めてのWebスクレイピング業務は、別サイトに書かれていた大型デパートの「催し物」「イベント」情報を自動的に取得して、地元商店街ポータルサイトの「what’s new」を更新すること。

2002年、大学生時代に作った「マイ・セトラタウン」。

マイ・セトラタウン

今でも好んでWebスクレイピングを使ったサービスを作っている。

 

記事のコメントに偏向を感じ、ブラウザのプラグイン目的で作った「Yahooニュースに投稿したユーザランキング」。

Yahoo!ニュースのコメント欄の一覧化サイト作成
2010年12月12日(日) Yahoo!ニュースのコメント欄の一覧化Pythonを内部で使って新しいWebサービスを作りました。Yahoo!ニュースにコメントしたユーザの「私もそう思...

遊びまくっていた時代、催し物を逃すまいとTwitterやwebを自動徘徊して生成される「都内週末イベント情報」。

twitterをParseして日々のイベントカレンダー情報サイト作成
2011年10月27日(木) twitterでイベント情報取得サイト会社の後輩が「広告収入」や「アフィリエイト」に関して質問してくるので教えてました。半年経過して、、、彼は月10万円稼ぐようになりました・・・...

そして、昨年作った「千葉/東京湾の釣れている魚の統計データ」。

千葉県内湾(東京湾)の年間釣魚グラフ作成(市原市海づり施設より)
新年度になり、やる気が出ないので調査が進まず、日記の更新が辛くなってきた……。最近では記事を投稿した瞬間から次の日記内容に頭を悩ましている。RSS登録者数13というゴミサイトなのに、胃を痛めて日記更新って……何してるんだろ…...

 

が、

 

このサービスは継続的な運用が非常に大変……。

 

相手のサイトが仕様・デザインを変えた

 

場合には、それに合わせた追従が必要となる。

Twitterのサイトを使ったカレンダーサービスは、ツイッター社の度重なるWebスクレイピング禁止の仕組み導入に負けて、サイトは閉鎖した。

スポンサーリンク

Yahooコメントの仕様が変わった

Yahooも仕様変更を毎年数回してくる。

さすがにメンテナンスだから都度日記にはしてないけど。

動的AjaxページからSelenium無しでWebスクレイピング方法
Yahoo!ニュースって「エンタメ」に偏りすぎじゃない?最近は通常のニュース欄の下に画像つきで芸能人ニュース(YouTuber含む)が並ぶまでになったようだ。「ひろゆき」「ゆたぽん」「堀江貴文」「かじ...
SSH&SOCKSプロキシを通してリモートサーバ接続・処理をPython自動実行
楽天アフィリエイトの料率改正のメールが届いた。【重要なご案内】楽天アフィリエイトの料率について(2021/01/28)このたび、楽天アフィリエイトの一部の成果対象サービスにつきまして2021年4月1日(木)より商品ジ...

Webスクレイピングのサイトを12年間メンテナンスし続けてるが、そろそろ辛い。

何よりアクセス数が一桁/日だし、有限のWeb資源の無駄遣いしてるわ。

 

SDGs的にも無駄だよね。

 

で、今回の仕様変更はユーザを特定するURL。

 

以前は、こんなURLだったのに、

news.yahoo.co.jp/profile/id/YhOfa46Ka2llqZeygvQQQA–/comments

全然別のURLに変わってしまった……。

news.yahoo.co.jp/users/kNBjnynHaIpEZ5XRFicMX2hVvgbpbzg3Kpjb-L3VVlyQnu3b00

 

理由は分からないけど、2022年11月中旬よりYahooコメント投稿に電話番号が必須になるからかな?

【重要なお知らせ】コメント投稿における携帯電話番号の設定の必須化について
いつもYahoo!ニュースをご利用いただきありがとうございます。このたび、コメント欄をより安心してご利用いただき、コメント欄における言論空間の健全化を目指すため、コメント投稿時において携帯電話番号の設...

 

私のサイトの差別化は、12年間のWebスクレイピングにより膨大なユーザーのデータベースを保有していた事。

今回のYahooの仕様変更により、一からユーザ情報を入手必要となってしまった……。

 

どのように再度ユーザーURLを取得するか?

以前はYahooユーザ名をGoogle検索を使って収集していた。

が、新仕様のYahooユーザ名はGoogleサイト上に一件もヒットしない……。

これもYahooが裏で何かしてるんじゃないの?

 

仕方ないので、Yahooの記事をクローリングして、コメントしたユーザ名を抽出していく。

クローリング

Web上をプログラムで巡回すること(巡回してなにかをすること)

 

で、結局、Seleniumを使うことになった。

Selenium

Web ブラウザの操作を自動化するためのフレームワーク

で、各ジャンル毎のニュースに対してコメントしてるユーザを取得してみたら60分かかった。

……長い。

Python+Seleniumで自動実行を行う時に並列で回す

これは備忘録。

今度やってみよう。

Python+Seleniumで自動実行を行う時に並列で回すサンプル - Qiita
この記事は何? Seleniumを使って並列でwebdriverをぶん回してやりたいと思った時のサンプルです。(例えば自社のサービスに手操作と同じルーチンで大量データを作成したい場合など) 巷のSeleniumHowtoは単一プ...

おわりに

結局 万単位のユーザ情報をゲットしてたのに1800件だけになっちゃった……。

自身で利用するサービスであれば更新したくなるけど、このランキングは まったく役に立ってない。

単なる技術的な戦い目的で更新してるだけだな。

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