Я хочу стянуть информацию с сайта. Как это сделать?
Допустим, нам нужно получить данные с сайта, сбор которых вручную нецелесообразен или невозможен из-за объёма. В таком случае мы можем автоматизировать процесс, используя инструменты, описанные далее.
Библиотека requests
Python-библиотека для выполнения запросов к серверу и обработки ответов. Фундамент скрипта для парсинга и наше основное оружие. Пользуясь данной библиотекой мы получаем содержимое страницы в виде html для дальнейшего парсинга.
import requests response = requests.get('https://ya.ru') # get-запрос print(response.text) # вывод содержимого страницы payload = 'key1': 'value1', 'key2': 'value2'> response = requests.get('http://httpbin.org/get', params=payload) # запрос с параметрами headers = 'user-agent': 'my-app/0.0.1'> response = requests.get(url, headers=headers) # запрос с определенными html заголовками
API
Application programming interface — программный интерфейс приложения, предоставляемый владельцем веб-приложения для других разработчиков. Отсутствие API, способного удовлетворить наши нужды — первое в чем стоит убедиться прежде чем бросаться анализировать исходный код страницы и писать для нее парсер. Множество популярных сайтов имеет собственное api и документацию, которая объясняет как им пользоваться. Мы можем использовать api таким образом — формируем http-запрос согласно документации, и получаем ответ при помощи requests.
BS4
Beautifulsoup4 — это библиотека для парсинга html и xml документов. Позволяет получить доступ напрямую к содержимому любых тегов в html.
from bs4 import BeautifulSoup soup = BeautifulSoup(raw_html, 'html.parser') print(soup.find("p", class_="some-class").text) # вывод содержимого тэга 'p' классом 'some-class'
Selenium Web Driver
Данные на сайте могут генерироваться динамически при помощи javascript. В таком случае спарсить эти данные силами requests+bs4 не удастся. Дело в том, что bs4 парсит исходный код страницы, не исполняя js. Для исполнения js кода и получения страницы, идентичной той, которую мы видим в браузере, можно использовать selenium web driver — это набор драйверов для различных браузеров, снабжающийся библиотеками для работы с этими драйверами.
А что делать, если там авторизация?
Предварительно авторизоваться, отправив post-запрос и инициировать сессию:
session = requests.Session() data = "login_username":"login", "login_password":"password"> url = "http://site.com/login.php" response = session.post(url, data=data)
А что, если сайт банит за много запросов?
- Установить задержку между запросами:
response = requests.get(url, timeout=(10, 0.01)) # таймаут на соединения, таймаут на чтение (в секундах)
- Притвориться браузером, используя selenium web driver или передав содержимое заголовка user-agent, формируя запрос:
user_agent = ('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) ' 'Gecko/20100101 Firefox/50.0') request = requests.get(url, headers='User-Agent':user_agent>)
- Использовать прокси:
request = requests.get(url, proxies="http":"http://10.10.1.10:3128">)
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Скачать страницу и сохранить html
Нужно скачать и просто сохранить ее в .html. Почитал немного по lxml, но все равно не понял как можно это сделать.
Как это реализовывается?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как программно скачать веб-страницу и сохранить в локальный файл?
Программно скачать веб-страницу (с помощью модуля urllib) и сохранить в локальный файл Адрес.
сохранить html страницу в файл
Нужно сохранить страницы html -код в txt файл. Выполняю import urllib.request.
Python — сохранить html страницу
Здравствуйте! Хочу написать *веб приложение* которое будет сохранит html введенной страницы.
Скачать и сохранить веб страницу
Здрасте,нужно скачать веб страницу полностью и сохранить в html,txt. Пробовал wget,curl через.
![]()
103 / 91 / 32
Регистрация: 30.05.2015
Сообщений: 594
см. requests, https://pypi.python.org/pypi/requests
lxml это так понял вы взяли с beautifullsoap, оно н только занимается парсингом
![]()
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
635 / 475 / 179
Регистрация: 28.05.2012
Сообщений: 1,412

Сообщение было отмечено Nobie как решение
Решение
1 2 3 4 5 6
from requests import request t = request('GET', 'http://rambler.ru').text with open('test.html', 'w', encoding='utf-8') as f: f.write(t)
Регистрация: 13.03.2022
Сообщений: 1
Простейший батник для скачивания
cd C:\Users\Admin\Desktop curl адрес сайта>имя файла.тип
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Как скачать html страницу?
Здравствуйте, скачивал страницу html через "web client. downloadfile" Но там он скачивает её не.

Скачать html страницу (boost.beast)
Всем доброе время суток, дали задачу реализовать crawler,скачать html страницу необходимо с помощью.
Скачать HTML страницу через Сокеты
Всем привет! Скажите пожалуйста каким образом я могу скачать себе веб-страницу через сокеты? Я.
Как программно скачать html-страницу?
Желательно обойтись без дополнительных библиотек, т.к. программа должна получиться компактной и.
Скачать html страницу в формате txt
Делаю так. WGETом выкачиваю страницу. Получаем index.html. Дальше другой утилитой HTMLtoTXT.
Как скачать HTML страницу целиком?
Здравствуйте! Имеется сайт, а точнее одна из его страниц, содержимое которого не отображается в.
получить код html страницы
Можно использовать библиотеку requests_html, чтобы выполнить js-код на странице.
# pip install requests-html from requests_html import HTMLSession session = HTMLSession() rs = session.get('https://coronavirus-monitor.ru/statistika/') with open('rs_before_js.html', 'w', encoding='utf-8') as f: f.write(rs.html.html) rs.html.render() # Без этого не будет выполнения js кода with open('rs_after_js.html', 'w', encoding='utf-8') as f: f.write(rs.html.html)
Отслеживать
ответ дан 26 апр 2020 в 1:46
76.7k 6 6 золотых знаков 54 54 серебряных знака 121 121 бронзовый знак
Мне нужно что бы все пробелы остались а при таком сохранении они сбиваются как и при моём коде, нет ли другого способа?
26 апр 2020 в 12:37
@krime, не понимаю о каких пробелах вы имели ввиду. Если те, что между тегами, то они не имеют значения, а если те, что внутри, то это сомнительно, т.к. они имеют значение и парсер их не должен трогать. А в вашем коде вы делаете ненужную работу, используя парсер. Если вам нужно просто сохранить страницу, то: with open(‘site.html’, ‘wb’) as f: file.write(resp.content) . Если я неправильно понял, то поясните в вопросе что значит код как при нажатии CTRL + U в Гугл Хром : отформатированный, исходный, или отрендеренный (пропущенный через js)
26 апр 2020 в 13:15
- python
- python-3.x
- python-3.6
- python-3.5
Как получить html код страницы?

Владимир Куц, насчет последнего тейка не согласен. Добавление в отдельную переменную может еще для чего-нибудь понадобиться.
UPD: однако да, ОП что-то там напутал и с функциями, и с неймингом. Поправил
Ответы на вопрос 1
У меня немного замороченое решение но все же
import requests from bs4 import BeautifulSoup # я делаю парсинг этой библиотекой библиотека url = 'http://cbr.ru' site = requests.get(url) # Делаем запрос soup = BeautifulSoup(site.text, "html.parser") # получаем ввесь Html страницы content = soup.find('div').text # Получаем содержимое внутри всех тегов div на пример print(soup) # Выводим Html
Ответ написан более года назад
Комментировать
Нравится 2 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
Палиндромы leetcode, в VS все правильно, на сайте другой ответ, что делать?
- 1 подписчик
- 12 часов назад
- 88 просмотров
