Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
ウェブから情報をあつめる
Report
Shuhei Iitsuka
Follow
UX Engineer at Google
Dec. 11, 2012
•
0 likes
11 likes
×
Be the first to like this
Show More
•
10,710 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Check these out next
WordPressで投稿記事情報の取得方法
regret raym
Pysparkで始めるデータ分析
Tanaka Yuichi
Data Scientist Workbench - dots0729
s. kaijima
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
Yahoo!デベロッパーネットワーク
はじめてのモバイルウェブアプリ 3 SPARQLハンズオン オープンデータ水位ゲーム
Taisuke Fukuno
Shizupptx
Kazufumi Ohkawa
HTMLからの本文抽出
Lintaro Ina
JavaScriptことはじめ
Yuki Ishikawa
1
of
33
Top clipped slide
ウェブから情報をあつめる
Dec. 11, 2012
•
0 likes
11 likes
×
Be the first to like this
Show More
•
10,710 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
NAVER まとめを題材に、ウェブから情報を集めるクローラ、スクレイパーの設計について
Shuhei Iitsuka
Follow
UX Engineer at Google
Advertisement
Advertisement
Advertisement
Recommended
クローラを作る技術と設計 (毎週のハンズオン勉強会資料)
ひとし あまの
13.4K views
•
17 slides
⑲jQueryをおぼえよう!その5
Nishida Kansuke
1.6K views
•
60 slides
Webスクレイピング用の言語っぽいものを作ったよ
Takaichi Ito
16.4K views
•
40 slides
最強オブジェクト指向言語 JavaScript 再入門!
Yuji Nojima
373.7K views
•
194 slides
What's new! TwentyThirteen + WordPress3.6
Takashi Uemura
20.2K views
•
57 slides
Drupal、group、quiz、webformを利用したeラーニングサイト「sqt」
Kenji Shirane
409 views
•
58 slides
More Related Content
Slideshows for you
(20)
WordPressで投稿記事情報の取得方法
regret raym
•
27.8K views
Pysparkで始めるデータ分析
Tanaka Yuichi
•
6.5K views
Data Scientist Workbench - dots0729
s. kaijima
•
1.8K views
1000台規模のHadoopクラスタをHive/Tezアプリケーションにあわせてパフォーマンスチューニングした話
Yahoo!デベロッパーネットワーク
•
6.9K views
はじめてのモバイルウェブアプリ 3 SPARQLハンズオン オープンデータ水位ゲーム
Taisuke Fukuno
•
2.5K views
Shizupptx
Kazufumi Ohkawa
•
3.1K views
HTMLからの本文抽出
Lintaro Ina
•
9.4K views
JavaScriptことはじめ
Yuki Ishikawa
•
16.9K views
実践スクレイピング
だいすけ ふるかわ
•
32.5K views
これからのpre_get_postsの話をしよう
Hishikawa Takuro
•
66.5K views
LODを使ったサイトとプラグインを作ってみた話[WordBenchOsaka]
Hidetaka Okamoto
•
651 views
WordPressの常識をくつがえす超簡単テーマ doshirouto2014 を作ったのでこれでテーマを理解しよう!
Takashi Uemura
•
3.8K views
elasticsearch-hadoopをつかってごにょごにょしてみる
Katsushi Yamashita
•
15.1K views
Rawler C#用のWebスクレイピングフレームワーク
Takaichi Ito
•
2.8K views
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
Taisuke Fukuno
•
4K views
WordPressの常識をくつがえす超簡単テーマ"doshirouto"を作ったのでこれでテーマを理解しよう!
Takashi Uemura
•
22.3K views
WebデザイナのためのjQuery入門。
Yossy Taka
•
3.5K views
基幹業務もHadoop(EMR)で!!のその後
Keigo Suda
•
2.1K views
WordPressテーマ作成
Takami Kazuya
•
3.4K views
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第2回
yamahige
•
1.6K views
Viewers also liked
(20)
PythonによるWebスクレイピング入門
Hironori Sekine
•
105.5K views
Complenet 2017
tnoulas
•
569 views
Aprendizaje Basado en Proyectos. ABP
Coral Elizondo
•
78K views
las tres r de la ecologia
dulcecandymiss
•
9.8K views
Love and Happiness: Building Community with Smart Communications
Farra Trompeter, Big Duck
•
981 views
The Top 10 Facebook and Twitter Advertising Hacks of All Time - Larry Kim's P...
Internet Marketing Software - WordStream
•
244K views
Anemoneによるクローラー入門
Tasuku Nakano
•
24.4K views
What is Deep Learning?
NVIDIA
•
26.3K views
Payments Trends 2017
Capgemini
•
18.7K views
B2B Marketing and The Power of Twitter
Steve Yanor
•
10.1K views
The Marketer's Guide To Customer Interviews
Good Funnel
•
18.2K views
ELSA France "Teaching is us!"
Adrian Scarlett
•
48.6K views
The Be-All, End-All List of Small Business Tax Deductions
Wagepoint
•
19.1K views
Rubyで作るクローラー Ruby crawler
Takuro Sasaki
•
38.1K views
Webクローリング&スクレイピングの最前線 公開用
Lumin Hacker
•
78.3K views
5 questions to answer before opening an E-shop!
Sendato
•
120 views
言語モデル入門 (第二版)
Yoshinari Fujinuma
•
8.3K views
iQONを支えるクローラーの裏側
Takehiro Shiozaki
•
9.7K views
RUNNING Smalltalk - 実践Smalltalk
Sho Yoshida
•
2.7K views
z/OSMF Workflow Editor Lab - Try it out on your z/OSMF system
Marna Walle
•
2.1K views
Advertisement
Similar to ウェブから情報をあつめる
(20)
かんたん Twitter アプリをつくろう
Shuhei Iitsuka
•
1.2K views
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
•
3.6K views
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
Hiroaki KOBAYASHI
•
1.2K views
データベースを使おう
Shuhei Iitsuka
•
9.9K views
かんたんキレイなウェブデザイン
Shuhei Iitsuka
•
3.5K views
Git
Shuhei Iitsuka
•
1.5K views
Microsoft azure上にwebサイトやアプリケーションを構築する方法 アドバンスド
Kazumi Hirose
•
1.8K views
今、最もイケてるPHPフレームワークLaravel4
アシアル株式会社
•
12.8K views
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
•
2.8K views
PerlとSQLのいろいろ
Takuya Tsuchida
•
5.5K views
CodeIgniterによるPhwittr
kenjis
•
9.3K views
Spring data-rest-and-spring-cloud-contract
Takeshi Ogawa
•
8.6K views
ソーシャルアプリ勉強会(第一回資料)配布用
Yatabe Terumasa
•
1.5K views
Hadoop基盤上のETL構築実践例 ~多様なデータをどう扱う?~
Sotaro Kimura
•
1.6K views
徳島OSS勉強会第四回 シラサギハンズオン 0925
Yu Ito
•
430 views
ScalaMatsuri 2016
Yoshitaka Fujii
•
7.1K views
文字コードの脆弱性はこの3年間でどの程度対策されたか?
Hiroshi Tokumaru
•
32.7K views
WordBench Kobe jQueryどうでしょう
Hishikawa Takuro
•
1.8K views
テスト駆動開発の進化
Yukei Wachi
•
20.2K views
徳丸本に載っていないWebアプリケーションセキュリティ
Hiroshi Tokumaru
•
51K views
More from Shuhei Iitsuka
(20)
Online and offline handwritten chinese character recognition a comprehensive...
Shuhei Iitsuka
•
395 views
Inferring win–lose product network from user behavior
Shuhei Iitsuka
•
551 views
バリエーションの提示がもたらす長期的効果に着目したウェブサイト最適化手法 @第31回人工知能学会全国大会
Shuhei Iitsuka
•
574 views
Procedural modeling using autoencoder networks
Shuhei Iitsuka
•
784 views
Generating sentences from a continuous space
Shuhei Iitsuka
•
2.1K views
ウェブサイト最適化のためのバリエーション自動生成システム
Shuhei Iitsuka
•
1.2K views
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-E...
Shuhei Iitsuka
•
959 views
Machine learning meets web development
Shuhei Iitsuka
•
710 views
Python と Xpath で ウェブからデータをあつめる
Shuhei Iitsuka
•
6.1K views
リミックスからはじめる DTM 入門
Shuhei Iitsuka
•
16.9K views
【DBDA 勉強会 2013 夏】Chapter 12: Bayesian Approaches to Testing a Point (‘‘Null’’...
Shuhei Iitsuka
•
3.1K views
Asia Trend Map: Forecasting “Cool Japan” Content Popularity on Web Data
Shuhei Iitsuka
•
1.6K views
【DBDA 勉強会 2013 夏】Doing Bayesian Data Analysis Chapter 4: Bayes’ Rule
Shuhei Iitsuka
•
6.8K views
UT Startup Gym で人生が変わった話
Shuhei Iitsuka
•
1.3K views
ウェブサイトで収益を得る
Shuhei Iitsuka
•
929 views
HTML で自己紹介ページをつくる
Shuhei Iitsuka
•
5.6K views
ウェブサービスの企画とデザイン
Shuhei Iitsuka
•
3.2K views
データベースを使おう
Shuhei Iitsuka
•
1.2K views
第3期キックオフ説明会+勉強会
Shuhei Iitsuka
•
710 views
ペルソナシナリオとプロトタイプ
Shuhei Iitsuka
•
3K views
Advertisement
Recently uploaded
(20)
【DL輪読会】Egocentric Video Task Translation (CVPR 2023 Highlight)
Deep Learning JP
•
6 views
初学者のためのプロンプトエンジニアリング実践.pptx
Akifumi Niida
•
376 views
3Dプリンタって いいね
infinite_loop
•
22 views
Forguncy製品概要.pptx
フォーガンシー
•
0 views
量子論.pdf
hiro150493
•
5 views
20230523_IoTLT_vol99_kitazaki_v1.pdf
Ayachika Kitazaki
•
107 views
留信网认证可查【皇家霍洛威学院文凭证书毕业证购买】
32lkhng
•
2 views
①【阳光海岸大学毕业证文凭学位证书|工艺完美复刻】
vgh215w
•
2 views
①【麦吉尔大学毕业证文凭学位证书|工艺完美复刻】
love445ds
•
2 views
☀️【卡尔顿大学毕业证成绩单留学生首选】
15sad
•
2 views
Forguncy8 製品概要 202305.pptx
フォーガンシー
•
38 views
ChatGPT触ってみた
infinite_loop
•
11 views
ペンタエリスリトール市場.pdf
HinaMiyazu
•
3 views
☀️【杜兰大学毕业证成绩单留学生首选】
2125nuh
•
2 views
Üslup ve tercüme.pdf
1Hmmtks
•
2 views
SoftwareControl.pdf
ssusercd9928
•
6 views
【DL輪読会】Flow Matching for Generative Modeling
Deep Learning JP
•
729 views
☀️【中央兰开夏大学毕业证成绩单留学生首选】
25mjhd12
•
4 views
社内ソフトスキルを考える
infinite_loop
•
40 views
Omnis
DaisukeFujita10
•
15 views
ウェブから情報をあつめる
ウェブから情報をあつめる 2012/12/11
1 UT Startup Gym
UT Startup Gym
とは? アイデアをカタチにするプログラム プロジェクト 企画から実装まで スタートアップ 2012/12/11 2 UT Startup Gym
スケジュール
Keywords: • プログラミング入門 ソーシャルウェブアプリケーション, API, Oct, 12 bot, HTML5 • プラニング リーンスタートアップ, ビジネスプラニン Nov, 12 • プロジェクトスタート グ, HTML, CSS, PHP, javascript • 開発開始 Dec, 12 • 冬季開発合宿 チーム結成, 企画, ディスカッション git, フレームワーク, MySQL, Apache • ウェブデザイン Jan, 13 • 週間報告会 シナリオ, ペルソナ, ワイヤフレーム, サイトマップ, DB スキーム • jQuery, 中間発表 Feb, 13 ゲーミフィケーション, 仮説検証, データマ イニング, アクセシビリティ • 作業会 Mar, 13 レスポンシブデザイン, プレゼンテーショ • リリース会 ン Apr, 13 2012/12/11 3 UT Startup Gym
M
D 講師(敬称略) タイトル 要素 10 13 飯塚 かんたん Facebook アプリをつくる HTML, CSS, js 21 飯塚 かんたん Twitter アプリをつくる UNIX, vim, PHP 27 川上 かんたん アンケートフォームをつくる MySQL, MVC 11 4 AWS 高山様 サーバを立てよう AWS 10 飯塚・石村 スタートアップの心構え ビジネスプラン、リーンスタートアップ 17 飯塚・佐藤 プロダクトデザイン シナリオ、ペルソナ、ワイヤフレーム 24 お休み(飯塚@ジャカルタ) 12 1 ゆーすけべー様 ウェブサービスの企画のコツ 企画プロセス、ウェブサービス運用 8 飯塚 ウェブから情報をあつめる クローラ, XPath, 正規表現 15 プロジェクトキックオフ アンカンファレンス 22 ハッカソン 1 12 石村 ユーザがハマるアプリデザイン ゲーミフィケーション 19 飯塚 かんたん・きれい・便利なウェブデザイン Twitter Bootstrap, Responsive Design, LESS 26 未定 Git 2 2 斎藤 アニメーションをつくる javascript, jQuery 9 ゲスト ゲストスピーカー 16 中間発表 3 作業会 4 13 プレゼンテーション 20 リリース会 2012/12/11 4 UT Startup Gym
目次 • イントロダクション • ソースコードを取ってくる
– PHP file_get_contents($url) • HTML を解析する – 正規表現 – XPath • 自動的で動かす – cron 2012/12/11 5 UT Startup Gym
クローラってなに? • 自動的にウェブページにアクセスし、データを
収集するプログラム。ロボットとも言う。 • これを走らせることを「クローリング」とい う。 • スクレイピング=HTMLを解析して、必要な情 報を抜き出すこと。 2012/12/11 6 UT Startup Gym
クローラとウェブアプリ • いきなり充実したコンテンツのサイトができる • 広告をつければ「サーバに稼いでもらう感覚」を
手っ取り早く味わうことができる 2012/12/11 7 UT Startup Gym
Spysee 2012/12/11
8 UT Startup Gym
Bijostagram 2012/12/11
9 UT Startup Gym
ソースコードを取ってくる • とりあえず名言ページを題材に
file_get_contents() の使い方に慣れる 2012/12/11 10 UT Startup Gym
ソースコードを取ってくる1 <? $url = "http://www.meigensyu.com/quotations/view/random"; $html
= file_get_contents($url); echo $html; 2012/12/11 11 UT Startup Gym
ソースコードを取ってくる2 <? $url = "http://www.meigensyu.com/quotations/view/random/"; $html
= file_get_contents($url); preg_match('/<div class="text">(.+)</div‟>/', $html, $match); var_dump($match); 2012/12/11 12 UT Startup Gym
正規表現 • 任意の文字列に対して、指定したパターンに
マッチしているかを試す • パーサーではないので、構造を持ったデータに は弱い • 構造を持たないフラットなデータに良い。 – トークナイザ – バリデータ 2012/12/11 13 UT Startup Gym
正規表現の例 • ^d+$ →
1234 とか 39843452 にマッチ。12 324 とか ff0000 とかにはマッチしない。 – ^: 行頭 – d: 半角数字 – +: 1回以上の繰り返し – $: 行末 • ^[A-Z]*(d+)$ → 13 とか ADB1132 にマッチ。し かも、13 とか 1132 が抜き出せる。 – *: 0回以上の繰り返し – (): 抜き出す 2012/12/11 14 UT Startup Gym
HTML を解析する1 • NAVER
まとめの記事ページから、写真の URL だけを収集する • とりあえず単一ページで動作 2012/12/11 15 UT Startup Gym
HTML を解析する1 <? $url =
"http://matome.naver.jp/odai/2133765614325689001"; $res = file_get_contents($url); $dom = @DOMDocument::loadHTML($res); $xml = simplexml_import_dom($dom); $imgs = $xml->xpath("//img[@class='MTMItemThumb']"); foreach ($imgs as $img) { echo $img["src"]."n"; //echo "<img src='".$img["src"]."'>n"; } 2012/12/11 16 UT Startup Gym
XPath • XML や
HTML の任意の位置を取得するための式 – プログラミング言語に依らない • XPath エンジンがあれば、XPath を指定して HTML 上の値を簡単に持って来ることができる 2012/12/11 17 UT Startup Gym
XPath の例 • //img[@class=„MTMItemThumb‟]
→class属性の値が„MTMItemThumb‟の img 要素 – // は /html/body の短縮形 – @ は属性のこと (@id=, @src=, @href= etc.) • 他にも、様々な表現方法がある 2012/12/11 18 UT Startup Gym
ブラウザで表示する 生成された HTML ファイルをブラウザで表示してみよう。 //echo
$img[“src”].“n”; echo “<img src=„”.$img[“src”].“‟>n”; $ php hoge.php > piyo.html 2012/12/11 19 UT Startup Gym
HTML を解析する2 • 食べログの検索結果から店名とURL、食べログ
得点を取得する。 2012/12/11 20 UT Startup Gym
HTML を解析する2 <? $url =
食べログ検索結果の URL; $res = file_get_contents($url); $dom = @DOMDocument::loadHTML($res); $xml = simplexml_import_dom($dom); $shops = $xml->xpath("//li[contains(@class,'rank')]"); foreach ($shops as $shop) { $name = $shop->div[0]->div[0]->div[0]->strong[0]->a; echo "Shop Name: $namen"; echo "URL: ".$name["href"]."n"; $rank = $shop->div[2]->div[0]->p[0]->em; echo "Rank: $ranknn"; } 2012/12/11 21 UT Startup Gym
HTML を解析する3 • アルク
英辞郎 • 英単語の難度、発音を知りたい • 普通にやると、詰まる – User Agent で制限をかけている ※このコードが実行できない場合、PHP むけ cURL をインストールすること。 $ sudo apt-get install php5-curl 2012/12/11 22 UT Startup Gym
HTML を解析する3(できない) <? if (isset($argv[1]))
{ $query = $argv[1]; $res = file_get_contents("http://eow.alc.co.jp/$query/UTF-8/"); // ブラウザでは見られるのに、ソースコードを取得できない $dom = @DOMDocument::loadHTML($res); $xml = simplexml_import_dom($dom); $properties = $xml->xpath('//span[@class="label" and .= "【@】" ]/following-sibling::text()[1]'); if (!empty($properties)) { $prop_array = explode("、", $properties[0]); echo "[".$query."] レベル: ".$prop_array[0]." ヨミ: ".$prop_array[1]."n"; } else { echo "結果を取得できませんでした。正しい英単語を入力してください。n"; } } 2012/12/11 23 UT Startup Gym
HTML を解析する3(できる) <? if (isset($argv[1]))
{ $query = $argv[1]; $doc = new DOMDocument(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://eow.alc.co.jp/$query/UTF-8/"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //標準出力でなく、文字列として取得 curl_setopt($ch, CURLOPT_USERAGENT, “Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1” ); //Firefox のふりをしてアクセス $res = curl_exec($ch); curl_close($ch); $dom = @DOMDocument::loadHTML($res); $xml = simplexml_import_dom($dom); $properties = $xml->xpath('//span[@class="label" and .= "【@】" ]/following-sibling::text()[1]'); if (!empty($properties)) { $prop_array = explode("、", $properties[0]); echo "[".$query."] レベル: ".$prop_array[0]." ヨミ: ".$prop_array[1]."n"; } else { echo "結果を取得できませんでした。正しい英単語を入力してください。n"; } } else { echo "検索する英単語を入力してください。n"; } 2012/12/11 24 UT Startup Gym
HTML を解析する4 • NAVER
まとめふたたび • このままだと、1ページ目しか収集できない • 自動で次ページの収集もできないか? 2012/12/11 25 UT Startup Gym
HTML を解析する4 if (isset($argv[1]))
{ if (preg_match("/http://matome.naver.jp/odai/(d+)$/", $argv[1])) { $url = $argv[1]; $res = @file_get_contents($url); while ($res) { $data = getData($res); foreach ($data["image"] as $image) { echo "<img src='".$image["src"]."'>n"; } if (!$data["nextPage"]) { $res = null; } else { $res = @file_get_contents($url."?page=".$data["nextPage"]); } sleep(1); } } } つづく... 2012/12/11 26 UT Startup Gym
HTML を解析する4 function getData
($html) { $dom = @DOMDocument::loadHTML($html); $xml = simplexml_import_dom($dom); $result["image"] = $xml->xpath("//img[@class='MTMItemThumb']"); $pager = $xml->xpath("//div[@class='MdPagination03']"); $result["nextPage"] = null; if (!empty($pager)) { $last_anchor = $pager[0]->a[count($pager[0]->a)-1]; $current_page = $pager[0]->strong; if ($last_anchor + 1 != $current_page) { $result["nextPage"] = $current_page + 1; } } return $result; } 2012/12/11 27 UT Startup Gym
cron • 定期的にプログラムを実行 • とても簡単 •
コマンドラインで動くプログラムをその まま使える 2012/12/11 28 UT Startup Gym
cron $ vim crontab.txt #
フルパスで記述すること # 毎日 4 時 12 分に実行 12 4 * * * php /home/user/crawl_user_page.php # 毎分実行 * * * * * php /home/user/crawl_top_page.php >>/home/user/log.txt $ crontab < crontab.txt # ジョブの登録 $ crontab –l # 登録されたジョブの確認 $ crontab –e # ジョブの編集 $ crontab –r # ジョブの全消去 2012/12/11 29 UT Startup Gym
自動でプログラムを動かす <? $article = getRSS(); $res
= @file_get_contents($article->link); while ($res) { $data = getData($res); foreach ($data["image"] as $image) { echo "<img src='".$image["src"]."'>n"; } if (!$data["nextPage"]) { $res = null; } else { $res = @file_get_contents($url."?page=".$data["nextPage"]); } sleep(1); } つづく... 2012/12/11 30 UT Startup Gym
自動でプログラムを動かす function getData ($html)
{ $dom = @DOMDocument::loadHTML($html); $xml = simplexml_import_dom($dom); $result["image"] = $xml->xpath("//img[@class='MTMItemThumb']"); $pager = $xml->xpath("//div[@class='MdPagination03']"); $result["nextPage"] = null; if (!empty($pager)) { $last_anchor = $pager[0]->a[count($pager[0]->a)-1]; $current_page = $pager[0]->strong; if ($last_anchor + 1 != $current_page) { $result["nextPage"] = $current_page + 1; } } return $result; } つづく... 2012/12/11 31 UT Startup Gym
自動でプログラムを動かす function getRSS() {
$xml = simplexml_load_file("http://matome.naver.jp/feed/topic/1Luvh"); $items = array(); foreach ($xml->channel->item as $item) { $items[] = $item; } shuffle($items); return $items[0]; } 2012/12/11 32 UT Startup Gym
ワーク • 何かできそうな気がして来ませんか? • 自分が面白そうと思うサイトから情報を集めて
くる。 • 複数サイトからの情報を組み合わせていると GOOD。(マッシュアップ) 2012/12/11 33 UT Startup Gym
Advertisement