Очистка веб-страниц стала намного более автоматизированной

В последние несколько лет очистка веб-страниц была одной из моих повседневных и часто необходимых задач. Мне было интересно, смогу ли я сделать его умным и автоматическим, чтобы сэкономить много времени. Итак, я сделал AutoScraper!

Код проекта доступен здесь. Он стал самым популярным проектом на Github.

Этот проект предназначен для автоматического парсинга веб-страниц, чтобы упростить парсинг. Он получает URL-адрес или HTML-содержимое веб-страницы и список образцов данных, которые мы хотим очистить с этой страницы. Эти данные могут быть текстом, URL-адресом или любым значением HTML-тега этой страницы. Он изучает правила очистки и возвращает похожие элементы. Затем вы можете использовать этот изученный объект с новыми URL-адресами, чтобы получить аналогичный контент или точно такой же элемент этих новых страниц.

Установка

Он совместим с Python 3.

Установите последнюю версию из репозитория git с помощью pip:

$ pip install git+https://github.com/alirezamika/autoscraper.git

Как использовать

Получение аналогичных результатов

Скажем, мы хотим получить все связанные заголовки сообщений на странице StackOverflow:

Вот результат:

Теперь вы можете использовать объект scraper для получения связанных тем любой страницы StackOverflow:

scraper.get_result_similar('https://stackoverflow.com/questions/606191/convert-bytes-to-a-string')

Получение точных результатов

Допустим, мы хотим получить данные о ценах на акции в Yahoo Finance:

from autoscraper import AutoScraper
url = 'https://finance.yahoo.com/quote/AAPL/'
wanted_list = ["124.81"]
scraper = AutoScraper()
# Here we can also pass html content via the html parameter instead of the url (html=html_content)
result = scraper.build(url, wanted_list)
print(result)

Вы также можете передать любой пользовательский параметр модуля requests. Например, вы можете использовать прокси или настраиваемые заголовки:

proxies = {
    "http": 'http://127.0.0.1:8001',
    "https": 'https://127.0.0.1:8001',
}
result = scraper.build(url, wanted_list, request_args=dict(proxies=proxies))

Теперь мы можем получить цену любого символа:

scraper.get_result_exact('https://finance.yahoo.com/quote/MSFT/')

Возможно, вы захотите получить и другую информацию. Например, если вы хотите получить и рыночную капитализацию, вы можете просто добавить ее в список розыска. Используя метод get_result_exact, он будет извлекать данные в том же точном порядке в списке розыска.

Другой пример. Допустим, мы хотим очистить текст, количество звездочек и ссылку для запросов на вытягивание страниц репозитория Github:

url = 'https://github.com/alirezamika/autoscraper'
wanted_list = ['A Smart, Automatic, Fast and Lightweight Web Scraper for Python', '662', 'https://github.com/alirezamika/autoscraper/issues']
scraper.build(url, wanted_list)

Все просто, правда?

Сохранение модели

Теперь мы можем сохранить построенную модель, чтобы использовать ее позже. Сохранить:

# Give it a file path
scraper.save('yahoo-finance')

И загрузить:

scraper.load('yahoo-finance')

Генерация кода python парсера

Мы также можем сгенерировать автономный код для изученного парсера, чтобы использовать его где угодно:

code = scraper.generate_python_code()
print(code)

Он напечатает сгенерированный код. Существует класс с именем GeneratedAutoScraper, в котором есть методы get_result_similar и get_result_exact, которые вы можете использовать. Вы также можете использовать метод get_result, чтобы получить и то, и другое.

См. этот Суть для более продвинутого использования.

Чтобы продемонстрировать возможности AutoScraper, я написал руководство по созданию API с любого веб-сайта менее чем за 5 минут и менее чем за 20 строк кода. Вы можете прочитать это здесь".

Спасибо.

Надеюсь, этот проект будет полезен для вас и сэкономит ваше время. Если у вас есть какие-либо вопросы, просто задавайте их ниже, и я отвечу на них. Жду ваших отзывов и предложений.

Удачного кодирования ❤️