mirror of
https://github.com/ai-robots-txt/ai.robots.txt.git
synced 2025-04-04 11:03:59 +00:00
Compare commits
117 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
5b8650b99b | ||
![]() |
c249de99a3 | ||
ec18af7624 | |||
![]() |
6851413c52 | ||
![]() |
dba03d809c | ||
![]() |
68d1d93714 | ||
1183187be9 | |||
![]() |
7c3b5a2cb2 | ||
![]() |
4f3f4cd0dd | ||
![]() |
5a312c5f4d | ||
![]() |
da85207314 | ||
![]() |
6ecfcdfcbf | ||
5e7c3c432f | |||
![]() |
9f41d4c11c | ||
![]() |
8a74896333 | ||
![]() |
1d55a205e4 | ||
![]() |
8494a7fcaa | ||
![]() |
c7c1e7b96f | ||
![]() |
17b826a6d3 | ||
![]() |
0bd3fa63b8 | ||
![]() |
a884a2afb9 | ||
![]() |
c0d418cd87 | ||
![]() |
abfd6dfcd1 | ||
![]() |
693289bb29 | ||
a9ec4ffa6f | |||
![]() |
03aa829913 | ||
![]() |
5b13c2e504 | ||
![]() |
af87b85d7f | ||
![]() |
f99339922f | ||
![]() |
e396a2ec78 | ||
![]() |
261a2b83b9 | ||
![]() |
bebffccc0c | ||
![]() |
89d4c6e5ca | ||
![]() |
f9e2c5810b | ||
![]() |
05b79b8a58 | ||
![]() |
9c060dee1c | ||
![]() |
6c552a3daa | ||
![]() |
f621fb4852 | ||
![]() |
7427d96bac | ||
![]() |
81cc81b35e | ||
![]() |
4f03818280 | ||
![]() |
a9956f7825 | ||
![]() |
33c38ee70b | ||
![]() |
52241bdca6 | ||
![]() |
013b7abfa1 | ||
![]() |
70fd6c0fb1 | ||
![]() |
5aa08bc002 | ||
![]() |
d65128d10a | ||
![]() |
1cc4b59dfc | ||
![]() |
8aee2f24bb | ||
![]() |
b455af66e7 | ||
![]() |
189e75bbfd | ||
![]() |
933aa6159d | ||
![]() |
b7f908e305 | ||
![]() |
ec454b71d3 | ||
565dca3dc0 | |||
![]() |
143f8f2285 | ||
8e98cc6049 | |||
![]() |
30ee957011 | ||
![]() |
83cd546470 | ||
![]() |
ca8620e28b | ||
![]() |
b9df958b39 | ||
![]() |
c01a684036 | ||
![]() |
d2be15447c | ||
![]() |
9e372d0696 | ||
![]() |
996b9c678c | ||
![]() |
e4c12ee2f8 | ||
![]() |
3a43714908 | ||
![]() |
2036a68c1f | ||
![]() |
24666e8b15 | ||
![]() |
eb8e1a49b5 | ||
![]() |
b64284d684 | ||
![]() |
bd38c30194 | ||
![]() |
609ddca392 | ||
![]() |
37065f9118 | ||
![]() |
58985737e7 | ||
584e66cb99 | |||
![]() |
80002f5e17 | ||
![]() |
71db599b41 | ||
![]() |
e8f0784a00 | ||
![]() |
94ceb3cffd | ||
![]() |
adfd4af872 | ||
![]() |
d50615d394 | ||
![]() |
2c88909be3 | ||
![]() |
6f58ddc623 | ||
![]() |
9295b6a963 | ||
![]() |
9e06cf3bc9 | ||
![]() |
bc0a0ad0e9 | ||
![]() |
fe5f407673 | ||
![]() |
a66b16827d | ||
![]() |
3ab22bc498 | ||
![]() |
6ab8fb2d37 | ||
![]() |
7e2b3ab037 | ||
![]() |
0c05461f84 | ||
![]() |
6bb598820e | ||
![]() |
d62cab66c5 | ||
![]() |
6a359e7fd7 | ||
![]() |
38a388097c | ||
![]() |
83c8603071 | ||
![]() |
a80bd18fb8 | ||
![]() |
bdf30be7dc | ||
![]() |
4d47b17c45 | ||
![]() |
faf81efb12 | ||
![]() |
25adc6b802 | ||
![]() |
b584f613cd | ||
![]() |
b3068a8d90 | ||
![]() |
a46d06d436 | ||
![]() |
cfaade6e2f | ||
04f630f7f8 | |||
![]() |
898c8ab82d | ||
![]() |
7bb5efd462 | ||
![]() |
e6bb7cae9e | ||
![]() |
b229f5b936 | ||
![]() |
b1491d2694 | ||
![]() |
9be286626d | ||
![]() |
01993b98c3 | ||
![]() |
dc15afe847 |
21 changed files with 1099 additions and 317 deletions
|
@ -1,4 +1,4 @@
|
|||
name: Daily Update from Dark Visitors
|
||||
name: Updates for AI robots files
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * *"
|
||||
|
@ -15,13 +15,17 @@ jobs:
|
|||
pip install beautifulsoup4 requests
|
||||
git config --global user.name "dark-visitors"
|
||||
git config --global user.email "dark-visitors@users.noreply.github.com"
|
||||
python code/dark_visitors.py
|
||||
echo "Updating robots.json with data from darkvisitor.com ..."
|
||||
python code/robots.py --update
|
||||
echo "... done."
|
||||
git --no-pager diff
|
||||
git add -A
|
||||
git diff --quiet && git diff --staged --quiet || (git commit -m "Daily update from Dark Visitors" && git push)
|
||||
git diff --quiet && git diff --staged --quiet || (git commit -m "Update from Dark Visitors" && git push)
|
||||
shell: bash
|
||||
call-main:
|
||||
convert:
|
||||
name: convert
|
||||
needs: dark-visitors
|
||||
uses: ./.github/workflows/main.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
message: "Daily update from Dark Visitors"
|
||||
message: "Update from Dark Visitors"
|
19
.github/workflows/main.yml
vendored
19
.github/workflows/main.yml
vendored
|
@ -8,6 +8,10 @@ on:
|
|||
push:
|
||||
paths:
|
||||
- 'robots.json'
|
||||
- '.github/workflows/**'
|
||||
- 'code/**'
|
||||
branches:
|
||||
- "main"
|
||||
|
||||
jobs:
|
||||
ai-robots-txt:
|
||||
|
@ -18,10 +22,23 @@ jobs:
|
|||
with:
|
||||
fetch-depth: 2
|
||||
- run: |
|
||||
pip install beautifulsoup4
|
||||
git config --global user.name "ai.robots.txt"
|
||||
git config --global user.email "ai.robots.txt@users.noreply.github.com"
|
||||
php -f code/action.php
|
||||
git log -1
|
||||
git status
|
||||
echo "Updating robots.txt and table-of-bot-metrics.md if necessary ..."
|
||||
python code/robots.py --convert
|
||||
echo "... done."
|
||||
git --no-pager diff
|
||||
git add -A
|
||||
if [ -z "$(git diff --staged)" ]; then
|
||||
# To have the action run successfully, if no changes are staged, we
|
||||
# manually skip the later commits because they fail with exit code 1
|
||||
# and this would then display as a failure for the Action.
|
||||
echo "No staged changes to commit. Skipping commit and push."
|
||||
exit 0
|
||||
fi
|
||||
if [ -n "${{ inputs.message }}" ]; then
|
||||
git commit -m "${{ inputs.message }}"
|
||||
else
|
||||
|
|
21
.github/workflows/run-tests.yml
vendored
Normal file
21
.github/workflows/run-tests.yml
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
jobs:
|
||||
run-tests:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install -U requests beautifulsoup4
|
||||
- name: Run tests
|
||||
run: |
|
||||
code/tests.py
|
29
.github/workflows/upload-robots-txt-file-to-release.yml
vendored
Normal file
29
.github/workflows/upload-robots-txt-file-to-release.yml
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
|
||||
name: "Upload robots.txt file to release"
|
||||
run-name: "Upload robots.txt file to release"
|
||||
|
||||
on:
|
||||
release:
|
||||
types:
|
||||
- published
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
upload-robots-txt-file-to-release:
|
||||
name: "Upload robots.txt file to release"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Checkout"
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.release.tag_name }}
|
||||
|
||||
- name: "Upload"
|
||||
run: gh --repo "${REPO}" release upload "${TAG}" robots.txt
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
REPO: ${{ github.repository }}
|
||||
TAG: ${{ github.event.release.tag_name }}
|
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -1 +1,4 @@
|
|||
.DS_Store
|
||||
.DS_Store
|
||||
.venv
|
||||
venv
|
||||
__pycache__
|
||||
|
|
3
.htaccess
Normal file
3
.htaccess
Normal file
|
@ -0,0 +1,3 @@
|
|||
RewriteEngine On
|
||||
RewriteCond %{HTTP_USER_AGENT} (AI2Bot|Ai2Bot\-Dolma|Amazonbot|anthropic\-ai|Applebot|Applebot\-Extended|Brightbot\ 1\.0|Bytespider|CCBot|ChatGPT\-User|Claude\-Web|ClaudeBot|cohere\-ai|cohere\-training\-data\-crawler|Crawlspace|Diffbot|DuckAssistBot|FacebookBot|FriendlyCrawler|Google\-Extended|GoogleOther|GoogleOther\-Image|GoogleOther\-Video|GPTBot|iaskspider/2\.0|ICC\-Crawler|ImagesiftBot|img2dataset|ISSCyberRiskCrawler|Kangaroo\ Bot|Meta\-ExternalAgent|Meta\-ExternalFetcher|OAI\-SearchBot|omgili|omgilibot|PanguBot|PerplexityBot|Perplexity‑User|PetalBot|Scrapy|SemrushBot\-OCOB|SemrushBot\-SWA|Sidetrade\ indexer\ bot|Timpibot|VelenPublicWebCrawler|Webzio\-Extended|YouBot) [NC]
|
||||
RewriteRule !^/?robots\.txt$ - [F,L]
|
30
FAQ.md
30
FAQ.md
|
@ -1,5 +1,21 @@
|
|||
# Frequently asked questions
|
||||
|
||||
## Why should we block these crawlers?
|
||||
|
||||
They're extractive, confer no benefit to the creators of data they're ingesting and also have wide-ranging negative externalities: particularly copyright abuse and environmental impact.
|
||||
|
||||
**[How Tech Giants Cut Corners to Harvest Data for A.I.](https://www.nytimes.com/2024/04/06/technology/tech-giants-harvest-data-artificial-intelligence.html?unlocked_article_code=1.ik0.Ofja.L21c1wyW-0xj&ugrp=m)**
|
||||
> OpenAI, Google and Meta ignored corporate policies, altered their own rules and discussed skirting copyright law as they sought online information to train their newest artificial intelligence systems.
|
||||
|
||||
**[How AI copyright lawsuits could make the whole industry go extinct](https://www.theverge.com/24062159/ai-copyright-fair-use-lawsuits-new-york-times-openai-chatgpt-decoder-podcast)**
|
||||
> The New York Times' lawsuit against OpenAI is part of a broader, industry-shaking copyright challenge that could define the future of AI.
|
||||
|
||||
**[Reconciling the contrasting narratives on the environmental impact of large language models](https://www.nature.com/articles/s41598-024-76682-6)**
|
||||
> Studies have shown that the training of just one LLM can consume as much energy as five cars do across their lifetimes. The water footprint of AI is also substantial; for example, recent work has highlighted that water consumption associated with AI models involves data centers using millions of gallons of water per day for cooling. Additionally, the energy consumption and carbon emissions of AI are projected to grow quickly in the coming years [...].
|
||||
|
||||
**[Scientists Predict AI to Generate Millions of Tons of E-Waste](https://www.sciencealert.com/scientists-predict-ai-to-generate-millions-of-tons-of-e-waste)**
|
||||
> we could end up with between 1.2 million and 5 million metric tons of additional electronic waste by the end of this decade [the 2020's].
|
||||
|
||||
## How do we know AI companies/bots respect `robots.txt`?
|
||||
|
||||
The short answer is that we don't. `robots.txt` is a well-established standard, but compliance is voluntary. There is no enforcement mechanism.
|
||||
|
@ -26,8 +42,8 @@ That depends on your stack.
|
|||
- Apache httpd
|
||||
- [Blockin' bots.](https://ethanmarcotte.com/wrote/blockin-bots/) by Ethan Marcotte
|
||||
- [Blocking Bots With 11ty And Apache](https://flamedfury.com/posts/blocking-bots-with-11ty-and-apache/) by fLaMEd fury
|
||||
> [!TIP]
|
||||
> The snippets in these articles all use `mod_rewrite`, which [should be considered a last resort](https://httpd.apache.org/docs/trunk/rewrite/avoid.html). A good alternative that's less resource-intensive is `mod_setenvif`; see [httpd docs](https://httpd.apache.org/docs/trunk/rewrite/access.html#blocking-of-robots) for an example. You should also consider [setting this up in `httpd.conf` instead of `.htaccess`](https://httpd.apache.org/docs/trunk/howto/htaccess.html#when) if it's available to you.
|
||||
> [!TIP]
|
||||
> The snippets in these articles all use `mod_rewrite`, which [should be considered a last resort](https://httpd.apache.org/docs/trunk/rewrite/avoid.html). A good alternative that's less resource-intensive is `mod_setenvif`; see [httpd docs](https://httpd.apache.org/docs/trunk/rewrite/access.html#blocking-of-robots) for an example. You should also consider [setting this up in `httpd.conf` instead of `.htaccess`](https://httpd.apache.org/docs/trunk/howto/htaccess.html#when) if it's available to you.
|
||||
- Netlify
|
||||
- [Blockin' bots on Netlify](https://www.jeremiak.com/blog/block-bots-netlify-edge-functions/) by Jeremia Kimelman
|
||||
- Cloudflare
|
||||
|
@ -36,16 +52,6 @@ That depends on your stack.
|
|||
- Vercel
|
||||
- [Block AI Bots Firewall Rule](https://vercel.com/templates/firewall/block-ai-bots-firewall-rule) by Vercel
|
||||
|
||||
## Why should we block these crawlers?
|
||||
|
||||
They're extractive, confer no benefit to the creators of data they're ingesting and also have wide-ranging negative externalities.
|
||||
|
||||
**[How Tech Giants Cut Corners to Harvest Data for A.I.](https://www.nytimes.com/2024/04/06/technology/tech-giants-harvest-data-artificial-intelligence.html?unlocked_article_code=1.ik0.Ofja.L21c1wyW-0xj&ugrp=m)**
|
||||
> OpenAI, Google and Meta ignored corporate policies, altered their own rules and discussed skirting copyright law as they sought online information to train their newest artificial intelligence systems.
|
||||
|
||||
**[How AI copyright lawsuits could make the whole industry go extinct](https://www.theverge.com/24062159/ai-copyright-fair-use-lawsuits-new-york-times-openai-chatgpt-decoder-podcast)**
|
||||
> The New York Times' lawsuit against OpenAI is part of a broader, industry-shaking copyright challenge that could define the future of AI.
|
||||
|
||||
## How can I contribute?
|
||||
|
||||
Open a pull request. It will be reviewed and acted upon appropriately. **We really appreciate contributions** — this is a community effort.
|
||||
|
|
24
README.md
24
README.md
|
@ -8,9 +8,29 @@ A number of these crawlers have been sourced from [Dark Visitors](https://darkvi
|
|||
|
||||
If you'd like to add information about a crawler to the list, please make a pull request with the bot name added to `robots.txt`, `ai.txt`, and any relevant details in `table-of-bot-metrics.md` to help people understand what's crawling.
|
||||
|
||||
## Usage
|
||||
|
||||
This repository provides the following files:
|
||||
- `robots.txt`
|
||||
- `.htaccess`
|
||||
- `nginx-block-ai-bots.conf`
|
||||
|
||||
`robots.txt` implements the Robots Exclusion Protocol ([RFC 9309](https://www.rfc-editor.org/rfc/rfc9309.html)).
|
||||
|
||||
`.htaccess` may be used to configure web servers such as [Apache httpd](https://httpd.apache.org/) to return an error page when one of the listed AI crawlers sends a request to the web server.
|
||||
Note that, as stated in the [httpd documentation](https://httpd.apache.org/docs/current/howto/htaccess.html), more performant methods than an `.htaccess` file exist.
|
||||
|
||||
`nginx-block-ai-bots.conf` implements a Nginx configuration snippet that can be included in any virtual host `server {}` block via the `include` directive.
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
A note about contributing: updates should be added/made to `robots.json`. A GitHub action, courtesy of [Adam](https://github.com/newbold), will then generate the updated `robots.txt` and `table-of-bot-metrics.md`.
|
||||
A note about contributing: updates should be added/made to `robots.json`. A GitHub action will then generate the updated `robots.txt`, `table-of-bot-metrics.md`, `.htaccess` and `nginx-block-ai-bots.conf`.
|
||||
|
||||
You can run the tests by [installing](https://www.python.org/about/gettingstarted/) Python 3 and issuing:
|
||||
```console
|
||||
code/tests.py
|
||||
```
|
||||
|
||||
## Subscribe to updates
|
||||
|
||||
|
@ -27,7 +47,7 @@ Alternatively, you can also subscribe to new releases with your GitHub account b
|
|||
## Report abusive crawlers
|
||||
|
||||
If you use [Cloudflare's hard block](https://blog.cloudflare.com/declaring-your-aindependence-block-ai-bots-scrapers-and-crawlers-with-a-single-click) alongside this list, you can report abusive crawlers that don't respect `robots.txt` [here](https://docs.google.com/forms/d/e/1FAIpQLScbUZ2vlNSdcsb8LyTeSF7uLzQI96s0BKGoJ6wQ6ocUFNOKEg/viewform).
|
||||
|
||||
But even if you don't use Cloudflare's hard block, their list of [verified bots](https://radar.cloudflare.com/traffic/verified-bots) may come in handy.
|
||||
## Additional resources
|
||||
|
||||
- [Blocking Bots with Nginx](https://rknight.me/blog/blocking-bots-with-nginx/) by Robb Knight
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
|
||||
This script processes updates to the https://github.com/ai-robots-txt/ai.robots.txt repository.
|
||||
|
||||
It generates:
|
||||
|
||||
- robots.txt
|
||||
- table-of-bot-metrics.md
|
||||
|
||||
*/
|
||||
|
||||
$robots = json_decode(file_get_contents('robots.json'), 1);
|
||||
|
||||
$robots_txt = null;
|
||||
$robots_table = '| Name | Operator | Respects `robots.txt` | Data use | Visit regularity | Description |'."\n";
|
||||
$robots_table .= '|-----|----------|-----------------------|----------|------------------|-------------|'."\n";
|
||||
|
||||
foreach($robots as $robot => $details) {
|
||||
$robots_txt .= 'User-agent: '.$robot."\n";
|
||||
$robots_table .= '| '.$robot.' | '.$details['operator'].' | '.$details['respect'].' | '.$details['function'].' | '.$details['frequency'].' | '.$details['description'].' | '."\n";
|
||||
}
|
||||
|
||||
$robots_txt .= 'Disallow: /';
|
||||
|
||||
file_put_contents('robots.txt', $robots_txt);
|
||||
file_put_contents('table-of-bot-metrics.md', $robots_table);
|
|
@ -1,73 +0,0 @@
|
|||
import json
|
||||
from pathlib import Path
|
||||
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
session = requests.Session()
|
||||
response = session.get("https://darkvisitors.com/agents")
|
||||
soup = BeautifulSoup(response.text, "html.parser")
|
||||
|
||||
existing_content = json.loads(Path("./robots.json").read_text())
|
||||
to_include = [
|
||||
"AI Assistants",
|
||||
"AI Data Scrapers",
|
||||
"AI Search Crawlers",
|
||||
# "Archivers",
|
||||
# "Developer Helpers",
|
||||
# "Fetchers",
|
||||
# "Intelligence Gatherers",
|
||||
# "Scrapers",
|
||||
# "Search Engine Crawlers",
|
||||
# "SEO Crawlers",
|
||||
# "Uncategorized",
|
||||
"Undocumented AI Agents"
|
||||
]
|
||||
|
||||
for section in soup.find_all("div", {"class": "agent-links-section"}):
|
||||
category = section.find("h2").get_text()
|
||||
if category not in to_include:
|
||||
continue
|
||||
for agent in section.find_all("a", href=True):
|
||||
name = agent.find("div", {"class": "agent-name"}).get_text().strip()
|
||||
desc = agent.find("p").get_text().strip()
|
||||
|
||||
default_values = {
|
||||
"Unclear at this time.",
|
||||
"No information. provided.",
|
||||
"No information.",
|
||||
"No explicit frequency provided."
|
||||
}
|
||||
default_value = "Unclear at this time."
|
||||
|
||||
# Parse the operator information from the description if possible
|
||||
operator = default_value
|
||||
if "operated by " in desc:
|
||||
try:
|
||||
operator = desc.split("operated by ", 1)[1].split(".", 1)[0].strip()
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
def consolidate(field: str, value: str) -> str:
|
||||
# New entry
|
||||
if name not in existing_content:
|
||||
return value
|
||||
# New field
|
||||
if field not in existing_content[name]:
|
||||
return value
|
||||
# Unclear value
|
||||
if existing_content[name][field] in default_values and value not in default_values:
|
||||
return value
|
||||
# Existing value
|
||||
return existing_content[name][field]
|
||||
|
||||
existing_content[name] = {
|
||||
"operator": consolidate("operator", operator),
|
||||
"respect": consolidate("respect", default_value),
|
||||
"function": consolidate("function", f"{category}"),
|
||||
"frequency": consolidate("frequency", default_value),
|
||||
"description": consolidate("description", f"{desc} More info can be found at https://darkvisitors.com/agents{agent['href']}")
|
||||
}
|
||||
|
||||
print(f"Total: {len(existing_content)}")
|
||||
Path("./robots.json").write_text(json.dumps(existing_content, indent=4, sort_keys=True))
|
221
code/robots.py
Executable file
221
code/robots.py
Executable file
|
@ -0,0 +1,221 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import json
|
||||
import re
|
||||
import requests
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def load_robots_json():
|
||||
"""Load the robots.json contents into a dictionary."""
|
||||
return json.loads(Path("./robots.json").read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
def get_agent_soup():
|
||||
"""Retrieve current known agents from darkvisitors.com"""
|
||||
session = requests.Session()
|
||||
try:
|
||||
response = session.get("https://darkvisitors.com/agents")
|
||||
except requests.exceptions.ConnectionError:
|
||||
print(
|
||||
"ERROR: Could not gather the current agents from https://darkvisitors.com/agents"
|
||||
)
|
||||
return
|
||||
return BeautifulSoup(response.text, "html.parser")
|
||||
|
||||
|
||||
def updated_robots_json(soup):
|
||||
"""Update AI scraper information with data from darkvisitors."""
|
||||
existing_content = load_robots_json()
|
||||
to_include = [
|
||||
"AI Assistants",
|
||||
"AI Data Scrapers",
|
||||
"AI Search Crawlers",
|
||||
# "Archivers",
|
||||
# "Developer Helpers",
|
||||
# "Fetchers",
|
||||
# "Intelligence Gatherers",
|
||||
# "Scrapers",
|
||||
# "Search Engine Crawlers",
|
||||
# "SEO Crawlers",
|
||||
# "Uncategorized",
|
||||
"Undocumented AI Agents",
|
||||
]
|
||||
|
||||
for section in soup.find_all("div", {"class": "agent-links-section"}):
|
||||
category = section.find("h2").get_text()
|
||||
if category not in to_include:
|
||||
continue
|
||||
for agent in section.find_all("a", href=True):
|
||||
name = agent.find("div", {"class": "agent-name"}).get_text().strip()
|
||||
desc = agent.find("p").get_text().strip()
|
||||
|
||||
default_values = {
|
||||
"Unclear at this time.",
|
||||
"No information provided.",
|
||||
"No information.",
|
||||
"No explicit frequency provided.",
|
||||
}
|
||||
default_value = "Unclear at this time."
|
||||
|
||||
# Parse the operator information from the description if possible
|
||||
operator = default_value
|
||||
if "operated by " in desc:
|
||||
try:
|
||||
operator = desc.split("operated by ", 1)[1].split(".", 1)[0].strip()
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
|
||||
def consolidate(field: str, value: str) -> str:
|
||||
# New entry
|
||||
if name not in existing_content:
|
||||
return value
|
||||
# New field
|
||||
if field not in existing_content[name]:
|
||||
return value
|
||||
# Unclear value
|
||||
if (
|
||||
existing_content[name][field] in default_values
|
||||
and value not in default_values
|
||||
):
|
||||
return value
|
||||
# Existing value
|
||||
return existing_content[name][field]
|
||||
|
||||
existing_content[name] = {
|
||||
"operator": consolidate("operator", operator),
|
||||
"respect": consolidate("respect", default_value),
|
||||
"function": consolidate("function", f"{category}"),
|
||||
"frequency": consolidate("frequency", default_value),
|
||||
"description": consolidate(
|
||||
"description",
|
||||
f"{desc} More info can be found at https://darkvisitors.com/agents{agent['href']}",
|
||||
),
|
||||
}
|
||||
|
||||
print(f"Total: {len(existing_content)}")
|
||||
sorted_keys = sorted(existing_content, key=lambda k: k.lower())
|
||||
sorted_robots = {k: existing_content[k] for k in sorted_keys}
|
||||
return sorted_robots
|
||||
|
||||
|
||||
def ingest_darkvisitors():
|
||||
old_robots_json = load_robots_json()
|
||||
soup = get_agent_soup()
|
||||
if soup:
|
||||
robots_json = updated_robots_json(soup)
|
||||
print(
|
||||
"robots.json is unchanged."
|
||||
if robots_json == old_robots_json
|
||||
else "robots.json got updates."
|
||||
)
|
||||
Path("./robots.json").write_text(
|
||||
json.dumps(robots_json, indent=4), encoding="utf-8"
|
||||
)
|
||||
|
||||
|
||||
def json_to_txt(robots_json):
|
||||
"""Compose the robots.txt from the robots.json file."""
|
||||
robots_txt = "\n".join(f"User-agent: {k}" for k in robots_json.keys())
|
||||
robots_txt += "\nDisallow: /\n"
|
||||
return robots_txt
|
||||
|
||||
|
||||
def escape_md(s):
|
||||
return re.sub(r"([]*\\|`(){}<>#+-.!_[])", r"\\\1", s)
|
||||
|
||||
|
||||
def json_to_table(robots_json):
|
||||
"""Compose a markdown table with the information in robots.json"""
|
||||
table = "| Name | Operator | Respects `robots.txt` | Data use | Visit regularity | Description |\n"
|
||||
table += "|------|----------|-----------------------|----------|------------------|-------------|\n"
|
||||
|
||||
for name, robot in robots_json.items():
|
||||
table += f'| {escape_md(name)} | {robot["operator"]} | {robot["respect"]} | {robot["function"]} | {robot["frequency"]} | {robot["description"]} |\n'
|
||||
|
||||
return table
|
||||
|
||||
|
||||
def list_to_pcre(lst):
|
||||
# Python re is not 100% identical to PCRE which is used by Apache, but it
|
||||
# should probably be close enough in the real world for re.escape to work.
|
||||
return f"({"|".join(map(re.escape, lst))})"
|
||||
|
||||
|
||||
def json_to_htaccess(robot_json):
|
||||
# Creates a .htaccess filter file. It uses a regular expression to filter out
|
||||
# User agents that contain any of the blocked values.
|
||||
htaccess = "RewriteEngine On\n"
|
||||
htaccess += f"RewriteCond %{{HTTP_USER_AGENT}} {list_to_pcre(robot_json.keys())} [NC]\n"
|
||||
htaccess += "RewriteRule !^/?robots\\.txt$ - [F,L]\n"
|
||||
return htaccess
|
||||
|
||||
def json_to_nginx(robot_json):
|
||||
# Creates an Nginx config file. This config snippet can be included in
|
||||
# nginx server{} blocks to block AI bots.
|
||||
config = f"if ($http_user_agent ~* \"{list_to_pcre(robot_json.keys())}\") {{\n return 403;\n}}"
|
||||
return config
|
||||
|
||||
|
||||
def update_file_if_changed(file_name, converter):
|
||||
"""Update files if newer content is available and log the (in)actions."""
|
||||
new_content = converter(load_robots_json())
|
||||
filepath = Path(file_name)
|
||||
# "touch" will create the file if it doesn't exist yet
|
||||
filepath.touch()
|
||||
old_content = filepath.read_text(encoding="utf-8")
|
||||
if old_content == new_content:
|
||||
print(f"{file_name} is already up to date.")
|
||||
else:
|
||||
Path(file_name).write_text(new_content, encoding="utf-8")
|
||||
print(f"{file_name} has been updated.")
|
||||
|
||||
|
||||
def conversions():
|
||||
"""Triggers the conversions from the json file."""
|
||||
update_file_if_changed(file_name="./robots.txt", converter=json_to_txt)
|
||||
update_file_if_changed(
|
||||
file_name="./table-of-bot-metrics.md",
|
||||
converter=json_to_table,
|
||||
)
|
||||
update_file_if_changed(
|
||||
file_name="./.htaccess",
|
||||
converter=json_to_htaccess,
|
||||
)
|
||||
update_file_if_changed(
|
||||
file_name="./nginx-block-ai-bots.conf",
|
||||
converter=json_to_nginx,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="ai-robots",
|
||||
description="Collects and updates information about web scrapers of AI companies.",
|
||||
epilog="One of the flags must be set.\n",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--update",
|
||||
action="store_true",
|
||||
help="Update the robots.json file with data from darkvisitors.com/agents",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--convert",
|
||||
action="store_true",
|
||||
help="Create the robots.txt and markdown table from robots.json",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if not (args.update or args.convert):
|
||||
print("ERROR: please provide one of the possible flags.")
|
||||
parser.print_help()
|
||||
|
||||
if args.update:
|
||||
ingest_darkvisitors()
|
||||
if args.convert:
|
||||
conversions()
|
3
code/test_files/.htaccess
Normal file
3
code/test_files/.htaccess
Normal file
|
@ -0,0 +1,3 @@
|
|||
RewriteEngine On
|
||||
RewriteCond %{HTTP_USER_AGENT} (AI2Bot|Ai2Bot\-Dolma|Amazonbot|anthropic\-ai|Applebot|Applebot\-Extended|Bytespider|CCBot|ChatGPT\-User|Claude\-Web|ClaudeBot|cohere\-ai|Diffbot|FacebookBot|facebookexternalhit|FriendlyCrawler|Google\-Extended|GoogleOther|GoogleOther\-Image|GoogleOther\-Video|GPTBot|iaskspider/2\.0|ICC\-Crawler|ImagesiftBot|img2dataset|ISSCyberRiskCrawler|Kangaroo\ Bot|Meta\-ExternalAgent|Meta\-ExternalFetcher|OAI\-SearchBot|omgili|omgilibot|PerplexityBot|PetalBot|Scrapy|Sidetrade\ indexer\ bot|Timpibot|VelenPublicWebCrawler|Webzio\-Extended|YouBot|crawler\.with\.dots|star\*\*\*crawler|Is\ this\ a\ crawler\?|a\[mazing\]\{42\}\(robot\)|2\^32\$|curl\|sudo\ bash) [NC]
|
||||
RewriteRule !^/?robots\.txt$ - [F,L]
|
3
code/test_files/nginx-block-ai-bots.conf
Normal file
3
code/test_files/nginx-block-ai-bots.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
if ($http_user_agent ~* "(AI2Bot|Ai2Bot\-Dolma|Amazonbot|anthropic\-ai|Applebot|Applebot\-Extended|Bytespider|CCBot|ChatGPT\-User|Claude\-Web|ClaudeBot|cohere\-ai|Diffbot|FacebookBot|facebookexternalhit|FriendlyCrawler|Google\-Extended|GoogleOther|GoogleOther\-Image|GoogleOther\-Video|GPTBot|iaskspider/2\.0|ICC\-Crawler|ImagesiftBot|img2dataset|ISSCyberRiskCrawler|Kangaroo\ Bot|Meta\-ExternalAgent|Meta\-ExternalFetcher|OAI\-SearchBot|omgili|omgilibot|PerplexityBot|PetalBot|Scrapy|Sidetrade\ indexer\ bot|Timpibot|VelenPublicWebCrawler|Webzio\-Extended|YouBot|crawler\.with\.dots|star\*\*\*crawler|Is\ this\ a\ crawler\?|a\[mazing\]\{42\}\(robot\)|2\^32\$|curl\|sudo\ bash)") {
|
||||
return 403;
|
||||
}
|
324
code/test_files/robots.json
Normal file
324
code/test_files/robots.json
Normal file
|
@ -0,0 +1,324 @@
|
|||
{
|
||||
"AI2Bot": {
|
||||
"description": "Explores 'certain domains' to find web content.",
|
||||
"frequency": "No information provided.",
|
||||
"function": "Content is used to train open language models.",
|
||||
"operator": "[Ai2](https://allenai.org/crawler)",
|
||||
"respect": "Yes"
|
||||
},
|
||||
"Ai2Bot-Dolma": {
|
||||
"description": "Explores 'certain domains' to find web content.",
|
||||
"frequency": "No information provided.",
|
||||
"function": "Content is used to train open language models.",
|
||||
"operator": "[Ai2](https://allenai.org/crawler)",
|
||||
"respect": "Yes"
|
||||
},
|
||||
"Amazonbot": {
|
||||
"operator": "Amazon",
|
||||
"respect": "Yes",
|
||||
"function": "Service improvement and enabling answers for Alexa users.",
|
||||
"frequency": "No information provided.",
|
||||
"description": "Includes references to crawled website when surfacing answers via Alexa; does not clearly outline other uses."
|
||||
},
|
||||
"anthropic-ai": {
|
||||
"operator": "[Anthropic](https://www.anthropic.com)",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "Scrapes data to train Anthropic's AI products.",
|
||||
"frequency": "No information provided.",
|
||||
"description": "Scrapes data to train LLMs and AI products offered by Anthropic."
|
||||
},
|
||||
"Applebot": {
|
||||
"operator": "Unclear at this time.",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Search Crawlers",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Applebot is a web crawler used by Apple to index search results that allow the Siri AI Assistant to answer user questions. Siri's answers normally contain references to the website. More info can be found at https://darkvisitors.com/agents/agents/applebot"
|
||||
},
|
||||
"Applebot-Extended": {
|
||||
"operator": "[Apple](https://support.apple.com/en-us/119829#datausage)",
|
||||
"respect": "Yes",
|
||||
"function": "Powers features in Siri, Spotlight, Safari, Apple Intelligence, and others.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Apple has a secondary user agent, Applebot-Extended ... [that is] used to train Apple's foundation models powering generative AI features across Apple products, including Apple Intelligence, Services, and Developer Tools."
|
||||
},
|
||||
"Bytespider": {
|
||||
"operator": "ByteDance",
|
||||
"respect": "No",
|
||||
"function": "LLM training.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Downloads data to train LLMS, including ChatGPT competitors."
|
||||
},
|
||||
"CCBot": {
|
||||
"operator": "[Common Crawl Foundation](https://commoncrawl.org)",
|
||||
"respect": "[Yes](https://commoncrawl.org/ccbot)",
|
||||
"function": "Provides open crawl dataset, used for many purposes, including Machine Learning/AI.",
|
||||
"frequency": "Monthly at present.",
|
||||
"description": "Web archive going back to 2008. [Cited in thousands of research papers per year](https://commoncrawl.org/research-papers)."
|
||||
},
|
||||
"ChatGPT-User": {
|
||||
"operator": "[OpenAI](https://openai.com)",
|
||||
"respect": "Yes",
|
||||
"function": "Takes action based on user prompts.",
|
||||
"frequency": "Only when prompted by a user.",
|
||||
"description": "Used by plugins in ChatGPT to answer queries based on user input."
|
||||
},
|
||||
"Claude-Web": {
|
||||
"operator": "[Anthropic](https://www.anthropic.com)",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "Scrapes data to train Anthropic's AI products.",
|
||||
"frequency": "No information provided.",
|
||||
"description": "Scrapes data to train LLMs and AI products offered by Anthropic."
|
||||
},
|
||||
"ClaudeBot": {
|
||||
"operator": "[Anthropic](https://www.anthropic.com)",
|
||||
"respect": "[Yes](https://support.anthropic.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler)",
|
||||
"function": "Scrapes data to train Anthropic's AI products.",
|
||||
"frequency": "No information provided.",
|
||||
"description": "Scrapes data to train LLMs and AI products offered by Anthropic."
|
||||
},
|
||||
"cohere-ai": {
|
||||
"operator": "[Cohere](https://cohere.com)",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "Retrieves data to provide responses to user-initiated prompts.",
|
||||
"frequency": "Takes action based on user prompts.",
|
||||
"description": "Retrieves data based on user prompts."
|
||||
},
|
||||
"Diffbot": {
|
||||
"operator": "[Diffbot](https://www.diffbot.com/)",
|
||||
"respect": "At the discretion of Diffbot users.",
|
||||
"function": "Aggregates structured web data for monitoring and AI model training.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Diffbot is an application used to parse web pages into structured data; this data is used for monitoring or AI model training."
|
||||
},
|
||||
"FacebookBot": {
|
||||
"operator": "Meta/Facebook",
|
||||
"respect": "[Yes](https://developers.facebook.com/docs/sharing/bot/)",
|
||||
"function": "Training language models",
|
||||
"frequency": "Up to 1 page per second",
|
||||
"description": "Officially used for training Meta \"speech recognition technology,\" unknown if used to train Meta AI specifically."
|
||||
},
|
||||
"facebookexternalhit": {
|
||||
"description": "Unclear at this time.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "No information.",
|
||||
"operator": "Meta/Facebook",
|
||||
"respect": "[Yes](https://developers.facebook.com/docs/sharing/bot/)"
|
||||
},
|
||||
"FriendlyCrawler": {
|
||||
"description": "Unclear who the operator is; but data is used for training/machine learning.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "We are using the data from the crawler to build datasets for machine learning experiments.",
|
||||
"operator": "Unknown",
|
||||
"respect": "[Yes](https://imho.alex-kunz.com/2024/01/25/an-update-on-friendly-crawler)"
|
||||
},
|
||||
"Google-Extended": {
|
||||
"operator": "Google",
|
||||
"respect": "[Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers)",
|
||||
"function": "LLM training.",
|
||||
"frequency": "No information.",
|
||||
"description": "Used to train Gemini and Vertex AI generative APIs. Does not impact a site's inclusion or ranking in Google Search."
|
||||
},
|
||||
"GoogleOther": {
|
||||
"description": "\"Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development.\"",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data.",
|
||||
"operator": "Google",
|
||||
"respect": "[Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers)"
|
||||
},
|
||||
"GoogleOther-Image": {
|
||||
"description": "\"Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development.\"",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data.",
|
||||
"operator": "Google",
|
||||
"respect": "[Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers)"
|
||||
},
|
||||
"GoogleOther-Video": {
|
||||
"description": "\"Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development.\"",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data.",
|
||||
"operator": "Google",
|
||||
"respect": "[Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers)"
|
||||
},
|
||||
"GPTBot": {
|
||||
"operator": "[OpenAI](https://openai.com)",
|
||||
"respect": "Yes",
|
||||
"function": "Scrapes data to train OpenAI's products.",
|
||||
"frequency": "No information.",
|
||||
"description": "Data is used to train current and future models, removed paywalled data, PII and data that violates the company's policies."
|
||||
},
|
||||
"iaskspider/2.0": {
|
||||
"description": "Used to provide answers to user queries.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "Crawls sites to provide answers to user queries.",
|
||||
"operator": "iAsk",
|
||||
"respect": "No"
|
||||
},
|
||||
"ICC-Crawler": {
|
||||
"description": "Use the collected data for artificial intelligence technologies; provide data to third parties, including commercial companies; those companies can use the data for their own business.",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data to train and support AI technologies.",
|
||||
"operator": "[NICT](https://nict.go.jp)",
|
||||
"respect": "Yes"
|
||||
},
|
||||
"ImagesiftBot": {
|
||||
"description": "Once images and text are downloaded from a webpage, ImageSift analyzes this data from the page and stores the information in an index. Our web intelligence products use this index to enable search and retrieval of similar images.",
|
||||
"frequency": "No information.",
|
||||
"function": "ImageSiftBot is a web crawler that scrapes the internet for publicly available images to support our suite of web intelligence products",
|
||||
"operator": "[ImageSift](https://imagesift.com)",
|
||||
"respect": "[Yes](https://imagesift.com/about)"
|
||||
},
|
||||
"img2dataset": {
|
||||
"description": "Downloads large sets of images into datasets for LLM training or other purposes.",
|
||||
"frequency": "At the discretion of img2dataset users.",
|
||||
"function": "Scrapes images for use in LLMs.",
|
||||
"operator": "[img2dataset](https://github.com/rom1504/img2dataset)",
|
||||
"respect": "Unclear at this time."
|
||||
},
|
||||
"ISSCyberRiskCrawler": {
|
||||
"description": "Used to train machine learning based models to quantify cyber risk.",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data to train machine learning models.",
|
||||
"operator": "[ISS-Corporate](https://iss-cyber.com)",
|
||||
"respect": "No"
|
||||
},
|
||||
"Kangaroo Bot": {
|
||||
"operator": "Unclear at this time.",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Data Scrapers",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Kangaroo Bot is used by the company Kangaroo LLM to download data to train AI models tailored to Australian language and culture. More info can be found at https://darkvisitors.com/agents/agents/kangaroo-bot"
|
||||
},
|
||||
"Meta-ExternalAgent": {
|
||||
"operator": "[Meta](https://developers.facebook.com/docs/sharing/webmasters/web-crawlers)",
|
||||
"respect": "Yes.",
|
||||
"function": "Used to train models and improve products.",
|
||||
"frequency": "No information.",
|
||||
"description": "\"The Meta-ExternalAgent crawler crawls the web for use cases such as training AI models or improving products by indexing content directly.\""
|
||||
},
|
||||
"Meta-ExternalFetcher": {
|
||||
"operator": "Unclear at this time.",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Assistants",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Meta-ExternalFetcher is dispatched by Meta AI products in response to user prompts, when they need to fetch an individual links. More info can be found at https://darkvisitors.com/agents/agents/meta-externalfetcher"
|
||||
},
|
||||
"OAI-SearchBot": {
|
||||
"operator": "[OpenAI](https://openai.com)",
|
||||
"respect": "[Yes](https://platform.openai.com/docs/bots)",
|
||||
"function": "Search result generation.",
|
||||
"frequency": "No information.",
|
||||
"description": "Crawls sites to surface as results in SearchGPT."
|
||||
},
|
||||
"omgili": {
|
||||
"operator": "[Webz.io](https://webz.io/)",
|
||||
"respect": "[Yes](https://webz.io/blog/web-data/what-is-the-omgili-bot-and-why-is-it-crawling-your-website/)",
|
||||
"function": "Data is sold.",
|
||||
"frequency": "No information.",
|
||||
"description": "Crawls sites for APIs used by Hootsuite, Sprinklr, NetBase, and other companies. Data also sold for research purposes or LLM training."
|
||||
},
|
||||
"omgilibot": {
|
||||
"description": "Legacy user agent initially used for Omgili search engine. Unknown if still used, `omgili` agent still used by Webz.io.",
|
||||
"frequency": "No information.",
|
||||
"function": "Data is sold.",
|
||||
"operator": "[Webz.io](https://webz.io/)",
|
||||
"respect": "[Yes](https://web.archive.org/web/20170704003301/http://omgili.com/Crawler.html)"
|
||||
},
|
||||
"PerplexityBot": {
|
||||
"operator": "[Perplexity](https://www.perplexity.ai/)",
|
||||
"respect": "[No](https://www.macstories.net/stories/wired-confirms-perplexity-is-bypassing-efforts-by-websites-to-block-its-web-crawler/)",
|
||||
"function": "Used to answer queries at the request of users.",
|
||||
"frequency": "Takes action based on user prompts.",
|
||||
"description": "Operated by Perplexity to obtain results in response to user queries."
|
||||
},
|
||||
"PetalBot": {
|
||||
"description": "Operated by Huawei to provide search and AI assistant services.",
|
||||
"frequency": "No explicit frequency provided.",
|
||||
"function": "Used to provide recommendations in Hauwei assistant and AI search services.",
|
||||
"operator": "[Huawei](https://huawei.com/)",
|
||||
"respect": "Yes"
|
||||
},
|
||||
"Scrapy": {
|
||||
"description": "\"AI and machine learning applications often need large amounts of quality data, and web data extraction is a fast, efficient way to build structured data sets.\"",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data for a variety of uses including training AI.",
|
||||
"operator": "[Zyte](https://www.zyte.com)",
|
||||
"respect": "Unclear at this time."
|
||||
},
|
||||
"Sidetrade indexer bot": {
|
||||
"description": "AI product training.",
|
||||
"frequency": "No information.",
|
||||
"function": "Extracts data for a variety of uses including training AI.",
|
||||
"operator": "[Sidetrade](https://www.sidetrade.com)",
|
||||
"respect": "Unclear at this time."
|
||||
},
|
||||
"Timpibot": {
|
||||
"operator": "[Timpi](https://timpi.io)",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "Scrapes data for use in training LLMs.",
|
||||
"frequency": "No information.",
|
||||
"description": "Makes data available for training AI models."
|
||||
},
|
||||
"VelenPublicWebCrawler": {
|
||||
"description": "\"Our goal with this crawler is to build business datasets and machine learning models to better understand the web.\"",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data for business data sets and machine learning models.",
|
||||
"operator": "[Velen Crawler](https://velen.io)",
|
||||
"respect": "[Yes](https://velen.io)"
|
||||
},
|
||||
"Webzio-Extended": {
|
||||
"operator": "Unclear at this time.",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Data Scrapers",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Webzio-Extended is a web crawler used by Webz.io to maintain a repository of web crawl data that it sells to other companies, including those using it to train AI models. More info can be found at https://darkvisitors.com/agents/agents/webzio-extended"
|
||||
},
|
||||
"YouBot": {
|
||||
"operator": "[You](https://about.you.com/youchat/)",
|
||||
"respect": "[Yes](https://about.you.com/youbot/)",
|
||||
"function": "Scrapes data for search engine and LLMs.",
|
||||
"frequency": "No information.",
|
||||
"description": "Retrieves data used for You.com web search engine and LLMs."
|
||||
},
|
||||
"crawler.with.dots": {
|
||||
"operator": "Test suite",
|
||||
"respect": "No",
|
||||
"function": "To ensure the code works correctly.",
|
||||
"frequency": "No information.",
|
||||
"description": "When used in the .htaccess regular expression dots need to be escaped."
|
||||
},
|
||||
"star***crawler": {
|
||||
"operator": "Test suite",
|
||||
"respect": "No",
|
||||
"function": "To ensure the code works correctly.",
|
||||
"frequency": "No information.",
|
||||
"description": "When used in the .htaccess regular expression stars need to be escaped."
|
||||
},
|
||||
"Is this a crawler?": {
|
||||
"operator": "Test suite",
|
||||
"respect": "No",
|
||||
"function": "To ensure the code works correctly.",
|
||||
"frequency": "No information.",
|
||||
"description": "When used in the .htaccess regular expression spaces and question marks need to be escaped."
|
||||
},
|
||||
"a[mazing]{42}(robot)": {
|
||||
"operator": "Test suite",
|
||||
"respect": "No",
|
||||
"function": "To ensure the code works correctly.",
|
||||
"frequency": "No information.",
|
||||
"description": "When used in the .htaccess regular expression parantheses, braces, etc. need to be escaped."
|
||||
},
|
||||
"2^32$": {
|
||||
"operator": "Test suite",
|
||||
"respect": "No",
|
||||
"function": "To ensure the code works correctly.",
|
||||
"frequency": "No information.",
|
||||
"description": "When used in the .htaccess regular expression RE anchor characters need to be escaped."
|
||||
},
|
||||
"curl|sudo bash": {
|
||||
"operator": "Test suite",
|
||||
"respect": "No",
|
||||
"function": "To ensure the code works correctly.",
|
||||
"frequency": "No information.",
|
||||
"description": "When used in the .htaccess regular expression pipes need to be escaped."
|
||||
}
|
||||
}
|
47
code/test_files/robots.txt
Normal file
47
code/test_files/robots.txt
Normal file
|
@ -0,0 +1,47 @@
|
|||
User-agent: AI2Bot
|
||||
User-agent: Ai2Bot-Dolma
|
||||
User-agent: Amazonbot
|
||||
User-agent: anthropic-ai
|
||||
User-agent: Applebot
|
||||
User-agent: Applebot-Extended
|
||||
User-agent: Bytespider
|
||||
User-agent: CCBot
|
||||
User-agent: ChatGPT-User
|
||||
User-agent: Claude-Web
|
||||
User-agent: ClaudeBot
|
||||
User-agent: cohere-ai
|
||||
User-agent: Diffbot
|
||||
User-agent: FacebookBot
|
||||
User-agent: facebookexternalhit
|
||||
User-agent: FriendlyCrawler
|
||||
User-agent: Google-Extended
|
||||
User-agent: GoogleOther
|
||||
User-agent: GoogleOther-Image
|
||||
User-agent: GoogleOther-Video
|
||||
User-agent: GPTBot
|
||||
User-agent: iaskspider/2.0
|
||||
User-agent: ICC-Crawler
|
||||
User-agent: ImagesiftBot
|
||||
User-agent: img2dataset
|
||||
User-agent: ISSCyberRiskCrawler
|
||||
User-agent: Kangaroo Bot
|
||||
User-agent: Meta-ExternalAgent
|
||||
User-agent: Meta-ExternalFetcher
|
||||
User-agent: OAI-SearchBot
|
||||
User-agent: omgili
|
||||
User-agent: omgilibot
|
||||
User-agent: PerplexityBot
|
||||
User-agent: PetalBot
|
||||
User-agent: Scrapy
|
||||
User-agent: Sidetrade indexer bot
|
||||
User-agent: Timpibot
|
||||
User-agent: VelenPublicWebCrawler
|
||||
User-agent: Webzio-Extended
|
||||
User-agent: YouBot
|
||||
User-agent: crawler.with.dots
|
||||
User-agent: star***crawler
|
||||
User-agent: Is this a crawler?
|
||||
User-agent: a[mazing]{42}(robot)
|
||||
User-agent: 2^32$
|
||||
User-agent: curl|sudo bash
|
||||
Disallow: /
|
48
code/test_files/table-of-bot-metrics.md
Normal file
48
code/test_files/table-of-bot-metrics.md
Normal file
|
@ -0,0 +1,48 @@
|
|||
| Name | Operator | Respects `robots.txt` | Data use | Visit regularity | Description |
|
||||
|------|----------|-----------------------|----------|------------------|-------------|
|
||||
| AI2Bot | [Ai2](https://allenai.org/crawler) | Yes | Content is used to train open language models. | No information provided. | Explores 'certain domains' to find web content. |
|
||||
| Ai2Bot\-Dolma | [Ai2](https://allenai.org/crawler) | Yes | Content is used to train open language models. | No information provided. | Explores 'certain domains' to find web content. |
|
||||
| Amazonbot | Amazon | Yes | Service improvement and enabling answers for Alexa users. | No information provided. | Includes references to crawled website when surfacing answers via Alexa; does not clearly outline other uses. |
|
||||
| anthropic\-ai | [Anthropic](https://www.anthropic.com) | Unclear at this time. | Scrapes data to train Anthropic's AI products. | No information provided. | Scrapes data to train LLMs and AI products offered by Anthropic. |
|
||||
| Applebot | Unclear at this time. | Unclear at this time. | AI Search Crawlers | Unclear at this time. | Applebot is a web crawler used by Apple to index search results that allow the Siri AI Assistant to answer user questions. Siri's answers normally contain references to the website. More info can be found at https://darkvisitors.com/agents/agents/applebot |
|
||||
| Applebot\-Extended | [Apple](https://support.apple.com/en-us/119829#datausage) | Yes | Powers features in Siri, Spotlight, Safari, Apple Intelligence, and others. | Unclear at this time. | Apple has a secondary user agent, Applebot-Extended ... [that is] used to train Apple's foundation models powering generative AI features across Apple products, including Apple Intelligence, Services, and Developer Tools. |
|
||||
| Bytespider | ByteDance | No | LLM training. | Unclear at this time. | Downloads data to train LLMS, including ChatGPT competitors. |
|
||||
| CCBot | [Common Crawl Foundation](https://commoncrawl.org) | [Yes](https://commoncrawl.org/ccbot) | Provides open crawl dataset, used for many purposes, including Machine Learning/AI. | Monthly at present. | Web archive going back to 2008. [Cited in thousands of research papers per year](https://commoncrawl.org/research-papers). |
|
||||
| ChatGPT\-User | [OpenAI](https://openai.com) | Yes | Takes action based on user prompts. | Only when prompted by a user. | Used by plugins in ChatGPT to answer queries based on user input. |
|
||||
| Claude\-Web | [Anthropic](https://www.anthropic.com) | Unclear at this time. | Scrapes data to train Anthropic's AI products. | No information provided. | Scrapes data to train LLMs and AI products offered by Anthropic. |
|
||||
| ClaudeBot | [Anthropic](https://www.anthropic.com) | [Yes](https://support.anthropic.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler) | Scrapes data to train Anthropic's AI products. | No information provided. | Scrapes data to train LLMs and AI products offered by Anthropic. |
|
||||
| cohere\-ai | [Cohere](https://cohere.com) | Unclear at this time. | Retrieves data to provide responses to user-initiated prompts. | Takes action based on user prompts. | Retrieves data based on user prompts. |
|
||||
| Diffbot | [Diffbot](https://www.diffbot.com/) | At the discretion of Diffbot users. | Aggregates structured web data for monitoring and AI model training. | Unclear at this time. | Diffbot is an application used to parse web pages into structured data; this data is used for monitoring or AI model training. |
|
||||
| FacebookBot | Meta/Facebook | [Yes](https://developers.facebook.com/docs/sharing/bot/) | Training language models | Up to 1 page per second | Officially used for training Meta "speech recognition technology," unknown if used to train Meta AI specifically. |
|
||||
| facebookexternalhit | Meta/Facebook | [Yes](https://developers.facebook.com/docs/sharing/bot/) | No information. | Unclear at this time. | Unclear at this time. |
|
||||
| FriendlyCrawler | Unknown | [Yes](https://imho.alex-kunz.com/2024/01/25/an-update-on-friendly-crawler) | We are using the data from the crawler to build datasets for machine learning experiments. | Unclear at this time. | Unclear who the operator is; but data is used for training/machine learning. |
|
||||
| Google\-Extended | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | LLM training. | No information. | Used to train Gemini and Vertex AI generative APIs. Does not impact a site's inclusion or ranking in Google Search. |
|
||||
| GoogleOther | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | Scrapes data. | No information. | "Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development." |
|
||||
| GoogleOther\-Image | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | Scrapes data. | No information. | "Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development." |
|
||||
| GoogleOther\-Video | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | Scrapes data. | No information. | "Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development." |
|
||||
| GPTBot | [OpenAI](https://openai.com) | Yes | Scrapes data to train OpenAI's products. | No information. | Data is used to train current and future models, removed paywalled data, PII and data that violates the company's policies. |
|
||||
| iaskspider/2\.0 | iAsk | No | Crawls sites to provide answers to user queries. | Unclear at this time. | Used to provide answers to user queries. |
|
||||
| ICC\-Crawler | [NICT](https://nict.go.jp) | Yes | Scrapes data to train and support AI technologies. | No information. | Use the collected data for artificial intelligence technologies; provide data to third parties, including commercial companies; those companies can use the data for their own business. |
|
||||
| ImagesiftBot | [ImageSift](https://imagesift.com) | [Yes](https://imagesift.com/about) | ImageSiftBot is a web crawler that scrapes the internet for publicly available images to support our suite of web intelligence products | No information. | Once images and text are downloaded from a webpage, ImageSift analyzes this data from the page and stores the information in an index. Our web intelligence products use this index to enable search and retrieval of similar images. |
|
||||
| img2dataset | [img2dataset](https://github.com/rom1504/img2dataset) | Unclear at this time. | Scrapes images for use in LLMs. | At the discretion of img2dataset users. | Downloads large sets of images into datasets for LLM training or other purposes. |
|
||||
| ISSCyberRiskCrawler | [ISS-Corporate](https://iss-cyber.com) | No | Scrapes data to train machine learning models. | No information. | Used to train machine learning based models to quantify cyber risk. |
|
||||
| Kangaroo Bot | Unclear at this time. | Unclear at this time. | AI Data Scrapers | Unclear at this time. | Kangaroo Bot is used by the company Kangaroo LLM to download data to train AI models tailored to Australian language and culture. More info can be found at https://darkvisitors.com/agents/agents/kangaroo-bot |
|
||||
| Meta\-ExternalAgent | [Meta](https://developers.facebook.com/docs/sharing/webmasters/web-crawlers) | Yes. | Used to train models and improve products. | No information. | "The Meta-ExternalAgent crawler crawls the web for use cases such as training AI models or improving products by indexing content directly." |
|
||||
| Meta\-ExternalFetcher | Unclear at this time. | Unclear at this time. | AI Assistants | Unclear at this time. | Meta-ExternalFetcher is dispatched by Meta AI products in response to user prompts, when they need to fetch an individual links. More info can be found at https://darkvisitors.com/agents/agents/meta-externalfetcher |
|
||||
| OAI\-SearchBot | [OpenAI](https://openai.com) | [Yes](https://platform.openai.com/docs/bots) | Search result generation. | No information. | Crawls sites to surface as results in SearchGPT. |
|
||||
| omgili | [Webz.io](https://webz.io/) | [Yes](https://webz.io/blog/web-data/what-is-the-omgili-bot-and-why-is-it-crawling-your-website/) | Data is sold. | No information. | Crawls sites for APIs used by Hootsuite, Sprinklr, NetBase, and other companies. Data also sold for research purposes or LLM training. |
|
||||
| omgilibot | [Webz.io](https://webz.io/) | [Yes](https://web.archive.org/web/20170704003301/http://omgili.com/Crawler.html) | Data is sold. | No information. | Legacy user agent initially used for Omgili search engine. Unknown if still used, `omgili` agent still used by Webz.io. |
|
||||
| PerplexityBot | [Perplexity](https://www.perplexity.ai/) | [No](https://www.macstories.net/stories/wired-confirms-perplexity-is-bypassing-efforts-by-websites-to-block-its-web-crawler/) | Used to answer queries at the request of users. | Takes action based on user prompts. | Operated by Perplexity to obtain results in response to user queries. |
|
||||
| PetalBot | [Huawei](https://huawei.com/) | Yes | Used to provide recommendations in Hauwei assistant and AI search services. | No explicit frequency provided. | Operated by Huawei to provide search and AI assistant services. |
|
||||
| Scrapy | [Zyte](https://www.zyte.com) | Unclear at this time. | Scrapes data for a variety of uses including training AI. | No information. | "AI and machine learning applications often need large amounts of quality data, and web data extraction is a fast, efficient way to build structured data sets." |
|
||||
| Sidetrade indexer bot | [Sidetrade](https://www.sidetrade.com) | Unclear at this time. | Extracts data for a variety of uses including training AI. | No information. | AI product training. |
|
||||
| Timpibot | [Timpi](https://timpi.io) | Unclear at this time. | Scrapes data for use in training LLMs. | No information. | Makes data available for training AI models. |
|
||||
| VelenPublicWebCrawler | [Velen Crawler](https://velen.io) | [Yes](https://velen.io) | Scrapes data for business data sets and machine learning models. | No information. | "Our goal with this crawler is to build business datasets and machine learning models to better understand the web." |
|
||||
| Webzio\-Extended | Unclear at this time. | Unclear at this time. | AI Data Scrapers | Unclear at this time. | Webzio-Extended is a web crawler used by Webz.io to maintain a repository of web crawl data that it sells to other companies, including those using it to train AI models. More info can be found at https://darkvisitors.com/agents/agents/webzio-extended |
|
||||
| YouBot | [You](https://about.you.com/youchat/) | [Yes](https://about.you.com/youbot/) | Scrapes data for search engine and LLMs. | No information. | Retrieves data used for You.com web search engine and LLMs. |
|
||||
| crawler\.with\.dots | Test suite | No | To ensure the code works correctly. | No information. | When used in the .htaccess regular expression dots need to be escaped. |
|
||||
| star\*\*\*crawler | Test suite | No | To ensure the code works correctly. | No information. | When used in the .htaccess regular expression stars need to be escaped. |
|
||||
| Is this a crawler? | Test suite | No | To ensure the code works correctly. | No information. | When used in the .htaccess regular expression spaces and question marks need to be escaped. |
|
||||
| a\[mazing\]\{42\}\(robot\) | Test suite | No | To ensure the code works correctly. | No information. | When used in the .htaccess regular expression parantheses, braces, etc. need to be escaped. |
|
||||
| 2^32$ | Test suite | No | To ensure the code works correctly. | No information. | When used in the .htaccess regular expression RE anchor characters need to be escaped. |
|
||||
| curl\|sudo bash | Test suite | No | To ensure the code works correctly. | No information. | When used in the .htaccess regular expression pipes need to be escaped. |
|
68
code/tests.py
Executable file
68
code/tests.py
Executable file
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/env python3
|
||||
"""To run these tests just execute this script."""
|
||||
|
||||
import json
|
||||
import unittest
|
||||
|
||||
from robots import json_to_txt, json_to_table, json_to_htaccess, json_to_nginx
|
||||
|
||||
class RobotsUnittestExtensions:
|
||||
def loadJson(self, pathname):
|
||||
with open(pathname, "rt") as f:
|
||||
return json.load(f)
|
||||
|
||||
def assertEqualsFile(self, f, s):
|
||||
with open(f, "rt") as f:
|
||||
f_contents = f.read()
|
||||
|
||||
return self.assertMultiLineEqual(f_contents, s)
|
||||
|
||||
|
||||
class TestRobotsTXTGeneration(unittest.TestCase, RobotsUnittestExtensions):
|
||||
maxDiff = 8192
|
||||
|
||||
def setUp(self):
|
||||
self.robots_dict = self.loadJson("test_files/robots.json")
|
||||
|
||||
def test_robots_txt_generation(self):
|
||||
robots_txt = json_to_txt(self.robots_dict)
|
||||
self.assertEqualsFile("test_files/robots.txt", robots_txt)
|
||||
|
||||
|
||||
class TestTableMetricsGeneration(unittest.TestCase, RobotsUnittestExtensions):
|
||||
maxDiff = 32768
|
||||
|
||||
def setUp(self):
|
||||
self.robots_dict = self.loadJson("test_files/robots.json")
|
||||
|
||||
def test_table_generation(self):
|
||||
robots_table = json_to_table(self.robots_dict)
|
||||
self.assertEqualsFile("test_files/table-of-bot-metrics.md", robots_table)
|
||||
|
||||
|
||||
class TestHtaccessGeneration(unittest.TestCase, RobotsUnittestExtensions):
|
||||
maxDiff = 8192
|
||||
|
||||
def setUp(self):
|
||||
self.robots_dict = self.loadJson("test_files/robots.json")
|
||||
|
||||
def test_htaccess_generation(self):
|
||||
robots_htaccess = json_to_htaccess(self.robots_dict)
|
||||
self.assertEqualsFile("test_files/.htaccess", robots_htaccess)
|
||||
|
||||
class TestNginxConfigGeneration(unittest.TestCase, RobotsUnittestExtensions):
|
||||
maxDiff = 8192
|
||||
|
||||
def setUp(self):
|
||||
self.robots_dict = self.loadJson("test_files/robots.json")
|
||||
|
||||
def test_nginx_generation(self):
|
||||
robots_nginx = json_to_nginx(self.robots_dict)
|
||||
self.assertEqualsFile("test_files/nginx-block-ai-bots.conf", robots_nginx)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import os
|
||||
os.chdir(os.path.dirname(__file__))
|
||||
|
||||
unittest.main(verbosity=2)
|
3
nginx-block-ai-bots.conf
Normal file
3
nginx-block-ai-bots.conf
Normal file
|
@ -0,0 +1,3 @@
|
|||
if ($http_user_agent ~* "(AI2Bot|Ai2Bot\-Dolma|Amazonbot|anthropic\-ai|Applebot|Applebot\-Extended|Brightbot\ 1\.0|Bytespider|CCBot|ChatGPT\-User|Claude\-Web|ClaudeBot|cohere\-ai|cohere\-training\-data\-crawler|Crawlspace|Diffbot|DuckAssistBot|FacebookBot|FriendlyCrawler|Google\-Extended|GoogleOther|GoogleOther\-Image|GoogleOther\-Video|GPTBot|iaskspider/2\.0|ICC\-Crawler|ImagesiftBot|img2dataset|ISSCyberRiskCrawler|Kangaroo\ Bot|Meta\-ExternalAgent|Meta\-ExternalFetcher|OAI\-SearchBot|omgili|omgilibot|PanguBot|PerplexityBot|Perplexity‑User|PetalBot|Scrapy|SemrushBot\-OCOB|SemrushBot\-SWA|Sidetrade\ indexer\ bot|Timpibot|VelenPublicWebCrawler|Webzio\-Extended|YouBot)") {
|
||||
return 403;
|
||||
}
|
337
robots.json
337
robots.json
|
@ -1,87 +1,129 @@
|
|||
{
|
||||
"AI2Bot": {
|
||||
"description": "Explores 'certain domains' to find web content.",
|
||||
"frequency": "No information. provided.",
|
||||
"function": "Content is used to train open language models.",
|
||||
"operator": "[Ai2](https://allenai.org/crawler)",
|
||||
"respect": "Yes"
|
||||
"respect": "Yes",
|
||||
"function": "Content is used to train open language models.",
|
||||
"frequency": "No information provided.",
|
||||
"description": "Explores 'certain domains' to find web content."
|
||||
},
|
||||
"Ai2Bot-Dolma": {
|
||||
"description": "Explores 'certain domains' to find web content.",
|
||||
"frequency": "No information. provided.",
|
||||
"frequency": "No information provided.",
|
||||
"function": "Content is used to train open language models.",
|
||||
"operator": "[Ai2](https://allenai.org/crawler)",
|
||||
"respect": "Yes"
|
||||
},
|
||||
"Amazonbot": {
|
||||
"description": "Includes references to crawled website when surfacing answers via Alexa; does not clearly outline other uses.",
|
||||
"frequency": "No information. provided.",
|
||||
"function": "Service improvement and enabling answers for Alexa users.",
|
||||
"operator": "Amazon",
|
||||
"respect": "Yes"
|
||||
"respect": "Yes",
|
||||
"function": "Service improvement and enabling answers for Alexa users.",
|
||||
"frequency": "No information provided.",
|
||||
"description": "Includes references to crawled website when surfacing answers via Alexa; does not clearly outline other uses."
|
||||
},
|
||||
"anthropic-ai": {
|
||||
"operator": "[Anthropic](https://www.anthropic.com)",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "Scrapes data to train Anthropic's AI products.",
|
||||
"frequency": "No information provided.",
|
||||
"description": "Scrapes data to train LLMs and AI products offered by Anthropic."
|
||||
},
|
||||
"Applebot": {
|
||||
"description": "Applebot is a web crawler used by Apple to index search results that allow the Siri AI Assistant to answer user questions. Siri's answers normally contain references to the website. More info can be found at https://darkvisitors.com/agents/agents/applebot",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "AI Search Crawlers",
|
||||
"operator": "Unclear at this time.",
|
||||
"respect": "Unclear at this time."
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Search Crawlers",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Applebot is a web crawler used by Apple to index search results that allow the Siri AI Assistant to answer user questions. Siri's answers normally contain references to the website. More info can be found at https://darkvisitors.com/agents/agents/applebot"
|
||||
},
|
||||
"Applebot-Extended": {
|
||||
"description": "Apple has a secondary user agent, Applebot-Extended ... [that is] used to train Apple's foundation models powering generative AI features across Apple products, including Apple Intelligence, Services, and Developer Tools.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "Powers features in Siri, Spotlight, Safari, Apple Intelligence, and others.",
|
||||
"operator": "[Apple](https://support.apple.com/en-us/119829#datausage)",
|
||||
"respect": "Yes"
|
||||
"respect": "Yes",
|
||||
"function": "Powers features in Siri, Spotlight, Safari, Apple Intelligence, and others.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Apple has a secondary user agent, Applebot-Extended ... [that is] used to train Apple's foundation models powering generative AI features across Apple products, including Apple Intelligence, Services, and Developer Tools."
|
||||
},
|
||||
"Brightbot 1.0": {
|
||||
"operator": "Browsing.ai",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "LLM/AI training.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Scrapes data to train LLMs and AI products focused on website customer support."
|
||||
},
|
||||
"Bytespider": {
|
||||
"description": "Downloads data to train LLMS, including ChatGPT competitors.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "LLM training.",
|
||||
"operator": "ByteDance",
|
||||
"respect": "No"
|
||||
"respect": "No",
|
||||
"function": "LLM training.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Downloads data to train LLMS, including ChatGPT competitors."
|
||||
},
|
||||
"CCBot": {
|
||||
"description": "Web archive going back to 2008. [Cited in thousands of research papers per year](https://commoncrawl.org/research-papers).",
|
||||
"frequency": "Monthly at present.",
|
||||
"function": "Provides open crawl dataset, used for many purposes, including Machine Learning/AI.",
|
||||
"operator": "[Common Crawl Foundation](https://commoncrawl.org)",
|
||||
"respect": "[Yes](https://commoncrawl.org/ccbot)"
|
||||
"respect": "[Yes](https://commoncrawl.org/ccbot)",
|
||||
"function": "Provides open crawl dataset, used for many purposes, including Machine Learning/AI.",
|
||||
"frequency": "Monthly at present.",
|
||||
"description": "Web archive going back to 2008. [Cited in thousands of research papers per year](https://commoncrawl.org/research-papers)."
|
||||
},
|
||||
"ChatGPT-User": {
|
||||
"description": "Used by plugins in ChatGPT to answer queries based on user input.",
|
||||
"frequency": "Only when prompted by a user.",
|
||||
"function": "Takes action based on user prompts.",
|
||||
"operator": "[OpenAI](https://openai.com)",
|
||||
"respect": "Yes"
|
||||
"respect": "Yes",
|
||||
"function": "Takes action based on user prompts.",
|
||||
"frequency": "Only when prompted by a user.",
|
||||
"description": "Used by plugins in ChatGPT to answer queries based on user input."
|
||||
},
|
||||
"Claude-Web": {
|
||||
"description": "Scrapes data to train LLMs and AI products offered by Anthropic.",
|
||||
"frequency": "No information. provided.",
|
||||
"function": "Scrapes data to train Anthropic's AI products.",
|
||||
"operator": "[Anthropic](https://www.anthropic.com)",
|
||||
"respect": "Unclear at this time."
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "Scrapes data to train Anthropic's AI products.",
|
||||
"frequency": "No information provided.",
|
||||
"description": "Scrapes data to train LLMs and AI products offered by Anthropic."
|
||||
},
|
||||
"ClaudeBot": {
|
||||
"description": "Scrapes data to train LLMs and AI products offered by Anthropic.",
|
||||
"frequency": "No information. provided.",
|
||||
"function": "Scrapes data to train Anthropic's AI products.",
|
||||
"operator": "[Anthropic](https://www.anthropic.com)",
|
||||
"respect": "Unclear at this time."
|
||||
"respect": "[Yes](https://support.anthropic.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler)",
|
||||
"function": "Scrapes data to train Anthropic's AI products.",
|
||||
"frequency": "No information provided.",
|
||||
"description": "Scrapes data to train LLMs and AI products offered by Anthropic."
|
||||
},
|
||||
"cohere-ai": {
|
||||
"operator": "[Cohere](https://cohere.com)",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "Retrieves data to provide responses to user-initiated prompts.",
|
||||
"frequency": "Takes action based on user prompts.",
|
||||
"description": "Retrieves data based on user prompts."
|
||||
},
|
||||
"cohere-training-data-crawler": {
|
||||
"operator": "Cohere to download training data for its LLMs (Large Language Models) that power its enterprise AI products",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Data Scrapers",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "cohere-training-data-crawler is a web crawler operated by Cohere to download training data for its LLMs (Large Language Models) that power its enterprise AI products. More info can be found at https://darkvisitors.com/agents/agents/cohere-training-data-crawler"
|
||||
},
|
||||
"Crawlspace": {
|
||||
"operator": "[Crawlspace](https://crawlspace.dev)",
|
||||
"respect": "[Yes](https://news.ycombinator.com/item?id=42756654)",
|
||||
"function": "Scrapes data",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Provides crawling services for any purpose, probably including AI model training."
|
||||
},
|
||||
"Diffbot": {
|
||||
"description": "Diffbot is an application used to parse web pages into structured data; this data is used for monitoring or AI model training.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "Aggregates structured web data for monitoring and AI model training.",
|
||||
"operator": "[Diffbot](https://www.diffbot.com/)",
|
||||
"respect": "At the discretion of Diffbot users."
|
||||
"respect": "At the discretion of Diffbot users.",
|
||||
"function": "Aggregates structured web data for monitoring and AI model training.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Diffbot is an application used to parse web pages into structured data; this data is used for monitoring or AI model training."
|
||||
},
|
||||
"DuckAssistBot": {
|
||||
"operator": "Unclear at this time.",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Assistants",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "DuckAssistBot is used by DuckDuckGo's DuckAssist feature to fetch content and generate realtime AI answers to user searches. More info can be found at https://darkvisitors.com/agents/agents/duckassistbot"
|
||||
},
|
||||
"FacebookBot": {
|
||||
"description": "Officially used for training Meta \"speech recognition technology,\" unknown if used to train Meta AI specifically.",
|
||||
"frequency": "Up to 1 page per second",
|
||||
"function": "Training language models",
|
||||
"operator": "Meta/Facebook",
|
||||
"respect": "[Yes](https://developers.facebook.com/docs/sharing/bot/)"
|
||||
"respect": "[Yes](https://developers.facebook.com/docs/sharing/bot/)",
|
||||
"function": "Training language models",
|
||||
"frequency": "Up to 1 page per second",
|
||||
"description": "Officially used for training Meta \"speech recognition technology,\" unknown if used to train Meta AI specifically."
|
||||
},
|
||||
"FriendlyCrawler": {
|
||||
"description": "Unclear who the operator is; but data is used for training/machine learning.",
|
||||
|
@ -90,19 +132,12 @@
|
|||
"operator": "Unknown",
|
||||
"respect": "[Yes](https://imho.alex-kunz.com/2024/01/25/an-update-on-friendly-crawler)"
|
||||
},
|
||||
"GPTBot": {
|
||||
"description": "Data is used to train current and future models, removed paywalled data, PII and data that violates the company's policies.",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data to train OpenAI's products.",
|
||||
"operator": "[OpenAI](https://openai.com)",
|
||||
"respect": "Yes"
|
||||
},
|
||||
"Google-Extended": {
|
||||
"description": "Used to train Gemini and Vertex AI generative APIs. Does not impact a site's inclusion or ranking in Google Search.",
|
||||
"frequency": "No information.",
|
||||
"function": "LLM training.",
|
||||
"operator": "Google",
|
||||
"respect": "[Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers)"
|
||||
"respect": "[Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers)",
|
||||
"function": "LLM training.",
|
||||
"frequency": "No information.",
|
||||
"description": "Used to train Gemini and Vertex AI generative APIs. Does not impact a site's inclusion or ranking in Google Search."
|
||||
},
|
||||
"GoogleOther": {
|
||||
"description": "\"Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development.\"",
|
||||
|
@ -125,6 +160,20 @@
|
|||
"operator": "Google",
|
||||
"respect": "[Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers)"
|
||||
},
|
||||
"GPTBot": {
|
||||
"operator": "[OpenAI](https://openai.com)",
|
||||
"respect": "Yes",
|
||||
"function": "Scrapes data to train OpenAI's products.",
|
||||
"frequency": "No information.",
|
||||
"description": "Data is used to train current and future models, removed paywalled data, PII and data that violates the company's policies."
|
||||
},
|
||||
"iaskspider/2.0": {
|
||||
"description": "Used to provide answers to user queries.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "Crawls sites to provide answers to user queries.",
|
||||
"operator": "iAsk",
|
||||
"respect": "No"
|
||||
},
|
||||
"ICC-Crawler": {
|
||||
"description": "Use the collected data for artificial intelligence technologies; provide data to third parties, including commercial companies; those companies can use the data for their own business.",
|
||||
"frequency": "No information.",
|
||||
|
@ -132,13 +181,6 @@
|
|||
"operator": "[NICT](https://nict.go.jp)",
|
||||
"respect": "Yes"
|
||||
},
|
||||
"ISSCyberRiskCrawler": {
|
||||
"description": "Used to train machine learning based models to quantify cyber risk.",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data to train machine learning models.",
|
||||
"operator": "[ISS-Corporate](https://iss-cyber.com)",
|
||||
"respect": "No"
|
||||
},
|
||||
"ImagesiftBot": {
|
||||
"description": "Once images and text are downloaded from a webpage, ImageSift analyzes this data from the page and stores the information in an index. Our web intelligence products use this index to enable search and retrieval of similar images.",
|
||||
"frequency": "No information.",
|
||||
|
@ -146,40 +188,82 @@
|
|||
"operator": "[ImageSift](https://imagesift.com)",
|
||||
"respect": "[Yes](https://imagesift.com/about)"
|
||||
},
|
||||
"Kangaroo Bot": {
|
||||
"description": "Kangaroo Bot is used by the company Kangaroo LLM to download data to train AI models tailored to Australian language and culture. More info can be found at https://darkvisitors.com/agents/agents/kangaroo-bot",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "AI Data Scrapers",
|
||||
"operator": "Unclear at this time.",
|
||||
"img2dataset": {
|
||||
"description": "Downloads large sets of images into datasets for LLM training or other purposes.",
|
||||
"frequency": "At the discretion of img2dataset users.",
|
||||
"function": "Scrapes images for use in LLMs.",
|
||||
"operator": "[img2dataset](https://github.com/rom1504/img2dataset)",
|
||||
"respect": "Unclear at this time."
|
||||
},
|
||||
"ISSCyberRiskCrawler": {
|
||||
"description": "Used to train machine learning based models to quantify cyber risk.",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data to train machine learning models.",
|
||||
"operator": "[ISS-Corporate](https://iss-cyber.com)",
|
||||
"respect": "No"
|
||||
},
|
||||
"Kangaroo Bot": {
|
||||
"operator": "Unclear at this time.",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Data Scrapers",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Kangaroo Bot is used by the company Kangaroo LLM to download data to train AI models tailored to Australian language and culture. More info can be found at https://darkvisitors.com/agents/agents/kangaroo-bot"
|
||||
},
|
||||
"Meta-ExternalAgent": {
|
||||
"description": "\"The Meta-ExternalAgent crawler crawls the web for use cases such as training AI models or improving products by indexing content directly.\"",
|
||||
"frequency": "No information.",
|
||||
"function": "Used to train models and improve products.",
|
||||
"operator": "[Meta](https://developers.facebook.com/docs/sharing/webmasters/web-crawlers)",
|
||||
"respect": "Yes."
|
||||
"respect": "Yes.",
|
||||
"function": "Used to train models and improve products.",
|
||||
"frequency": "No information.",
|
||||
"description": "\"The Meta-ExternalAgent crawler crawls the web for use cases such as training AI models or improving products by indexing content directly.\""
|
||||
},
|
||||
"Meta-ExternalFetcher": {
|
||||
"description": "Meta-ExternalFetcher is dispatched by Meta AI products in response to user prompts, when they need to fetch an individual links. More info can be found at https://darkvisitors.com/agents/agents/meta-externalfetcher",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "AI Assistants",
|
||||
"operator": "Unclear at this time.",
|
||||
"respect": "Unclear at this time."
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Assistants",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Meta-ExternalFetcher is dispatched by Meta AI products in response to user prompts, when they need to fetch an individual links. More info can be found at https://darkvisitors.com/agents/agents/meta-externalfetcher"
|
||||
},
|
||||
"OAI-SearchBot": {
|
||||
"description": "Crawls sites to surface as results in SearchGPT.",
|
||||
"frequency": "No information.",
|
||||
"function": "Search result generation.",
|
||||
"operator": "[OpenAI](https://openai.com)",
|
||||
"respect": "[Yes](https://platform.openai.com/docs/bots)"
|
||||
"respect": "[Yes](https://platform.openai.com/docs/bots)",
|
||||
"function": "Search result generation.",
|
||||
"frequency": "No information.",
|
||||
"description": "Crawls sites to surface as results in SearchGPT."
|
||||
},
|
||||
"omgili": {
|
||||
"operator": "[Webz.io](https://webz.io/)",
|
||||
"respect": "[Yes](https://webz.io/blog/web-data/what-is-the-omgili-bot-and-why-is-it-crawling-your-website/)",
|
||||
"function": "Data is sold.",
|
||||
"frequency": "No information.",
|
||||
"description": "Crawls sites for APIs used by Hootsuite, Sprinklr, NetBase, and other companies. Data also sold for research purposes or LLM training."
|
||||
},
|
||||
"omgilibot": {
|
||||
"description": "Legacy user agent initially used for Omgili search engine. Unknown if still used, `omgili` agent still used by Webz.io.",
|
||||
"frequency": "No information.",
|
||||
"function": "Data is sold.",
|
||||
"operator": "[Webz.io](https://webz.io/)",
|
||||
"respect": "[Yes](https://web.archive.org/web/20170704003301/http://omgili.com/Crawler.html)"
|
||||
},
|
||||
"PanguBot": {
|
||||
"operator": "the Chinese company Huawei",
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Data Scrapers",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "PanguBot is a web crawler operated by the Chinese company Huawei. It's used to download training data for its multimodal LLM (Large Language Model) called PanGu. More info can be found at https://darkvisitors.com/agents/agents/pangubot"
|
||||
},
|
||||
"PerplexityBot": {
|
||||
"description": "Operated by Perplexity to obtain results in response to user queries.",
|
||||
"frequency": "Takes action based on user prompts.",
|
||||
"function": "Used to answer queries at the request of users.",
|
||||
"operator": "[Perplexity](https://www.perplexity.ai/)",
|
||||
"respect": "[No](https://www.macstories.net/stories/wired-confirms-perplexity-is-bypassing-efforts-by-websites-to-block-its-web-crawler/)"
|
||||
"respect": "[Yes](https://docs.perplexity.ai/guides/bots)",
|
||||
"function": "Search result generation.",
|
||||
"frequency": "No information.",
|
||||
"description": "Crawls sites to surface as results in Perplexity."
|
||||
},
|
||||
"Perplexity\u2011User": {
|
||||
"operator": "[Perplexity](https://www.perplexity.ai/)",
|
||||
"respect": "[No](https://docs.perplexity.ai/guides/bots)",
|
||||
"function": "Used to answer queries at the request of users.",
|
||||
"frequency": "Only when prompted by a user.",
|
||||
"description": "Visit web pages to help provide an accurate answer and include links to the page in Perplexity response."
|
||||
},
|
||||
"PetalBot": {
|
||||
"description": "Operated by Huawei to provide search and AI assistant services.",
|
||||
|
@ -195,6 +279,20 @@
|
|||
"operator": "[Zyte](https://www.zyte.com)",
|
||||
"respect": "Unclear at this time."
|
||||
},
|
||||
"SemrushBot-OCOB": {
|
||||
"operator": "[Semrush](https://www.semrush.com/)",
|
||||
"respect": "[Yes](https://www.semrush.com/bot/)",
|
||||
"function": "Crawls your site for ContentShake AI tool.",
|
||||
"frequency": "Roughly once every 10 seconds.",
|
||||
"description": "You enter one text (on-demand) and we will make suggestions on it (the tool uses AI but we are not actively crawling the web, you need to manually enter one text/URL)."
|
||||
},
|
||||
"SemrushBot-SWA": {
|
||||
"operator": "[Semrush](https://www.semrush.com/)",
|
||||
"respect": "[Yes](https://www.semrush.com/bot/)",
|
||||
"function": "Checks URLs on your site for SWA tool.",
|
||||
"frequency": "Roughly once every 10 seconds.",
|
||||
"description": "You enter one text (on-demand) and we will make suggestions on it (the tool uses AI but we are not actively crawling the web, you need to manually enter one text/URL)."
|
||||
},
|
||||
"Sidetrade indexer bot": {
|
||||
"description": "AI product training.",
|
||||
"frequency": "No information.",
|
||||
|
@ -203,11 +301,11 @@
|
|||
"respect": "Unclear at this time."
|
||||
},
|
||||
"Timpibot": {
|
||||
"description": "Makes data available for training AI models.",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data for use in training LLMs.",
|
||||
"operator": "[Timpi](https://timpi.io)",
|
||||
"respect": "Unclear at this time."
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "Scrapes data for use in training LLMs.",
|
||||
"frequency": "No information.",
|
||||
"description": "Makes data available for training AI models."
|
||||
},
|
||||
"VelenPublicWebCrawler": {
|
||||
"description": "\"Our goal with this crawler is to build business datasets and machine learning models to better understand the web.\"",
|
||||
|
@ -217,66 +315,17 @@
|
|||
"respect": "[Yes](https://velen.io)"
|
||||
},
|
||||
"Webzio-Extended": {
|
||||
"description": "Webzio-Extended is a web crawler used by Webz.io to maintain a repository of web crawl data that it sells to other companies, including those using it to train AI models. More info can be found at https://darkvisitors.com/agents/agents/webzio-extended",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "AI Data Scrapers",
|
||||
"operator": "Unclear at this time.",
|
||||
"respect": "Unclear at this time."
|
||||
"respect": "Unclear at this time.",
|
||||
"function": "AI Data Scrapers",
|
||||
"frequency": "Unclear at this time.",
|
||||
"description": "Webzio-Extended is a web crawler used by Webz.io to maintain a repository of web crawl data that it sells to other companies, including those using it to train AI models. More info can be found at https://darkvisitors.com/agents/agents/webzio-extended"
|
||||
},
|
||||
"YouBot": {
|
||||
"description": "Retrieves data used for You.com web search engine and LLMs.",
|
||||
"frequency": "No information.",
|
||||
"function": "Scrapes data for search engine and LLMs.",
|
||||
"operator": "[You](https://about.you.com/youchat/)",
|
||||
"respect": "[Yes](https://about.you.com/youbot/)"
|
||||
},
|
||||
"anthropic-ai": {
|
||||
"description": "Scrapes data to train LLMs and AI products offered by Anthropic.",
|
||||
"frequency": "No information. provided.",
|
||||
"function": "Scrapes data to train Anthropic's AI products.",
|
||||
"operator": "[Anthropic](https://www.anthropic.com)",
|
||||
"respect": "Unclear at this time."
|
||||
},
|
||||
"cohere-ai": {
|
||||
"description": "Retrieves data based on user prompts.",
|
||||
"frequency": "Takes action based on user prompts.",
|
||||
"function": "Retrieves data to provide responses to user-initiated prompts.",
|
||||
"operator": "[Cohere](https://cohere.com)",
|
||||
"respect": "Unclear at this time."
|
||||
},
|
||||
"facebookexternalhit": {
|
||||
"description": "Unclear at this time.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "No information.",
|
||||
"operator": "Meta/Facebook",
|
||||
"respect": "[Yes](https://developers.facebook.com/docs/sharing/bot/)"
|
||||
},
|
||||
"iaskspider/2.0": {
|
||||
"description": "Used to provide answers to user queries.",
|
||||
"frequency": "Unclear at this time.",
|
||||
"function": "Crawls sites to provide answers to user queries.",
|
||||
"operator": "iAsk",
|
||||
"respect": "No"
|
||||
},
|
||||
"img2dataset": {
|
||||
"description": "Downloads large sets of images into datasets for LLM training or other purposes.",
|
||||
"frequency": "At the discretion of img2dataset users.",
|
||||
"function": "Scrapes images for use in LLMs.",
|
||||
"operator": "[img2dataset](https://github.com/rom1504/img2dataset)",
|
||||
"respect": "Unclear at this time."
|
||||
},
|
||||
"omgili": {
|
||||
"description": "Crawls sites for APIs used by Hootsuite, Sprinklr, NetBase, and other companies. Data also sold for research purposes or LLM training.",
|
||||
"respect": "[Yes](https://about.you.com/youbot/)",
|
||||
"function": "Scrapes data for search engine and LLMs.",
|
||||
"frequency": "No information.",
|
||||
"function": "Data is sold.",
|
||||
"operator": "[Webz.io](https://webz.io/)",
|
||||
"respect": "[Yes](https://webz.io/blog/web-data/what-is-the-omgili-bot-and-why-is-it-crawling-your-website/)"
|
||||
},
|
||||
"omgilibot": {
|
||||
"description": "Legacy user agent initially used for Omgili search engine. Unknown if still used, `omgili` agent still used by Webz.io.",
|
||||
"frequency": "No information.",
|
||||
"function": "Data is sold.",
|
||||
"operator": "[Webz.io](https://webz.io/)",
|
||||
"respect": "[Yes](https://web.archive.org/web/20170704003301/http://omgili.com/Crawler.html)"
|
||||
"description": "Retrieves data used for You.com web search engine and LLMs."
|
||||
}
|
||||
}
|
27
robots.txt
27
robots.txt
|
@ -1,41 +1,48 @@
|
|||
User-agent: AI2Bot
|
||||
User-agent: Ai2Bot-Dolma
|
||||
User-agent: Amazonbot
|
||||
User-agent: anthropic-ai
|
||||
User-agent: Applebot
|
||||
User-agent: Applebot-Extended
|
||||
User-agent: Brightbot 1.0
|
||||
User-agent: Bytespider
|
||||
User-agent: CCBot
|
||||
User-agent: ChatGPT-User
|
||||
User-agent: Claude-Web
|
||||
User-agent: ClaudeBot
|
||||
User-agent: cohere-ai
|
||||
User-agent: cohere-training-data-crawler
|
||||
User-agent: Crawlspace
|
||||
User-agent: Diffbot
|
||||
User-agent: DuckAssistBot
|
||||
User-agent: FacebookBot
|
||||
User-agent: FriendlyCrawler
|
||||
User-agent: GPTBot
|
||||
User-agent: Google-Extended
|
||||
User-agent: GoogleOther
|
||||
User-agent: GoogleOther-Image
|
||||
User-agent: GoogleOther-Video
|
||||
User-agent: GPTBot
|
||||
User-agent: iaskspider/2.0
|
||||
User-agent: ICC-Crawler
|
||||
User-agent: ISSCyberRiskCrawler
|
||||
User-agent: ImagesiftBot
|
||||
User-agent: img2dataset
|
||||
User-agent: ISSCyberRiskCrawler
|
||||
User-agent: Kangaroo Bot
|
||||
User-agent: Meta-ExternalAgent
|
||||
User-agent: Meta-ExternalFetcher
|
||||
User-agent: OAI-SearchBot
|
||||
User-agent: omgili
|
||||
User-agent: omgilibot
|
||||
User-agent: PanguBot
|
||||
User-agent: PerplexityBot
|
||||
User-agent: Perplexity‑User
|
||||
User-agent: PetalBot
|
||||
User-agent: Scrapy
|
||||
User-agent: SemrushBot-OCOB
|
||||
User-agent: SemrushBot-SWA
|
||||
User-agent: Sidetrade indexer bot
|
||||
User-agent: Timpibot
|
||||
User-agent: VelenPublicWebCrawler
|
||||
User-agent: Webzio-Extended
|
||||
User-agent: YouBot
|
||||
User-agent: anthropic-ai
|
||||
User-agent: cohere-ai
|
||||
User-agent: facebookexternalhit
|
||||
User-agent: iaskspider/2.0
|
||||
User-agent: img2dataset
|
||||
User-agent: omgili
|
||||
User-agent: omgilibot
|
||||
Disallow: /
|
||||
Disallow: /
|
||||
|
|
|
@ -1,42 +1,49 @@
|
|||
| Name | Operator | Respects `robots.txt` | Data use | Visit regularity | Description |
|
||||
|-----|----------|-----------------------|----------|------------------|-------------|
|
||||
| AI2Bot | [Ai2](https://allenai.org/crawler) | Yes | Content is used to train open language models. | No information. provided. | Explores 'certain domains' to find web content. |
|
||||
| Ai2Bot-Dolma | [Ai2](https://allenai.org/crawler) | Yes | Content is used to train open language models. | No information. provided. | Explores 'certain domains' to find web content. |
|
||||
| Amazonbot | Amazon | Yes | Service improvement and enabling answers for Alexa users. | No information. provided. | Includes references to crawled website when surfacing answers via Alexa; does not clearly outline other uses. |
|
||||
| Applebot | Unclear at this time. | Unclear at this time. | AI Search Crawlers | Unclear at this time. | Applebot is a web crawler used by Apple to index search results that allow the Siri AI Assistant to answer user questions. Siri's answers normally contain references to the website. More info can be found at https://darkvisitors.com/agents/agents/applebot |
|
||||
| Applebot-Extended | [Apple](https://support.apple.com/en-us/119829#datausage) | Yes | Powers features in Siri, Spotlight, Safari, Apple Intelligence, and others. | Unclear at this time. | Apple has a secondary user agent, Applebot-Extended ... [that is] used to train Apple's foundation models powering generative AI features across Apple products, including Apple Intelligence, Services, and Developer Tools. |
|
||||
| Bytespider | ByteDance | No | LLM training. | Unclear at this time. | Downloads data to train LLMS, including ChatGPT competitors. |
|
||||
| CCBot | [Common Crawl Foundation](https://commoncrawl.org) | [Yes](https://commoncrawl.org/ccbot) | Provides open crawl dataset, used for many purposes, including Machine Learning/AI. | Monthly at present. | Web archive going back to 2008. [Cited in thousands of research papers per year](https://commoncrawl.org/research-papers). |
|
||||
| ChatGPT-User | [OpenAI](https://openai.com) | Yes | Takes action based on user prompts. | Only when prompted by a user. | Used by plugins in ChatGPT to answer queries based on user input. |
|
||||
| Claude-Web | [Anthropic](https://www.anthropic.com) | Unclear at this time. | Scrapes data to train Anthropic's AI products. | No information. provided. | Scrapes data to train LLMs and AI products offered by Anthropic. |
|
||||
| ClaudeBot | [Anthropic](https://www.anthropic.com) | Unclear at this time. | Scrapes data to train Anthropic's AI products. | No information. provided. | Scrapes data to train LLMs and AI products offered by Anthropic. |
|
||||
| Diffbot | [Diffbot](https://www.diffbot.com/) | At the discretion of Diffbot users. | Aggregates structured web data for monitoring and AI model training. | Unclear at this time. | Diffbot is an application used to parse web pages into structured data; this data is used for monitoring or AI model training. |
|
||||
| FacebookBot | Meta/Facebook | [Yes](https://developers.facebook.com/docs/sharing/bot/) | Training language models | Up to 1 page per second | Officially used for training Meta "speech recognition technology," unknown if used to train Meta AI specifically. |
|
||||
| FriendlyCrawler | Unknown | [Yes](https://imho.alex-kunz.com/2024/01/25/an-update-on-friendly-crawler) | We are using the data from the crawler to build datasets for machine learning experiments. | Unclear at this time. | Unclear who the operator is; but data is used for training/machine learning. |
|
||||
| GPTBot | [OpenAI](https://openai.com) | Yes | Scrapes data to train OpenAI's products. | No information. | Data is used to train current and future models, removed paywalled data, PII and data that violates the company's policies. |
|
||||
| Google-Extended | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | LLM training. | No information. | Used to train Gemini and Vertex AI generative APIs. Does not impact a site's inclusion or ranking in Google Search. |
|
||||
| GoogleOther | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | Scrapes data. | No information. | "Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development." |
|
||||
| GoogleOther-Image | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | Scrapes data. | No information. | "Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development." |
|
||||
| GoogleOther-Video | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | Scrapes data. | No information. | "Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development." |
|
||||
| ICC-Crawler | [NICT](https://nict.go.jp) | Yes | Scrapes data to train and support AI technologies. | No information. | Use the collected data for artificial intelligence technologies; provide data to third parties, including commercial companies; those companies can use the data for their own business. |
|
||||
| ISSCyberRiskCrawler | [ISS-Corporate](https://iss-cyber.com) | No | Scrapes data to train machine learning models. | No information. | Used to train machine learning based models to quantify cyber risk. |
|
||||
| ImagesiftBot | [ImageSift](https://imagesift.com) | [Yes](https://imagesift.com/about) | ImageSiftBot is a web crawler that scrapes the internet for publicly available images to support our suite of web intelligence products | No information. | Once images and text are downloaded from a webpage, ImageSift analyzes this data from the page and stores the information in an index. Our web intelligence products use this index to enable search and retrieval of similar images. |
|
||||
| Kangaroo Bot | Unclear at this time. | Unclear at this time. | AI Data Scrapers | Unclear at this time. | Kangaroo Bot is used by the company Kangaroo LLM to download data to train AI models tailored to Australian language and culture. More info can be found at https://darkvisitors.com/agents/agents/kangaroo-bot |
|
||||
| Meta-ExternalAgent | [Meta](https://developers.facebook.com/docs/sharing/webmasters/web-crawlers) | Yes. | Used to train models and improve products. | No information. | "The Meta-ExternalAgent crawler crawls the web for use cases such as training AI models or improving products by indexing content directly." |
|
||||
| Meta-ExternalFetcher | Unclear at this time. | Unclear at this time. | AI Assistants | Unclear at this time. | Meta-ExternalFetcher is dispatched by Meta AI products in response to user prompts, when they need to fetch an individual links. More info can be found at https://darkvisitors.com/agents/agents/meta-externalfetcher |
|
||||
| OAI-SearchBot | [OpenAI](https://openai.com) | [Yes](https://platform.openai.com/docs/bots) | Search result generation. | No information. | Crawls sites to surface as results in SearchGPT. |
|
||||
| PerplexityBot | [Perplexity](https://www.perplexity.ai/) | [No](https://www.macstories.net/stories/wired-confirms-perplexity-is-bypassing-efforts-by-websites-to-block-its-web-crawler/) | Used to answer queries at the request of users. | Takes action based on user prompts. | Operated by Perplexity to obtain results in response to user queries. |
|
||||
| PetalBot | [Huawei](https://huawei.com/) | Yes | Used to provide recommendations in Hauwei assistant and AI search services. | No explicit frequency provided. | Operated by Huawei to provide search and AI assistant services. |
|
||||
| Scrapy | [Zyte](https://www.zyte.com) | Unclear at this time. | Scrapes data for a variety of uses including training AI. | No information. | "AI and machine learning applications often need large amounts of quality data, and web data extraction is a fast, efficient way to build structured data sets." |
|
||||
| Sidetrade indexer bot | [Sidetrade](https://www.sidetrade.com) | Unclear at this time. | Extracts data for a variety of uses including training AI. | No information. | AI product training. |
|
||||
| Timpibot | [Timpi](https://timpi.io) | Unclear at this time. | Scrapes data for use in training LLMs. | No information. | Makes data available for training AI models. |
|
||||
| VelenPublicWebCrawler | [Velen Crawler](https://velen.io) | [Yes](https://velen.io) | Scrapes data for business data sets and machine learning models. | No information. | "Our goal with this crawler is to build business datasets and machine learning models to better understand the web." |
|
||||
| Webzio-Extended | Unclear at this time. | Unclear at this time. | AI Data Scrapers | Unclear at this time. | Webzio-Extended is a web crawler used by Webz.io to maintain a repository of web crawl data that it sells to other companies, including those using it to train AI models. More info can be found at https://darkvisitors.com/agents/agents/webzio-extended |
|
||||
| YouBot | [You](https://about.you.com/youchat/) | [Yes](https://about.you.com/youbot/) | Scrapes data for search engine and LLMs. | No information. | Retrieves data used for You.com web search engine and LLMs. |
|
||||
| anthropic-ai | [Anthropic](https://www.anthropic.com) | Unclear at this time. | Scrapes data to train Anthropic's AI products. | No information. provided. | Scrapes data to train LLMs and AI products offered by Anthropic. |
|
||||
| cohere-ai | [Cohere](https://cohere.com) | Unclear at this time. | Retrieves data to provide responses to user-initiated prompts. | Takes action based on user prompts. | Retrieves data based on user prompts. |
|
||||
| facebookexternalhit | Meta/Facebook | [Yes](https://developers.facebook.com/docs/sharing/bot/) | No information. | Unclear at this time. | Unclear at this time. |
|
||||
| iaskspider/2.0 | iAsk | No | Crawls sites to provide answers to user queries. | Unclear at this time. | Used to provide answers to user queries. |
|
||||
| img2dataset | [img2dataset](https://github.com/rom1504/img2dataset) | Unclear at this time. | Scrapes images for use in LLMs. | At the discretion of img2dataset users. | Downloads large sets of images into datasets for LLM training or other purposes. |
|
||||
| omgili | [Webz.io](https://webz.io/) | [Yes](https://webz.io/blog/web-data/what-is-the-omgili-bot-and-why-is-it-crawling-your-website/) | Data is sold. | No information. | Crawls sites for APIs used by Hootsuite, Sprinklr, NetBase, and other companies. Data also sold for research purposes or LLM training. |
|
||||
| omgilibot | [Webz.io](https://webz.io/) | [Yes](https://web.archive.org/web/20170704003301/http://omgili.com/Crawler.html) | Data is sold. | No information. | Legacy user agent initially used for Omgili search engine. Unknown if still used, `omgili` agent still used by Webz.io. |
|
||||
|------|----------|-----------------------|----------|------------------|-------------|
|
||||
| AI2Bot | [Ai2](https://allenai.org/crawler) | Yes | Content is used to train open language models. | No information provided. | Explores 'certain domains' to find web content. |
|
||||
| Ai2Bot\-Dolma | [Ai2](https://allenai.org/crawler) | Yes | Content is used to train open language models. | No information provided. | Explores 'certain domains' to find web content. |
|
||||
| Amazonbot | Amazon | Yes | Service improvement and enabling answers for Alexa users. | No information provided. | Includes references to crawled website when surfacing answers via Alexa; does not clearly outline other uses. |
|
||||
| anthropic\-ai | [Anthropic](https://www.anthropic.com) | Unclear at this time. | Scrapes data to train Anthropic's AI products. | No information provided. | Scrapes data to train LLMs and AI products offered by Anthropic. |
|
||||
| Applebot | Unclear at this time. | Unclear at this time. | AI Search Crawlers | Unclear at this time. | Applebot is a web crawler used by Apple to index search results that allow the Siri AI Assistant to answer user questions. Siri's answers normally contain references to the website. More info can be found at https://darkvisitors.com/agents/agents/applebot |
|
||||
| Applebot\-Extended | [Apple](https://support.apple.com/en-us/119829#datausage) | Yes | Powers features in Siri, Spotlight, Safari, Apple Intelligence, and others. | Unclear at this time. | Apple has a secondary user agent, Applebot-Extended ... [that is] used to train Apple's foundation models powering generative AI features across Apple products, including Apple Intelligence, Services, and Developer Tools. |
|
||||
| Brightbot 1\.0 | Browsing.ai | Unclear at this time. | LLM/AI training. | Unclear at this time. | Scrapes data to train LLMs and AI products focused on website customer support. |
|
||||
| Bytespider | ByteDance | No | LLM training. | Unclear at this time. | Downloads data to train LLMS, including ChatGPT competitors. |
|
||||
| CCBot | [Common Crawl Foundation](https://commoncrawl.org) | [Yes](https://commoncrawl.org/ccbot) | Provides open crawl dataset, used for many purposes, including Machine Learning/AI. | Monthly at present. | Web archive going back to 2008. [Cited in thousands of research papers per year](https://commoncrawl.org/research-papers). |
|
||||
| ChatGPT\-User | [OpenAI](https://openai.com) | Yes | Takes action based on user prompts. | Only when prompted by a user. | Used by plugins in ChatGPT to answer queries based on user input. |
|
||||
| Claude\-Web | [Anthropic](https://www.anthropic.com) | Unclear at this time. | Scrapes data to train Anthropic's AI products. | No information provided. | Scrapes data to train LLMs and AI products offered by Anthropic. |
|
||||
| ClaudeBot | [Anthropic](https://www.anthropic.com) | [Yes](https://support.anthropic.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler) | Scrapes data to train Anthropic's AI products. | No information provided. | Scrapes data to train LLMs and AI products offered by Anthropic. |
|
||||
| cohere\-ai | [Cohere](https://cohere.com) | Unclear at this time. | Retrieves data to provide responses to user-initiated prompts. | Takes action based on user prompts. | Retrieves data based on user prompts. |
|
||||
| cohere\-training\-data\-crawler | Cohere to download training data for its LLMs (Large Language Models) that power its enterprise AI products | Unclear at this time. | AI Data Scrapers | Unclear at this time. | cohere-training-data-crawler is a web crawler operated by Cohere to download training data for its LLMs (Large Language Models) that power its enterprise AI products. More info can be found at https://darkvisitors.com/agents/agents/cohere-training-data-crawler |
|
||||
| Crawlspace | [Crawlspace](https://crawlspace.dev) | [Yes](https://news.ycombinator.com/item?id=42756654) | Scrapes data | Unclear at this time. | Provides crawling services for any purpose, probably including AI model training. |
|
||||
| Diffbot | [Diffbot](https://www.diffbot.com/) | At the discretion of Diffbot users. | Aggregates structured web data for monitoring and AI model training. | Unclear at this time. | Diffbot is an application used to parse web pages into structured data; this data is used for monitoring or AI model training. |
|
||||
| DuckAssistBot | Unclear at this time. | Unclear at this time. | AI Assistants | Unclear at this time. | DuckAssistBot is used by DuckDuckGo's DuckAssist feature to fetch content and generate realtime AI answers to user searches. More info can be found at https://darkvisitors.com/agents/agents/duckassistbot |
|
||||
| FacebookBot | Meta/Facebook | [Yes](https://developers.facebook.com/docs/sharing/bot/) | Training language models | Up to 1 page per second | Officially used for training Meta "speech recognition technology," unknown if used to train Meta AI specifically. |
|
||||
| FriendlyCrawler | Unknown | [Yes](https://imho.alex-kunz.com/2024/01/25/an-update-on-friendly-crawler) | We are using the data from the crawler to build datasets for machine learning experiments. | Unclear at this time. | Unclear who the operator is; but data is used for training/machine learning. |
|
||||
| Google\-Extended | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | LLM training. | No information. | Used to train Gemini and Vertex AI generative APIs. Does not impact a site's inclusion or ranking in Google Search. |
|
||||
| GoogleOther | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | Scrapes data. | No information. | "Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development." |
|
||||
| GoogleOther\-Image | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | Scrapes data. | No information. | "Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development." |
|
||||
| GoogleOther\-Video | Google | [Yes](https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers) | Scrapes data. | No information. | "Used by various product teams for fetching publicly accessible content from sites. For example, it may be used for one-off crawls for internal research and development." |
|
||||
| GPTBot | [OpenAI](https://openai.com) | Yes | Scrapes data to train OpenAI's products. | No information. | Data is used to train current and future models, removed paywalled data, PII and data that violates the company's policies. |
|
||||
| iaskspider/2\.0 | iAsk | No | Crawls sites to provide answers to user queries. | Unclear at this time. | Used to provide answers to user queries. |
|
||||
| ICC\-Crawler | [NICT](https://nict.go.jp) | Yes | Scrapes data to train and support AI technologies. | No information. | Use the collected data for artificial intelligence technologies; provide data to third parties, including commercial companies; those companies can use the data for their own business. |
|
||||
| ImagesiftBot | [ImageSift](https://imagesift.com) | [Yes](https://imagesift.com/about) | ImageSiftBot is a web crawler that scrapes the internet for publicly available images to support our suite of web intelligence products | No information. | Once images and text are downloaded from a webpage, ImageSift analyzes this data from the page and stores the information in an index. Our web intelligence products use this index to enable search and retrieval of similar images. |
|
||||
| img2dataset | [img2dataset](https://github.com/rom1504/img2dataset) | Unclear at this time. | Scrapes images for use in LLMs. | At the discretion of img2dataset users. | Downloads large sets of images into datasets for LLM training or other purposes. |
|
||||
| ISSCyberRiskCrawler | [ISS-Corporate](https://iss-cyber.com) | No | Scrapes data to train machine learning models. | No information. | Used to train machine learning based models to quantify cyber risk. |
|
||||
| Kangaroo Bot | Unclear at this time. | Unclear at this time. | AI Data Scrapers | Unclear at this time. | Kangaroo Bot is used by the company Kangaroo LLM to download data to train AI models tailored to Australian language and culture. More info can be found at https://darkvisitors.com/agents/agents/kangaroo-bot |
|
||||
| Meta\-ExternalAgent | [Meta](https://developers.facebook.com/docs/sharing/webmasters/web-crawlers) | Yes. | Used to train models and improve products. | No information. | "The Meta-ExternalAgent crawler crawls the web for use cases such as training AI models or improving products by indexing content directly." |
|
||||
| Meta\-ExternalFetcher | Unclear at this time. | Unclear at this time. | AI Assistants | Unclear at this time. | Meta-ExternalFetcher is dispatched by Meta AI products in response to user prompts, when they need to fetch an individual links. More info can be found at https://darkvisitors.com/agents/agents/meta-externalfetcher |
|
||||
| OAI\-SearchBot | [OpenAI](https://openai.com) | [Yes](https://platform.openai.com/docs/bots) | Search result generation. | No information. | Crawls sites to surface as results in SearchGPT. |
|
||||
| omgili | [Webz.io](https://webz.io/) | [Yes](https://webz.io/blog/web-data/what-is-the-omgili-bot-and-why-is-it-crawling-your-website/) | Data is sold. | No information. | Crawls sites for APIs used by Hootsuite, Sprinklr, NetBase, and other companies. Data also sold for research purposes or LLM training. |
|
||||
| omgilibot | [Webz.io](https://webz.io/) | [Yes](https://web.archive.org/web/20170704003301/http://omgili.com/Crawler.html) | Data is sold. | No information. | Legacy user agent initially used for Omgili search engine. Unknown if still used, `omgili` agent still used by Webz.io. |
|
||||
| PanguBot | the Chinese company Huawei | Unclear at this time. | AI Data Scrapers | Unclear at this time. | PanguBot is a web crawler operated by the Chinese company Huawei. It's used to download training data for its multimodal LLM (Large Language Model) called PanGu. More info can be found at https://darkvisitors.com/agents/agents/pangubot |
|
||||
| PerplexityBot | [Perplexity](https://www.perplexity.ai/) | [Yes](https://docs.perplexity.ai/guides/bots) | Search result generation. | No information. | Crawls sites to surface as results in Perplexity. |
|
||||
| Perplexity‑User | [Perplexity](https://www.perplexity.ai/) | [No](https://docs.perplexity.ai/guides/bots) | Used to answer queries at the request of users. | Only when prompted by a user. | Visit web pages to help provide an accurate answer and include links to the page in Perplexity response. |
|
||||
| PetalBot | [Huawei](https://huawei.com/) | Yes | Used to provide recommendations in Hauwei assistant and AI search services. | No explicit frequency provided. | Operated by Huawei to provide search and AI assistant services. |
|
||||
| Scrapy | [Zyte](https://www.zyte.com) | Unclear at this time. | Scrapes data for a variety of uses including training AI. | No information. | "AI and machine learning applications often need large amounts of quality data, and web data extraction is a fast, efficient way to build structured data sets." |
|
||||
| SemrushBot\-OCOB | [Semrush](https://www.semrush.com/) | [Yes](https://www.semrush.com/bot/) | Crawls your site for ContentShake AI tool. | Roughly once every 10 seconds. | You enter one text (on-demand) and we will make suggestions on it (the tool uses AI but we are not actively crawling the web, you need to manually enter one text/URL). |
|
||||
| SemrushBot\-SWA | [Semrush](https://www.semrush.com/) | [Yes](https://www.semrush.com/bot/) | Checks URLs on your site for SWA tool. | Roughly once every 10 seconds. | You enter one text (on-demand) and we will make suggestions on it (the tool uses AI but we are not actively crawling the web, you need to manually enter one text/URL). |
|
||||
| Sidetrade indexer bot | [Sidetrade](https://www.sidetrade.com) | Unclear at this time. | Extracts data for a variety of uses including training AI. | No information. | AI product training. |
|
||||
| Timpibot | [Timpi](https://timpi.io) | Unclear at this time. | Scrapes data for use in training LLMs. | No information. | Makes data available for training AI models. |
|
||||
| VelenPublicWebCrawler | [Velen Crawler](https://velen.io) | [Yes](https://velen.io) | Scrapes data for business data sets and machine learning models. | No information. | "Our goal with this crawler is to build business datasets and machine learning models to better understand the web." |
|
||||
| Webzio\-Extended | Unclear at this time. | Unclear at this time. | AI Data Scrapers | Unclear at this time. | Webzio-Extended is a web crawler used by Webz.io to maintain a repository of web crawl data that it sells to other companies, including those using it to train AI models. More info can be found at https://darkvisitors.com/agents/agents/webzio-extended |
|
||||
| YouBot | [You](https://about.you.com/youchat/) | [Yes](https://about.you.com/youbot/) | Scrapes data for search engine and LLMs. | No information. | Retrieves data used for You.com web search engine and LLMs. |
|
||||
|
|
Loading…
Reference in a new issue