В последние несколько лет веб-соскоб был одним из моих дней в день и часто необходимыми задачами. Мне было интересно, смогу ли я сделать это умным и автоматическим, чтобы сэкономить много времени. Так что я сделал автокреплу!
Код проекта доступен здесь Отказ Это стало тенденцией к тенденции номер один на Github.
Этот проект создан для автоматического соскабливания веб, чтобы проще было легко. Он получает URL или содержимое HTML в веб-странице и список данных образца, которые мы хотим пройти с этой страницы. Эти данные могут быть текстовыми, URL или любое значение тегов HTML этой страницы. Он изучает правила соска и возвращает аналогичные элементы. Затем вы можете использовать этот выученный объект с новыми URL-адресами, чтобы получить аналогичный контент или тот же элемент этих новых страниц.
Монтаж
Это совместимо с Python 3.
- Установите последнюю версию из репозитория Git, используя PIP:
$ pip install git+https://github.com/alirezamika/autoscraper.git
- Установите из PYPI:
$ pip install autoscraper
- Установите из источника:
$ python setup.py install
Как использовать
Получать аналогичные результаты
Скажем, мы хотим получать все связанные названия постов на странице Stackoverflow:
from autoscraper import AutoScraper url = 'https://stackoverflow.com/questions/2081586/web-scraping-with-python' # We can add one or multiple candidates here. # You can also put urls here to retrieve urls. 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?' ]
Теперь вы можете использовать Скребок
Объект Чтобы получить связанные темы любой страницы StackoverFlow:
scraper.get_result_similar('https://stackoverflow.com/questions/606191/convert-bytes-to-a-string')
Получить точный результат
Скажем, мы хотим соскрести цены на живые цены от финансов Yahoo:
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)
Обратите внимание, что вы должны обновить Welse_List
Если вы хотите скопировать этот код, как содержание страницы динамически меняется.
Вы также можете пройти любой пользовательский Запросы
Параметр модуля. Например, вы можете использовать прокси или пользовательские заголовки:
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
Метод, он будет извлекать данные как одинаковый точный порядок в желаемом списке.
Еще один пример: Скажем, мы хотим соскрести к тексту, количеству звезд и ссылку на вопросы страниц REPO GitHub:
from autoscraper import AutoScraper url = 'https://github.com/alirezamika/autoscraper' 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)
Просто, верно?
Сохранение модели
Теперь мы можем сохранить созданную модель, чтобы использовать ее позже. Сохранить:
# Give it a file path scraper.save('yahoo-finance')
И загрузить:
scraper.load('yahoo-finance')
Учебники
- Посмотреть этот гид Для более продвинутых использований.
- Чтобы продемонстрировать силу автоскреба, я написал руководство для создания API с любого веб-сайта менее чем за 5 минут и менее чем 20 строк кода. Вы можете прочитать это здесь Отказ
Спасибо
Не стесняйтесь связаться, если у вас есть какие-либо вопросы.