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
Ansibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみた
KeijiUehata1
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
シリコンバレーでエンジニア就職する前に知りたかったこと
シリコンバレーでエンジニア就職する前に知りたかったこと
Tatsuya Nanjo
わかりづらいS3クロスアカウントアクセス許可に立ち向かおう
わかりづらいS3クロスアカウントアクセス許可に立ち向かおう
Takashi Toyosaki
NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例
Amazon Web Services Japan
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
やってはいけない空振りDelete
やってはいけない空振りDelete
Yu Yamada
Recommended
Ansibleの最近の動向を追ってみた
Ansibleの最近の動向を追ってみた
KeijiUehata1
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
シリコンバレーでエンジニア就職する前に知りたかったこと
シリコンバレーでエンジニア就職する前に知りたかったこと
Tatsuya Nanjo
わかりづらいS3クロスアカウントアクセス許可に立ち向かおう
わかりづらいS3クロスアカウントアクセス許可に立ち向かおう
Takashi Toyosaki
NetflixにおけるPresto/Spark活用事例
NetflixにおけるPresto/Spark活用事例
Amazon Web Services Japan
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
やってはいけない空振りDelete
やってはいけない空振りDelete
Yu Yamada
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2
ozuma5119
MongoDB Oplog入門
MongoDB Oplog入門
Takahiro Inoue
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
Yuta Imai
Weaveを試してみた
Weaveを試してみた
Kazuto Kusama
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会
Satoshi Yamada
AnsibleによるInfrastructure as code入門
AnsibleによるInfrastructure as code入門
kk_Ataka
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
猫でもわかるDirectConnect.pdf
猫でもわかるDirectConnect.pdf
HirooKatoh
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
Naoyuki Yamada
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
インフラ野郎AzureチームProX
インフラ野郎AzureチームProX
Toru Makabe
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
Kouhei Sutou
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
Tetsutaro Watanabe
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
Arduinoを使ったgameboyカードリッジのdump
Arduinoを使ったgameboyカードリッジのdump
__106__
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
Web事例からみたセマンティックウェブ/野田 健夫
Web事例からみたセマンティックウェブ/野田 健夫
kurubushionline
はじめてのWeb of Things
はじめてのWeb of Things
Saki Homma
More Related Content
What's hot
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2
ozuma5119
MongoDB Oplog入門
MongoDB Oplog入門
Takahiro Inoue
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
Yuta Imai
Weaveを試してみた
Weaveを試してみた
Kazuto Kusama
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会
Satoshi Yamada
AnsibleによるInfrastructure as code入門
AnsibleによるInfrastructure as code入門
kk_Ataka
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
猫でもわかるDirectConnect.pdf
猫でもわかるDirectConnect.pdf
HirooKatoh
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
Naoyuki Yamada
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
ota42y
インフラ野郎AzureチームProX
インフラ野郎AzureチームProX
Toru Makabe
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
Kouhei Sutou
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
Tetsutaro Watanabe
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Koichiro Matsuoka
Arduinoを使ったgameboyカードリッジのdump
Arduinoを使ったgameboyカードリッジのdump
__106__
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
What's hot
(20)
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
さくらのVPSに来る悪い人を観察する その2
さくらのVPSに来る悪い人を観察する その2
MongoDB Oplog入門
MongoDB Oplog入門
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
Weaveを試してみた
Weaveを試してみた
PostgreSQL実行計画入門@関西PostgreSQL勉強会
PostgreSQL実行計画入門@関西PostgreSQL勉強会
AnsibleによるInfrastructure as code入門
AnsibleによるInfrastructure as code入門
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
猫でもわかるDirectConnect.pdf
猫でもわかるDirectConnect.pdf
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
インフラ野郎AzureチームProX
インフラ野郎AzureチームProX
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)
Arduinoを使ったgameboyカードリッジのdump
Arduinoを使ったgameboyカードリッジのdump
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
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