Представляем AutoScraper: умный, быстрый и легкий веб-скрейпер для Python
В последние несколько лет просмотр веб-страниц был одной из моих повседневных и часто необходимых задач. Мне было интересно, могу ли я сделать его умным и автоматическим, чтобы сэкономить много времени. Итак, я сделал AutoScraper!
Код проекта доступен здесь. Он стал самым популярным проектом на Github.
Этот проект создан для автоматического парсинга веб-страниц, чтобы упростить парсинг.
Он получает URL-адрес или html-контент веб-страницы и список примеров данных, которые мы хотим извлечь с этой страницы. Эти данные могут быть текстом, URL-адресом или любым значением HTML-тега этой страницы. Он изучает правила парсинга и возвращает похожие элементы. Затем вы можете использовать этот изученный объект с новыми URL-адресами, чтобы получить аналогичный контент или точно такой же элемент этих новых страниц.
Монтаж
Он совместим с питоном 3.
- Установите последнюю версию из репозитория git, используя pip:
$ pip install git+
$ pip install autoscraper
$ python setup.py install
Как использовать
Получение аналогичных результатов
Скажем, мы хотим получить все связанные заголовки сообщений на странице stackoverflow:
from autoscraper import AutoScraper
url = '
wanted_list = ["How to call an external command?"]
scraper = AutoScraper()
result = scraper.build(url, wanted_list)
print(result)
Вот результат:
[
'How do I merge two dictionaries in a single expression in Python (taking union of dictionaries)?',
'How to call an external command?',
'What are metaclasses in Python?',
'Does Python have a ternary conditional operator?',
'How do you remove duplicates from a list whilst preserving order?',
'Convert bytes to a string',
'How to get line count of a large file cheaply in Python?',
"Does Python have a string 'contains' substring method?",
'Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3?'
]
Теперь вы можете использовать scraper
объект, чтобы получить связанные темы любой страницы stackoverflow:
scraper.get_result_similar('https://stackoverflow.com/questions/606191/convert-bytes-to-a-string')
Получение точного результата
Скажем, мы хотим получить текущие цены на акции из Yahoo Finance:
from autoscraper import AutoScraper
url = '
wanted_list = ["124.81"]
scraper = AutoScraper()
result = scraper.build(url, wanted_list)
print(result)
Обратите внимание, что вам следует обновить wanted_list
если вы хотите скопировать этот код, так как содержимое страницы динамически меняется.
Вы также можете передать любой пользовательский 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:
from autoscraper import AutoScraper
url = '
wanted_list = ['A Smart, Automatic, Fast and Lightweight Web Scraper for Python', '2.5k', 'https://github.com/alirezamika/autoscraper/issues']
scraper = AutoScraper()
scraper.build(url, wanted_list)
Просто, верно?
Сохранение модели
Теперь мы можем сохранить построенную модель, чтобы использовать ее позже. Сохранить:
scraper.save('yahoo-finance')
И для загрузки:
scraper.load('yahoo-finance')
Учебники
- Видеть это суть для более продвинутого использования.
- Чтобы продемонстрировать возможности AutoScraper, я написал руководство по созданию API с любого веб-сайта менее чем за 5 минут и менее чем за 20 строк кода. Вы можете прочитать это здесь.
Спасибо
Не стесняйтесь обращаться, если у вас есть какие-либо вопросы.