Документация
Вступление
αScraper — API для парсинга. В зависимости от ваших задач, вы можете выбрать 2 варианта:
- Легкий и быстрый Cloud Crawler — масштабируемый и быстрый краулер. Можно использоваться свои сессии, заголовки, Cookie-файлы, ротацию IP
- Chrome-кластер — для парсинга сложных или динамических javascript-сайтов, где необходим настоящий браузер, чтобы отобразить контент
Основное о нашем сервисе:
- Лимит 2 Мб на каждый запрос
- Если вы превысили выделенное количество запросов, мы вернем http-статус 429
- Максимальный таймаут 60 сек на запрос, пожалуйста, учитывайте это в вашем коде
- Мы не списываем лимиты на неудачные запросы (отслеживаем все 5xx http-статусы). Списываем лимиты только, если запрос вернул 200 and 404 http-коды
- Картинки и другой бинарный контент разрешен для скачивания (2 Мб на запрос)
Использование
У нас есть только 1 урл для запросов API
- http://api.ascraper.com/crawl
-
GET-запрос
Возвращает ответ в JSON-формате
Для возврата результата запроса в HTML-формате, установите GET-параметр format=html
Поддерживает 3 GET параметра: userId=API_KEY, url и selector. - http://api.ascraper.com/crawl
- POST-запрос
Поддерживает собственные заголовки, Cookie-файлы, сессии, javascript-рендеринг. Принимает и отвечает в JSON-формате
Пример
JSON
curl "http://api.ascraper.com/crawl?userId=API_KEY&url=https://yandex.ru/internet/"
Result
{ "status":{ "code":"OK" }, "cookies":[ ], "headers":{ "Server":"gunicorn/19.9.0", "Access-Control-Allow-Origin":"*", "Access-Control-Allow-Credentials":"true", "Connection":"keep-alive", "Content-Length":"33", "Date":"Sat, 31 Oct 2020 16:19:39 GMT", "Content-Type":"application/json" }, "html_source":"{\n \"origin\": \"185.233.83.124\"\n}\n" }Если вам нужно вернуть только 1 селектор на странице добавьте jquery-style селектор в запрос &selector='SELECTOR'. Не забудьте применить css-селектору urlencode.
curl "http://api.ascraper.com/crawl?userId=API_KEY&selector=title&url=https://google.com"
Результат
{ "source":"[\"<title>Google</title>\"]", "status":{ "code":"OK" }, "cookies":[ { ... } ], "headers":{ ... } }
Пример
Если вам нужно вернуть обычный HTMLПередайте параметр format=html
curl "http://api.ascraper.com/crawl?userId=API_KEY&url=https://google.com&format=html"
Результат
<!doctype html> <html itemscope="" itemtype="http://schema.org/WebPage" lang="ru"> <head> <meta charset="UTF-8"> <meta content="origin" name="referrer"> <link href="/searchdomaincheck?format=opensearch" title="Поиск в Google" rel="search" type="application/opensearchdescription+xml"> <link href="/manifest?pwa=webhp" crossorigin="use-credentials" rel="manifest"> ...
Ответы
Наш сервис может посылать вам следующие ответы:
- 200 Successful request
- 400 Bad request — Проверьте запрос (обратите внимаение на url, userId или другие параметры). Свяжитесь со службой поддержки
- 401 Unauthorized — Предоставленный userId не существует
- 406 Not Acceptable — Вам не разрешены запросы в Chrome cluster
- 408 Request Timeout — Превышено время ожидания запроса. Свяжитесь со службой поддержки
- 429 Too Many Requests Request — Лимит запросов исчерпан
- 451 Unavailable For Legal Reasons — Нам не удалось выполнить запрос к url. Свяжитесь со службой поддержки
- 503 Internal server error — Что-то пошлом не так. Свяжитесь со службой поддержки
- 509 Bandwidth Limit Exceeded — Превышено количество одновременных сессий, либо вы обращаетесь к одной ссылке слишком часто
- 510 Not Extended — Превышено количество одновременных сессий к Chrome cluster
Собственные заголовки
Чтобы передать собственные заголовки используйте POST-запрос к API в следущем формате:
http://api.ascraper.com/crawl
POST-запрос
Пример
curl -X POST -H "Content-Type: application/json" --data '{"url": "http://httpbin.org/headers","userId": "API_KEY","headers": [{"name" : "name", "value" : "value"}]}' 'http://api.ascraper.com/crawl'
Result
{ "status":{ "code":"OK" }, "sessionId":"21798b55-153d-4ae8-b785-271c40f761ca", "cookies":[ ], "headers":{ "Server":"gunicorn/19.9.0", "Access-Control-Allow-Origin":"*", "Access-Control-Allow-Credentials":"true", "Connection":"keep-alive", "Content-Length":"485", "Date":"Sat, 31 Oct 2020 19:45:20 GMT", "Content-Type":"application/json" }, "html_source":"{\n \"headers\": {\n \"Accept\": \"*/*\", \n \"Host\": \"httpbin.org\", \n \"Name\": \"value\", \n \"User-Agent\": \"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 OPR/43.0.2442.1144\", \n \"X-Amzn-Trace-Id\": \"Root=1-5f9dbed0-597dd69e27590a322779a228\", \n \"X-B3-Parentspanid\": \"c15cd9bc743da160\", \n \"X-B3-Sampled\": \"1\", \n \"X-B3-Spanid\": \"a7c628a49b2b6db0\", \n \"X-B3-Traceid\": \"5f9dbecf7a33412fae164ec446116fd9\"\n }\n}\n" }
Собственные Cookie-файлы
Чтобы передать собственные Cookie-файлы используйте POST-запрос к API в следущем формате:
http://api.ascraper.com/crawl
POST-запрос
Пример
curl -X POST -H "Content-Type: application/json" --data '{"url": "http://httpbin.org/cookies","userId": "API_KEY","cookies": [{"name" : "name", "value" : "value"}]}' 'http://api.ascraper.com/crawl'
Результат
{ "status":{ "code":"OK" }, "sessionId":"31d5efdf-069e-4bcc-98de-0e99eea024af", "cookies":[ { "domain":".httpbin.org", "hostOnly":false, "httpOnly":false, "name":"name", "path":"/", "sameSite":"None", "secure":false, "session":false, "storeId":false, "value":"value", "id":null } ], "headers":{ "Server":"gunicorn/19.9.0", "Access-Control-Allow-Origin":"*", "Access-Control-Allow-Credentials":"true", "Connection":"keep-alive", "Content-Length":"43", "Date":"Sat, 31 Oct 2020 19:51:44 GMT", "Content-Type":"application/json" }, "html_source":"{\n \"cookies\": {\n \"name\": \"value\"\n }\n}\n" }
Сессии
По умолчанию мы меняем IP каждый запрос. Но если вам нужно переиспользовать IP или Cookie-файлы вы можете передать ID сессии (session_id), который мы возвращаем каждый POST-запрос к API http://api.ascraper.com/crawl
Пример
curl -X POST -H "Content-Type: application/json" --data '{"url": "http://httpbin.org/cookies","userId": "API_KEY","cookies": [{"name" : "name", "value" : "value"}]}' 'http://api.ascraper.com/crawl'
curl -X POST -H "Content-Type: application/json" --data '{"url": "http://httpbin.org/cookies","userId": "API_KEY","sessionId": "31d5efdf-069e-4bcc-98de-0e99eea024af"}' 'http://api.ascraper.com/crawl'
Результат
{ "status":{ "code":"OK" }, "sessionId":"31d5efdf-069e-4bcc-98de-0e99eea024af" }
Chrome-кластер
Если вам необходим настоящий браузер, чтобы получить содержимое страницы или javascript-рендеринг, установите параметр render=true. По умолчанию мы отключаем все css-файлы и изображения
Пример
curl -X POST -H "Content-Type: application/json" --data '{"url": "http://httpbin.org/ip","userId": "API_KEY","render" : true}' 'http://api.ascraper.com/crawl'
curl "http://api.ascraper.com/crawl?userId=API_KEY&selector=title&url=https://google.com&render=true"
Результат
{ "sessionId":"3caf3d06-cce2-4ba2-a7e0-03db4b65f8d4", "cookies":[ ], "headers":{ }, "html_source":"<pre style=\"word-wrap: break-word; white-space: pre-wrap;\">{\n \"origin\": \"172.19.0.1, 185.233.80.89\"\n}\n</pre>" }
Proxy-режим
Также вы можете использовать все функции сервиса в режиме прокси. В этом режиме мы передадим все ваши параметры в наше API и вернем результат. Как и в обычном режиме API мы обрабатываем все запросы следущим образом:200, 404 запросы - успешные запросы
500 - неуспешные запросы
429 - закончились лимиты
Вы можете использовать прокси для бинарного контента.
Вы можете передать следующие параметры в прокси:
- render
- session_id
- headers
- cookies
Передайте эти параметры в следующем формате:
ascraper;render=true;session_id=session@API_KEY:proxy.ascraper.com:8080
Заголовки и Cookie-файлы, которые вы передадите со своим запросом, мы также передадим в наше API.
Чтобы успешно использовать наше API в этом режиме ваш код должен быть сконфигурирован без проверки SSL-сертификатов (to not verify SSL certificates).