やはり普及してはならないアンチスクレイピングサービス
この記事は、クローラー/Webスクレイピング Advent Calendar 2016 に参加させていただいています。昨日はL_e_k_oさんによるSelenium IDEで作ったテストをCLIで動かす方法でした。
さて、去年のspaceprobeさんのこの記事を読んで考えました。
少し角度は違いますが、Tim Berners-Lee先生も「オープンデータも悪い人に加工されて不正確になったらマズいよね」とおっしゃっています。
<div class="cls1">製品1、価格1、電話番号1</div>
<div class="cls2">製品2、価格2、電話番号2</div>
sample.css
.cls3 {
cls3のページにアクセスした人は人間じゃないbot(*1). この製品3にアクセスした人には、次のページからところどころ価格を2割あげたデータを提示したり、電話番号を1ずらして表示すればいいんですね? それにそもそも製品3なんて世の中に実在しないんだけど、あなたそのデータどこから持ってきました?
中華人民共和国大使館のスクレイピング
この記事は、クローラー/Webスクレイピング Advent Calendar 2016 に参加させていただいています。 昨日の記事は、anoChick さんによる AWS上にサーバレスな汎用クローラを展開するぞ。 - あのにのに でした。
--
happyou.infoでは、中国政府のサイトをスクレイピングしています。
今回はその中でも中国政府の大使館や領事館のウェブサイトの更新情報を検出しRSS化しましたので公開したいと思います。
Q: なぜ中国大使館のスクレイピングを行うのか?
1.意味があるため
中国政府が対外的に発信する情報を網羅的に収集することには社会的に意味があると考えらるため。
2.ウェブサイトがマシンリーダブルでないため
中国政府のウェブサイトはマシンリーダブルでないため。RSSはなく、TwitterやFacebookの利用も体系的には行われていないため。
3.happyou.infoが得意な分野であるため
たとえば、日本の東京にある中国大使館のサイトは、アメリカのワシントンにある中国大使館のサイトとはデザインが異なります。イタリアの大使館サイトはまた別のデザインです。
Embassy of the People's Republic of China in the United States of America
このようなサイトが 言語別にわけると約500近くあります。 これらのサイトを手作業でスクレイピングするのは大変ですが、happyou.infoは全て自動で収集することが出来るためです。*1
---
これが入力元のサイト一覧です。
そして、これが現時点でのスクレイピングの結果です。
All Chinese embassies and consulates
- 諸事情により中国語、英語、日本語以外の言語については生成していません。
- 更新の半分くらいは 中国の外交部(日本の外務省に相当する)のプレスリリースがそのまま書き写されています。中国本国のリリースを中国語と現地の公用語で発信しているコピペです。
- 残りは2国間関係のニュース、大使の講演や発言、中国関連のイベントの告知など。
- 継続して収集しているのでわかるのですが、2016年の7月あたりを最後に、南シナ海に関する情報発信を発信を止めちゃったようです。
- 在北朝鮮大使館の英語版のサイトの更新が止まっていて物悲しい。私は読めないけれど韓国語版も止まってる。仕事しろ同盟国じゃろ…
一つ一つのニュースはあまり面白くなく、とても意味があるとは思えません。しかしこれらを蓄積して分類しアーカイブ化すると価値が生まれることを知っています。
中国政府のスクレイピングで、クローラの多言語化にかなり対応できたのではないかと考えています。今回の成果をもとに去年失敗したNASDAQ全銘柄スクレイピングにもう一度挑戦してみるつもりです。
以上です。
*1:少なくとも民間レベルでは他に存在しないと考えています。
髙見澤將林 前内閣官房副長官補「変わるアメリカ・変わらないアメリカ 米大統領選」(15) 2016.11.16
非常に勉強になったためブログに残そうと思います。 日本の官僚は凄いですね…
Wikitable
Wikitables - Convert Wikipedia tables to CSV file
URLを入力すると、Wikipediaのページにあるテーブルの内容をCSVファイルに変換する。
- 1つのarticleに1テーブルが存在する場合は綺麗にデータが取れる。e.g. Parsed tables from https://simple.wikipedia.org/wiki/List_of_countries_by_population
- しかし1つのarticleに複数のテーブルがある場合、そのデータが何を指すのか機械的に判断出来ない。e.g. Parsed tables from https://simple.wikipedia.org/wiki/Crime_in_Russia
Parsed tables from https://ja.wikipedia.org/wiki/%E5%AE%AE%E5%9F%8E%E7%9C%8C
Wikipediaですらこの状態。世に多数存在する雑なウェブページからテーブルを抽出したところで、そのデータが何なのか判断できない。なんとかしてテーブルに適切なタイトルをつけることが出来ないだろうか?
道は遠い。
クローラの不具合が直る
本当に長い間調査をし続けて、ようやくhappyouのクローラの不具合が治ったことを記念し、久しぶりにブログを書く。
今後、happyouをスケールアウトさせることを考えたとき、今のボトルネックは明らかにDB.細かな最適化をおこなったところで多寡が知れている。
(1)次はDBの垂直分割を行いたい。教科書的には、更新系と参照系にわけるのだろうがそれは参照の比率の高いWebシステムの場合。happyouのクローラは約1:1なわけだからあまり効果はないと思う。
(2) または適当なKVS。で、Valueがサイト丸ごと(おぉ)。その評価を行わなければならない。パフォーマンスは高くなくてもよいので、できるだけ少ないメモリで動かしたい。
目的は何で、妥協できる点はどこなのか?そこを明確にしなければならない。
自らを制約するものは何もない。 どんどんやらかそう。