Функция запроса html страницы

Get html using Python requests?

I am trying to teach myself some basic web scraping. Using Python’s requests module, I was able to grab html for various websites until I tried this:

>>> r = requests.get('http://www.wrcc.dri.edu/WRCCWrappers.py?sodxtrmts+028815+por+por+pcpn+none+mave+5+01+F') 
>>> r.text '\x1f\ufffd\x08\x00\x00\x00\x00\x00\x00\x03\ufffd]o\u06f8\x12\ufffd\ufffd\ufffd+\ufffd]. >>> r.content b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\xed\x9d]o\xdb\xb8\x12\x86\xef\xfb+\x88]\x14h. 

I have tried many combinations of get/post with every syntax I can guess from the documentation and from SO and other examples. I don’t understand what I am seeing above, haven’t been able to turn it into anything I can read, and can’t figure out how to get what I actually want. My question is, how do I get the html for the above page?

Id highly recommend BeautifulSoup for web scraping beautiful-soup-4.readthedocs.org/en/latest/#. It will make your life a heck of a lot easier.

4 Answers 4

The server in question is giving you a gzipped response. The server is also very broken; it sends the following headers:

$ curl -D - -o /dev/null -s -H 'Accept-Encoding: gzip, deflate' http://www.wrcc.dri.edu/WRCCWrappers.py?sodxtrmts+028815+por+por+pcpn+none+mave+5+01+F HTTP/1.1 200 OK Date: Tue, 06 Jan 2015 17:46:49 GMT Server: Apache  Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 3659 Content-Type: text/html 

The line there is not a valid HTTP header. As such, the remaining headers past Server are ignored. Why the server interjects that is unclear; in all likely hood WRCCWrappers.py is a CGI script that doesn’t output headers but does include a double newline after the doctype line, duping the Apache server into inserting additional headers there.

Читайте также:  Стили

As such, requests also doesn’t detect that the data is gzip-encoded. The data is all there, you just have to decode it. Or you could if it wasn’t rather incomplete.

The work-around is to tell the server not to bother with compression:

headers = r = requests.get(url, headers=headers) 

and an uncompressed response is returned.

Incidentally, on Python 2 the HTTP header parser is not so strict and manages to declare the doctype a header:

>>> pprint(dict(r.headers)) ', 'connection': 'Keep-Alive', 'content-encoding': 'gzip', 'content-length': '3659', 'content-type': 'text/html', 'date': 'Tue, 06 Jan 2015 17:42:06 GMT', 'keep-alive': 'timeout=5, max=100', 'server': 'Apache', 'vary': 'Accept-Encoding'> 

and the content-encoding information survives, so there requests decodes the content for you, as expected.

Источник

Http методы запроса на веб-странице.

Два наиболее распространенных метода HTTP: GET и POST.

Что такое HTTP?

Hypertext Transfer Protocol — Протокол передачи гипертекста (HTTP) предназначен для обеспечения связи между клиентами и серверами.

HTTP работает как протокол запроса-ответа между клиентом и сервером.

Веб-браузер может быть клиентом, а приложение на компьютере, на котором размещен веб-сайт, может быть сервером.

Пример: клиент (браузер) отправляет HTTP-запрос на сервер; затем сервер возвращает ответ клиенту. Ответ содержит информацию о состоянии запроса и может также содержать запрошенный контент.

HTTP Методы

Метод GET

GET используется для запроса данных от указанного ресурса.

GET — один из самых распространенных методов HTTP.

Обратите внимание, что строка запроса (пары имя/значение) отправляется в URL-адресе запроса GET:

Некоторые другие заметки о запросах GET:

  • GET-запросы могут быть кэшированы
  • GET запросы остаются в истории браузера
  • GET запросы могут быть добавлены в закладки
  • Запросы GET никогда не должны использоваться при работе с конфиденциальными данными.
  • GET-запросы имеют ограничения по длине
  • GET-запросы используются только для запроса данных (не изменяются)

Метод POST

POST используется для отправки данных на сервер для создания/обновления ресурса.

Данные, отправленные на сервер с помощью POST, хранятся в теле запроса HTTP.:

POST является одним из самых распространенных методов HTTP.

Некоторые другие заметки о запросах POST:

  • POST-запросы никогда не кэшируются
  • POST-запросы не сохраняются в истории браузера
  • POST-запросы не могут быть добавлены в закладки
  • POST-запросы не имеют ограничений по длине данных

Метод PUT

PUT используется для отправки данных на сервер для создания / обновления ресурса.

Разница между POST и PUT заключается в том, что PUT-запросы являются идентичными. То есть, вызов одного и того же запроса PUT несколько раз всегда будет приводить к одному и тому же результату. Напротив, вызов POST-запроса неоднократно имеет побочные эффекты от создания одного и того же ресурса несколько раз.

Метод HEAD

HEAD почти идентичен GET, но без тела ответа.

Другими словами, если GET/users возвращает список пользователей, то HEAD/users сделает такой же запрос, но не вернет список пользователей.

Запросы HEAD полезны для проверки того, что будет возвращен запрос GET, перед тем, как фактически выполнить запрос GET, например, перед загрузкой большого файла или тела ответа.

Метод DELETE

Метод DELETE удаляет указанный ресурс.

Метод OPTIONS

Метод OPTIONS описывает параметры связи для целевого ресурса.

Сравнение GET и POST

В следующей таблице сравниваются два метода HTTP: GET и POST.

GET POST
Кнопка НАЗАД/Перезагрузить Безвредный Данные будут повторно отправлены (браузер должен предупредить пользователя о том, что данные должны быть повторно отправлены)
Закладки Может быть в закладках Не может быть в закладках
Кэширование (сохранённая копия) Может быть кэширование Не может быть кэширования
Тип кодирования application/x-www-form-urlencoded application/x-www-form-urlencoded или multipart/form-data. Используйте многочастное кодирование для двоичных данных
История Параметры остаются в истории браузера Параметры не сохраняются в истории браузера
Ограничения на длину данных Да, при отправке данных метод GET добавляет данные в URL; и длина URL-адреса ограничена (максимальная длина URL-адреса составляет 2048 символов) Нет ограничений
Ограничения на тип данных Разрешены только символы ASCII Нет ограничений. Двоичные данные также разрешены
Безопасность GET менее безопасен по сравнению с POST, потому что отправленные данные являются частью URL

Источник

Оцените статью