Submit Search
Upload
Lispmeetup #56 Common lispによるwebスクレイピング技法
•
1 like
•
1,427 views
Satoshi imai
Follow
lispmeetup #56 Common lispによるwebスクレイピング技法
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 14
Download now
Download to read offline
Recommended
Iocコンテナについて
Iocコンテナについて
Akio Terayama
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]
DeNA
LibreOffice Online環境の構築
LibreOffice Online環境の構築
iCRAFT Corp. (アイクラフト株式会社)
Paxos
Paxos
Preferred Networks
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
Recommended
Iocコンテナについて
Iocコンテナについて
Akio Terayama
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]
DeNA
LibreOffice Online環境の構築
LibreOffice Online環境の構築
iCRAFT Corp. (アイクラフト株式会社)
Paxos
Paxos
Preferred Networks
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
TLS, HTTP/2演習
TLS, HTTP/2演習
shigeki_ohtsu
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
Masahiko Sawada
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
Mikiya Okuno
InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
Takanori Sejima
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
さくらインターネット株式会社
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
真乙 九龍
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
Kouji Matsui
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
Kouji YAMADA
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
Lispとは何なのか - 同図像性がもたらす力とその利用法
Lispとは何なのか - 同図像性がもたらす力とその利用法
Naoya Yamashita
MQTTとAMQPと.NET
MQTTとAMQPと.NET
terurou
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
Insight Technology, Inc.
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
PHPの今とこれから2023
PHPの今とこれから2023
Rui Hirokawa
Vyatta 改造入門
Vyatta 改造入門
Masakazu Asama
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
REST API のコツ
REST API のコツ
pospome
Web事例からみたセマンティックウェブ/野田 健夫
Web事例からみたセマンティックウェブ/野田 健夫
kurubushionline
はじめてのWeb of Things
はじめてのWeb of Things
Saki Homma
More Related Content
What's hot
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
Masahiko Sawada
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
Mikiya Okuno
InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
Takanori Sejima
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
さくらインターネット株式会社
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
真乙 九龍
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
Kouji Matsui
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
Kouji YAMADA
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Masahito Zembutsu
Lispとは何なのか - 同図像性がもたらす力とその利用法
Lispとは何なのか - 同図像性がもたらす力とその利用法
Naoya Yamashita
MQTTとAMQPと.NET
MQTTとAMQPと.NET
terurou
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
Insight Technology, Inc.
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
Shingo Fukui
PHPの今とこれから2023
PHPの今とこれから2023
Rui Hirokawa
Vyatta 改造入門
Vyatta 改造入門
Masakazu Asama
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
Yoshinori Nakanishi
REST API のコツ
REST API のコツ
pospome
What's hot
(20)
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
行ロックと「LOG: process 12345 still waiting for ShareLock on transaction 710 afte...
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
InnoDBのすゝめ(仮)
InnoDBのすゝめ(仮)
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
C++ マルチスレッド 入門
C++ マルチスレッド 入門
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
Lispとは何なのか - 同図像性がもたらす力とその利用法
Lispとは何なのか - 同図像性がもたらす力とその利用法
MQTTとAMQPと.NET
MQTTとAMQPと.NET
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
PHPの今とこれから2023
PHPの今とこれから2023
Vyatta 改造入門
Vyatta 改造入門
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
REST API のコツ
REST API のコツ
Similar to Lispmeetup #56 Common lispによるwebスクレイピング技法
Web事例からみたセマンティックウェブ/野田 健夫
Web事例からみたセマンティックウェブ/野田 健夫
kurubushionline
はじめてのWeb of Things
はじめてのWeb of Things
Saki Homma
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話
ShunyoKawamoto
はじめてのWeb of Things
はじめてのWeb of Things
Saki Homma
ロボット管理プラットフォーム「 RoboticBase 」の紹介
ロボット管理プラットフォーム「 RoboticBase 」の紹介
Kazuki Urabe
[db tech showcase Tokyo 2018] #dbts2018 #A22 『最高のデータプラットフォームを、最短でつくる方法』
[db tech showcase Tokyo 2018] #dbts2018 #A22 『最高のデータプラットフォームを、最短でつくる方法』
Insight Technology, Inc.
db techshowcase 2018 最⾼のデータプラットフォームを、 最短でつくる⽅法
db techshowcase 2018 最⾼のデータプラットフォームを、 最短でつくる⽅法
Natsumi Yotsumoto
ITweekキーノート CEO玉川講演 IoTビジネス最前線
ITweekキーノート CEO玉川講演 IoTビジネス最前線
SORACOM,INC
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM,INC
PythonによるWebスクレイピング勉強会
PythonによるWebスクレイピング勉強会
淳子 土肥
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of Things
Futomi Hatano
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
Kensaku Komatsu
Bpstudy20180725
Bpstudy20180725
Shinichiro Takezaki
Lt20190129
Lt20190129
Shinichiro Takezaki
Data API + AWS = (CMS どうでしょう 札幌編)
Data API + AWS = (CMS どうでしょう 札幌編)
Yuji Takayama
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
Hironori Sekine
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
Masaaki Nabeshima
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
Kazuho Oku
bitbankフロントエンド開発について
bitbankフロントエンド開発について
Kou Matsumoto
キャバァーン! サツバツエアアイオー弐〇壱弐
キャバァーン! サツバツエアアイオー弐〇壱弐
Kei Nakazawa
Similar to Lispmeetup #56 Common lispによるwebスクレイピング技法
(20)
Web事例からみたセマンティックウェブ/野田 健夫
Web事例からみたセマンティックウェブ/野田 健夫
はじめてのWeb of Things
はじめてのWeb of Things
コピー自動生成プロダクトでDataflowを導入した話
コピー自動生成プロダクトでDataflowを導入した話
はじめてのWeb of Things
はじめてのWeb of Things
ロボット管理プラットフォーム「 RoboticBase 」の紹介
ロボット管理プラットフォーム「 RoboticBase 」の紹介
[db tech showcase Tokyo 2018] #dbts2018 #A22 『最高のデータプラットフォームを、最短でつくる方法』
[db tech showcase Tokyo 2018] #dbts2018 #A22 『最高のデータプラットフォームを、最短でつくる方法』
db techshowcase 2018 最⾼のデータプラットフォームを、 最短でつくる⽅法
db techshowcase 2018 最⾼のデータプラットフォームを、 最短でつくる⽅法
ITweekキーノート CEO玉川講演 IoTビジネス最前線
ITweekキーノート CEO玉川講演 IoTビジネス最前線
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
PythonによるWebスクレイピング勉強会
PythonによるWebスクレイピング勉強会
Embedded Webで加速するWeb of Things
Embedded Webで加速するWeb of Things
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
Bpstudy20180725
Bpstudy20180725
Lt20190129
Lt20190129
Data API + AWS = (CMS どうでしょう 札幌編)
Data API + AWS = (CMS どうでしょう 札幌編)
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
ストリーミング視聴解析の基本とその応用 IPv4・IPv6デュアルソース
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
bitbankフロントエンド開発について
bitbankフロントエンド開発について
キャバァーン! サツバツエアアイオー弐〇壱弐
キャバァーン! サツバツエアアイオー弐〇壱弐
More from Satoshi imai
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
Satoshi imai
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Satoshi imai
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
Satoshi imai
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Satoshi imai
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Satoshi imai
Lispmeetup48 cl-online-learningによる文書分類
Lispmeetup48 cl-online-learningによる文書分類
Satoshi imai
Lispmeetup #45 Common Lispで音声合成
Lispmeetup #45 Common Lispで音声合成
Satoshi imai
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Satoshi imai
Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介
Satoshi imai
More from Satoshi imai
(9)
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup #73 Common Lispで関係データ学習-スパース非負値テンソル分解の実装
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup #50 cl-random-forest: Common Lispによるランダムフォレストの実装
Lispmeetup48 cl-online-learningによる文書分類
Lispmeetup48 cl-online-learningによる文書分類
Lispmeetup #45 Common Lispで音声合成
Lispmeetup #45 Common Lispで音声合成
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lispmeetup #39 MGLの紹介: Common Lispによるディープラーニング
Lisp meetup #29 cl-online-learningの紹介
Lisp meetup #29 cl-online-learningの紹介
Lispmeetup #56 Common lispによるwebスクレイピング技法
1.
COMMON LISPによる WEBスクレイピング技法 SATOSHI IMAI Created:
2017-09-25 Mon 19:26
2.
1 世はまさにビッグデータ解析時代 データをどう集めるかが問題 自前のデータを集めるのは大変 Web上に公開されているデータを半自動的に収集する ロボットを作る 日本の著作権法ではデータ解析目的の複製はOK サイトのルート直下にあるrobots.txtに従おう アクセス頻度は常識的な範囲で
3.
2 WEBスクレイピングとは Webをクローリングし、必要な情報を切り出すことでデータ を収集すること APIが用意されているものは素直に使おう Twitter、FacebookなどはOAuth認証が必要
4.
3 WEBスクレイピングに必要なもの HTTPクライアント dexador、drakma HTML/XMLパーサ plump CSSセレクタ clss OAuth認証 (TwitterなどのAPIを使う場合) cl-oauth
5.
4 日経新聞から現在の日経平均株価 を取得 (ql:quickload :dexador) (ql:quickload
:plump) (ql:quickload :clss) (ql:quickload :cl-ppcre) (defparameter article-html (dex:get "http://www.nikkei.com/markets/kabu/")) (defparameter parse-tree (plump:parse article-html)) (defparameter sub-tree (aref (clss:select "span.mkc-stock_prices" parse-tree) 0)) (print (plump:text (aref (plump:children sub-tree) 0)))
6.
4.1 同じことをPYTHONでやろうとすると import urllib.request from
bs4 import BeautifulSoup url = "http://www.nikkei.com/markets/kabu/" response = urllib.request.urlopen(url) data = response.read() soup = BeautifulSoup(data, "html.parser") span = soup.find_all("span") nikkei_heikin = "" for tag in span: try: string_ = tag.get("class").pop(0) if string_ in "mkc-stock_prices": nikkei_heikin = tag.string break except: pass print(nikkei_heikin)
7.
5 ロイターの記事から本文を取得 (defparameter article-html
(dex:get "http://jp.reuters.com/article/idJPL3N0U325520141219")) (defparameter body-class (aref (nth-value 1 (ppcre:scan-to-strings "(ArticleBody_body_.*?)"" article-html)) 0)) (defparameter parse-tree (plump:parse article-html)) (defparameter sub-tree (aref (clss:select (format nil ".~A" body-class) parse-tree) 0)) (defun node-text (node) (flet ((cat (strs) (reduce (lambda (s1 s2) (concatenate 'string s1 s2)) strs))) (let ((text-list nil)) (plump:traverse node (lambda (node) (push (plump:text node) text-list)) :test #'plump:text-node-p) (cat (nreverse text-list))))) (print (node-text sub-tree))
8.
6 連番でない画像を上から順番にダ ウンロード 連番ならこうすればいい wget http://example.com/H1000{00..99}.JPG 連番でなく、ページの特定の場所にあるような画像ならパ ースが必要 例:
http://logofaves.com/
9.
6.1 連番でない画像を上から順番にダウンロー ド(2) .boxesクラスの部分木を取ってきて、さらにIMGタグを探し、 URLでフィルタをかける (defparameter article-html
(dex:get "http://logofaves.com/")) (defparameter parse-tree (plump:parse article-html)) (defparameter sub-trees (clss:select "img" (aref (clss:select ".boxes" parse-tree) 0))) (defparameter urls (remove-if-not (lambda (url) (cl-ppcre:scan "^http://logofaves.com/wp-content/uploads/" url)) (map 'list (lambda (node) (gethash "src" (plump:attributes node))) sub-trees))) (loop for i from 0 for url in urls do (dex:fetch url (format nil "/tmp/logo-~3,'0d.jpg" i)))
10.
7 APIから収集 cl-oauthを使ってTwitterのAPIから取得する
11.
8 CL-OAUTHでOAUTH1.0認証 認証の流れ コンシューマトークンを作る それを認証サーバに送りリクエストトークンを取得する 認証用URLにアクセス、ユーザアカウントでログイン コールバックURLにGETパラメータ付きでリダイレクトされ る アクセストークンを作る
12.
9 コールバックURLに指定するために NINGLEでサーバを立てる ningleは軽量ウェブアプリケーションの一つ ページは単なるLispの関数 ここでアクセストークンを設定する
13.
10 CL-OAUTH越しにTWITTER APIにア クセスする JSONデータが得られるのでcl-jsonでパース ツイートやユーザLispの構造体に入れる
14.
11 おわり ありがとうございました
Download now