GitHub SERP
Разбирайте страницу результатов поиска репозиториев GitHub в структурированный массив репозиториев со звёздами, языком, темами и информацией о пагинации.
Использование API
Добавьте &scraper=github-serp к запросу Crawling API. URL-кодируйте целевой URL в параметре url. Один запрос возвращает одну страницу; переходите по pagination.next_page_url, чтобы двигаться дальше, вплоть до лимита GitHub в 1000 результатов.
curl 'https://api.crawlbase.com/?token=YOUR_TOKEN' \
--data-urlencode 'url=https://github.com/search?q=web+scraping&type=repositories' \
--data-urlencode 'scraper=github-serp' -Gfrom crawlbase import CrawlingAPI
api = CrawlingAPI({'token': 'YOUR_TOKEN'})
res = api.get(
'https://github.com/search?q=web+scraping&type=repositories',
{'scraper': 'github-serp'}
)
import json
data = json.loads(res['body'])const { CrawlingAPI } = require('crawlbase');
const api = new CrawlingAPI({ token: 'YOUR_TOKEN' });
const res = await api.get(
'https://github.com/search?q=web+scraping&type=repositories',
{ scraper: 'github-serp' }
);
const data = JSON.parse(res.body);require 'crawlbase'
api = Crawlbase::API.new(token: 'YOUR_TOKEN')
res = api.get('https://github.com/search?q=web+scraping&type=repositories', scraper: 'github-serp')
data = JSON.parse(res.body)Пример входного URL
URL, передаваемый в параметре url (URL-декодированный для удобства чтения):
https://github.com/search?q=web+scraping&type=repositoriesСтруктура ответа
Тело ответа в формате JSON. Типы полей могут быть null, если исходная страница не содержит значения.
Поисковый запрос, по которому получены эти результаты.
Тип поиска, например
repositories.Поле сортировки, например
stars. Отсутствует при сортировке по наилучшему совпадению.Направление сортировки,
desc или asc.Заявленное общее количество результатов по всем страницам.
Номер текущей страницы.
Информация о пагинации для обхода набора результатов.
Номер текущей страницы.
Наибольший номер страницы, который GitHub раскрывает для этого запроса.
Абсолютный URL следующей страницы или
null на последней странице / при достижении лимита результатов.Абсолютный URL предыдущей страницы или
null на первой странице.True, пока существует следующая страница в пределах лимита в 1000 результатов.
Результаты по каждому репозиторию (см. поля ниже).
Позиция результата на этой странице (начиная с 1).
Название репозитория.
Логин владельца (пользователя или организации).
Полный идентификатор
owner/name.Абсолютный URL репозитория.
Описание репозитория.
Основной язык программирования.
Количество звёзд.
Метки тем, показанные на карточке результата.
Отметка времени последнего обновления или относительная метка, если присутствует.
Лицензия, показанная на карточке результата, если присутствует.
True, если репозиторий является публичным архивом.
True, если владельца можно спонсировать.
Пример ответа
{
"query": "web scraping",
"searchType": "repositories",
"sort": "stars",
"order": "desc",
"totalResults": 133816,
"currentPage": 1,
"pagination": {
"current_page": 1,
"total_pages": 100,
"next_page_url": "https://github.com/search?q=web+scraping&type=repositories&s=stars&o=desc&p=2",
"previous_page_url": null,
"has_next": true
},
"results": [
{
"position": 1,
"name": "scrapy",
"owner": "scrapy",
"fullName": "scrapy/scrapy",
"url": "https://github.com/scrapy/scrapy",
"description": "Scrapy, a fast high-level web crawling & scraping framework for Python.",
"primaryLanguage": "Python",
"stars": 63119,
"topics": ["python", "crawler", "framework", "scraping", "crawling"],
"updatedAt": null,
"license": null,
"archived": false,
"sponsorable": false
}
]
}