Node でスクレイピングしてみた、まとめ (2021.01.07)
Python ではスクレイピング出来る様にはなったけど
Node (JavaScript) では出来ない事に気づいたので
挑戦してみた
Qiita 検索 (2021.01.07)
title:スクレイピング title:node
で 33 hits
LGTM 50以上
結構古い記事もあったので、
2015年以降の下記の3選を読んでみます
-
Node.js でお手軽スクレイピング 2020 年夏
- (@otchy --- 2020年07月21日に更新)
-
Node.jsでスクレイピングするならこれが本命(たぶん)
- (@ksato9700 --- 2018年09月29日)
-
nodeでスクレイピングをしたのでライブラリ「CasperJS」と「cheerio-httpcli」の紹介
- (@s977043 --- 2017年12月25日に更新)
ケーススタディ
Node.js でお手軽スクレイピング 2020 年夏
著者 @otchy
使用 Library
Dep
- node 12.4.0
devDep
- node-fetch ^2.6.1
- jsdom ^16.4.0
node-fetch
Node.js 上で fetch を使えるようにするライブラリ
GitHub - node-fetch/node-fetch: A light-weight module that brings the Fetch API to Node.js
jsdom
HTML DOM ツリーをメモリ上に構築することが出来るライブラリ
GitHub - jsdom/jsdom: A JavaScript implementation of various web standards, for use with Node.js
サンプルは
$ npm init
$ npm install node-fetch jsdom --save-dev
先ず思った事
何故 index**.mjs** ?
.mjs ?
javascript - What is the difference between .js and .mjs files? - Stack Overflow
なるほど、ES6 module を使いたい時に .mjs を使うのか👀
.
.
.
???
全然うごかない👀👀👀
上記リンク(英語)の通り
package.json
に
"type": "module",
と入れても動かないので
const fetch = require('node-fetch');
const jsdom = require("jsdom");
で代替したら動いた!
でも何だろう?
実行時間(ランタイム)が毎回2-3秒ぐらいかかる
取得情報
fetch で http 情報を取得
res =
body と response (http status 等)
res.text でHTML 情報を取得
html =
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
...
</html>
new JSDOM(html) でDOMオブジェクトになるので見やすくなる
あとは
document.querySelectorAll('xxx')
クエリで色々探せると
著者さん (@otchy) の言う通り
スクレイピングは最終手段にしたいですね
サーバに負担かけても駄目ですし
でも1-5分に 1 Request ぐらいの
テストなら良いかな?と思いました
Python - スクレイピング頻度の安全な目安が分からない|teratail
そもそもそれ以前にサイトの規約等でスクレイピングを禁止しているということが考えられますから、そっちを気にしてください。法的にまずいことになるリスクを背負い込んでしまうでしょう。
あ、頻度よりも規約を調べた方が良かったかもしれない。。。
参考までに
👇
Webスクレイピングの注意事項一覧 - Qiita
Webスクレイピング手法を練習する為の
Webスクレイピングが合法なサイトの一覧があったら良いな、と思い探してみたら
逆に、スクレイピングが駄目なサイトまとめがありました
👇
【※絶対に自動化してはいけない】自動化禁止サイトまとめ! - Qiita
一つだけ見つけました
Webスクレイピングの練習をさせてくれるサイト
👇
これなら安心してWebスクレイピングの練習が出来ますね❗
追記 (2021.01.9)
Search engine scraping - Wikipedia
リーガル(法)について
The largest public known incident of a search engine being scraped happened in 2011 when Microsoft was caught scraping unknown keywords from Google for their own, rather new Bing service. ([18]) But even this incident did not result in a court case.
Microsoft が Google からWebスクレイピングで何かのキーワードを取得していた事がバレた事件
があったらしいですが、裁判にはならなかったらしいです
One possible reason might be that search engines like Google are getting almost all their data by scraping millions of public reachable websites, also without reading and accepting those terms. A legal case won by Google against Microsoft would possibly put their whole business as risk.
一つの考えられる原因としては、Google も同じような事をやっていて、もし上記の理由で Google が裁判に勝ってしまうと、Google も別の件で裁判に負けてしまう可能性があって、そうするとインターネットビジネス(特にサーチエンジン界隈)の大きなリスクになるから、と推測されているらしいです。
なので
用法・用量をあまり逸脱しない使い方(1~5分間に1 Request 程度)なら
Google のサーチエンジンのWebスクレイピングは、比較的安全に練習用に使える
と思います
気になったので
robots.txt file を取得する方法を明日調べてみます
明日はコレ
👇
- (@ksato9700 --- 2018年09月29日) Node.jsでスクレイピングするならこれが本命(たぶん)
- (@s977043 --- 2017年12月25日に更新) nodeでスクレイピングをしたのでライブラリ「CasperJS」と「cheerio-httpcli」の紹介