Open8

Node でスクレイピングしてみた、まとめ (2021.01.07)

英大研究員H英大研究員H

Python ではスクレイピング出来る様にはなったけど
Node (JavaScript) では出来ない事に気づいたので

挑戦してみた

英大研究員H英大研究員H

Qiita 検索 (2021.01.07)

title:スクレイピング title:node で 33 hits

LGTM 50以上

結構古い記事もあったので、
2015年以降の下記の3選を読んでみます

英大研究員H英大研究員H

ケーススタディ

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

英大研究員H英大研究員H

サンプルは

気象庁 | 週間天気予報: 東京都

$ 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秒ぐらいかかる

英大研究員H英大研究員H

取得情報


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')

クエリで色々探せると

英大研究員H英大研究員H

著者さん (@otchy) の言う通り

スクレイピングは最終手段にしたいですね
サーバに負担かけても駄目ですし

でも1-5分に 1 Request ぐらいの
テストなら良いかな?と思いました

Python - スクレイピング頻度の安全な目安が分からない|teratail

そもそもそれ以前にサイトの規約等でスクレイピングを禁止しているということが考えられますから、そっちを気にしてください。法的にまずいことになるリスクを背負い込んでしまうでしょう。

あ、頻度よりも規約を調べた方が良かったかもしれない。。。

参考までに
👇
Webスクレイピングの注意事項一覧 - Qiita


Webスクレイピング手法を練習する為の

Webスクレイピングが合法なサイトの一覧があったら良いな、と思い探してみたら

逆に、スクレイピングが駄目なサイトまとめがありました

👇

【※絶対に自動化してはいけない】自動化禁止サイトまとめ! - Qiita


一つだけ見つけました

Webスクレイピングの練習をさせてくれるサイト

👇

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スクレイピングは、比較的安全に練習用に使える
と思います