Получить HTML содержимое веб-страницы с помощью Python
Python предоставляет несколько способов сделать это в своей стандартной библиотеке . Вероятно, самый популярный способ загрузки файла — через HTTP с помощью модуля urllib . Метод urllib.request — это модуль Python для извлечения URL-адресов. Он предлагает очень простой интерфейс в виде функции urlopen. Это позволяет получать URL-адреса с использованием различных протоколов. urllib.request.urlopen() , откройте URL-адрес URL, который может быть строкой или объектом Request.
from urllib.request import urlopen html = urlopen("http://net-informations.com/about.htm") print(html.read())
(1 оценок, среднее: 5,00 из 5)
Похожие новости
Какое использование лямбда в Python?
![]()
Разница между @staticmethod и @classmethod в Python
![]()
Что означает __name __ == ‘__ main__’ в Python?
- Книги по 1С
- Книги по Assembler
- Книги по Android
- Книги по C#
- Книги по C++
- Книги по CSS
- Книги по Delphi
- Книги по HTML
- Книги по JavaScript
- Книги по Java
- Книги по MySql
- Книги по Php
- Книги по Python
- Книги по Pascal
Как получить HTML код страницы после запроса?
Создаю первую программу для парсинга, использую такой код(см. выше) и html код в браузере не совпадает с полученным кодом, например для такого запроса на сайте: http://aviobiletes.aviokases.l. fe046dac1f
В html коде отсутствуют сами цены на авиобилеты.
Как получить HTML код вместе с ними?
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как получить код страницы после выполнения JSON запроса?
Всем, доброго времени суток. Столкнулся с такой проблемой: собрался я отпарсить часть сайта.
Как получить код HTML страницы?
КАК получить код HTML страницы в переменную, неиспользую OCX’ов Ну всмысле без Winsock msInet итп.
Как получить код html-страницы?
Есть запрос к серверу, который возвращает через браузер Google Chrome экранную форму ответа -.
Как получить html-код страницы?
как получить html-код страницы методами js и потом его использовать в личных целях
Как получить код html-страницы
Здравствуйте. Знаю, что этот вопрос уже задавали на этом форуме, но я снова задаю, потому что там я.
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830

Сообщение было отмечено stjefim как решение
Решение
А потому, что все это подгружается с помощью js, а у тебя js само собой не интерпретируется.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
import sys from PyQt4 import QtCore, QtGui, QtWebKit class Browser(QtWebKit.QWebView): def __init__(self, *arg, **args): QtWebKit.QWebView.__init__(self, *arg, **args) self.loadFinished.connect(self.load_complete) def load_complete(self): page = self.page().mainFrame() print(page.toHtml()) app = QtGui.QApplication(sys.argv) b = Browser() b.load(QtCore.QUrl('http://aviobiletes.aviokases.lv/ru/multiPricer.php?' 'sid=000683e869e9fa41cfbe07f1273fe046dac1f')) b.show() sys.exit(app.exec_())
Регистрация: 24.12.2014
Сообщений: 36
А как сделать тоже самое, но без создания «браузера»?
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
Без создания браузера ни как, можно не отображать окно и приложение будет в целом консольное.
Если убрать строку
b.show()
то окно отображаться не будет.
Регистрация: 24.12.2014
Сообщений: 36
Спасибо за такие хорошие ответы, но по мере работы появился еще вопрос, могу ли я передать всместе с URL , Post запрос, например если я хочу изменять дату вылета (на том же сайте), то там данные отправляюся методом Post. Как мне изменять эти данные?
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
stjefim, при использовании этого инструмента, нужно думать не в концепции запросов. Это полноценный браузер, есть специальные способы, чтобы заполнить нужное поле и нажать на нужную кнопку.
Я не дома, по дому код не могу выслать, как буду, выложу, а вообще можешь загуглить, там это есть.
Добавлено через 1 час 30 минут
Вот пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
import sys from PyQt4 import QtCore, QtGui, QtWebKit class Browser(QtWebKit.QWebView): def __init__(self, *arg, **args): QtWebKit.QWebView.__init__(self, *arg, **args) self.loadFinished.connect(self.load_complete) def load_complete(self): page = self.page().mainFrame().documentElement() date = page.findFirst('#fsfCalendar0') date.evaluateJavaScript("this.value='28.01.2016'") button_next = page.findFirst('#button_next') button_next.evaluateJavaScript("this.click()") app = QtGui.QApplication(sys.argv) b = Browser() b.load(QtCore.QUrl('http://aviobiletes.aviokases.lv/ru/index.php')) b.show() sys.exit(app.exec_())
как получить код html-страницы средствами Python?
В дополнение к другим ответам есть еще внешняя библиотека requests. У нее по мнению многих, в чье число и я вхожу, более красивый интерфейс чем у стандартных библиотек.
Отслеживать
ответ дан 2 июл 2015 в 12:15
Михаил Силонов Михаил Силонов
66 2 2 бронзовых знака
import urllib.request f = urllib.request.urlopen("http://ya.ru").read() print(f)
import urllib import requests f = urllib.request.urlopen("http://ya.ru").read() print(f)
Отслеживать
ответ дан 5 сен 2020 в 11:21
Простой страницы, динамически не меняющейся
import urllib import requests url='https://ya.ru' r = requests.get(url) #url - ссылка print ('reached 1') print(r.headers['content-type']) # 'text/html; charset=UTF-8' #before test what is it if (r.headers['content-type'].lower()=='text/html; charset=utf-8'): #it may be different print ('reached 2') html = r.text print(html)
Я хочу стянуть информацию с сайта. Как это сделать?
Допустим, нам нужно получить данные с сайта, сбор которых вручную нецелесообразен или невозможен из-за объёма. В таком случае мы можем автоматизировать процесс, используя инструменты, описанные далее.
Библиотека 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
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
