Help us understand the problem. What is going on with this article?

スクレイピングがバレてないか確認できるツールを作った話

はじめに

皆さん、クローリング/スクレイピングしてますか? してますね?(威圧確認

スクレイピングする際に気をつけなければならないことの1つに「BANされないような挙動をする」がある。

といっても、UA偽装やIP分散など経験のある人には共通認識ですが、慣れないうちだと結局何に気をつけるべきかあまりわからないと思う。

加えて、最近ではJavascriptが実行可能なクローラーでないとほしいデータが取れないサイトも増えてきており、
puppeteerで対応できるものの、逆にJS側でクローラーかどうか判別されやすくなってしまった。

と、いうことで、スクレイピングする際に、クローラーであることをなるべく隠蔽できているか確認できるツール、「スクレイピング確認くん」を作った。

スクレイピング確認くん https://scrape.turai.work

screenshot-scrape.turai.work-2018.12.02-22-38-20.png

なにができるの

このツールでは、

  • User-Agent
  • Accept-Language
  • リモートホスト
  • Javascriptの実行可能有無
  • スクリーンサイズ
  • ウィンドウサイズ

を取得して通常のアクセスと似たアクセスかどうかを一発で確認できる

puppeteerでアクセスした場合

特にオプションを指定パターン。Accept-Languageが含まれていない、User-Agentに「HeadlessChrome」が含まれてしまっている、ウィンドウサイズがおかしい(小さすぎる)などがわかる。

result.png

ちなみに確認コードは以下

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://scrape.turai.work/');
  await page.screenshot({path: 'result.png', fullPage: true});
  await browser.close();
})();

curlでアクセスした場合

キャプチャ非対応でも、 http://scrape.turai.work/json にアクセスするとJSON形式で返却するので確認できる。(jqはJSONの整形に使ってるだけなので必須ではない)

curl https://scrape.turai.work/json? | jq .
{
  "ua": {
    "name": "User-Agent",
    "status": "NG",
    "value": "curl/7.58.0"
  },
  "accept_language": {
    "name": "Accept-Language",
    "status": "NG",
    "value": null
  },
  "remote_host": {
    "name": "Remote-Host",
    "status": "NG",
    "value": "xxx.xxx.xxx.xxx"
  }
}

この場合はUA,Accept-Language未設定なのに加えて、AWSからアクセスしたのでリモートホストをXにしている。

別にAWSとかGCPからのアクセスがNGとは一概にいえないが、普段のアクセスでは本来ありえないので、やはりBANの対象になりやすい、というのは確実にいえる。

確認先で説明もつけたのでよかったら見てほしい。

まとめ

アクセス先に迷惑をかけない範疇で楽しいスクレイピング生活を!(

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした