Рубрики
Без рубрики

Внесение автокреплята: умный, быстрый и легкий веб-скребок для Python

Scraping в Интернете только что получил намного больше автоматизированного

Автор оригинала: Mika.

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

Код проекта доступен здесь Отказ Это стало тенденцией к тенденции номер один на Github.

1 * yd2rfqczi8jlynaandexyq.jpeg

Этот проект создан для автоматического соскабливания веб, чтобы проще было легко. Он получает 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 строк кода. Вы можете прочитать это здесь Отказ

Спасибо

Не стесняйтесь связаться, если у вас есть какие-либо вопросы.

Счастливое кодирование ♥ ️