Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
53
Help us understand the problem. What is going on with this article?
@amanekey

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

More than 1 year has passed since last update.

はじめに

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

スクレイピングする際に気をつけなければならないことの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の対象になりやすい、というのは確実にいえる。

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

まとめ

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

53
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
53
Help us understand the problem. What is going on with this article?