Requests 2.7.0
Содержание:
- Настройте заголовки
- Properties and Methods
- Коды состояния
- Получение SSL: ошибка CERTIFICATE_VERIFY_FAILED
- BaseHandler Objects¶
- Объект Response
- Содержимое ответа в JSON
- Python Tutorial
- Request Method
- GET и POST запросы с использованием Python
- HTTPResponse Objects¶
- Передача параметров в GET
- Main Classes¶
- Redirection and History¶
- Conclusion
- Анализ XML. XPath или Bs4
Настройте заголовки
Python Requests не заставляет вас использовать заголовки при отправке запросов, однако есть несколько умных сайтов, которые не дадут вам прочитать ничего важного, если определенные заголовки не присутствуют. Однажды я столкнулся с ситуацией: HTML, который я видел в браузере отличался от того, который был в моем скрипте
Так что делать запросы настолько правильными, насколько вы можете – очень хорошая практика. Меньшее, что вы должны сделать – это установить User-Agent
Однажды я столкнулся с ситуацией: HTML, который я видел в браузере отличался от того, который был в моем скрипте. Так что делать запросы настолько правильными, насколько вы можете – очень хорошая практика. Меньшее, что вы должны сделать – это установить User-Agent.
Python
headers = {
‘user-agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36’
}
r = requests.get(url, headers=headers, timeout=5)
1 2 3 4 5 |
headers={ ‘user-agent»Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36’ } r=requests.get(url,headers=headers,timeout=5) |
Properties and Methods
Property/Method | Description | |
---|---|---|
apparent_encoding | Try it | Returns the apparent encoding |
close() | Try it | Closes the connection to the server |
content | Try it | Returns the content of the response, in bytes |
cookies | Try it | Returns a CookieJar object with the cookies sent back from the server |
elapsed | Try it | Returns a timedelta object with the time elapsed from sending the request to the arrival of the response |
encoding | Try it | Returns the encoding used to decode r.text |
headers | Try it | Returns a dictionary of response headers |
history | Try it | Returns a list of response objects holding the history of request (url) |
is_permanent_redirect | Try it | Returns True if the response is the permanent redirected url, otherwise False |
is_redirect | Try it | Returns True if the response was redirected, otherwise False |
iter_content() | Try it | Iterates over the response |
iter_lines() | Try it | Iterates over the lines of the response |
json() | Try it | Returns a JSON object of the result (if the result was written in JSON format, if not it raises an error) |
links | Try it | Returns the header links |
next | Try it | Returns a PreparedRequest object for the next request in a redirection |
ok | Try it | Returns True if status_code is less than 400, otherwise False |
raise_for_status() | Try it | If an error occur, this method returns a HTTPError object |
reason | Try it | Returns a text corresponding to the status code |
request | Try it | Returns the request object that requested this response |
status_code | Try it | Returns a number that indicates the status (200 is OK, 404 is Not Found) |
text | Try it | Returns the content of the response, in unicode |
url | Try it | Returns the URL of the response |
Коды состояния
Прежде всего мы проверим код состояния. Коды HTTP находятся в диапазоне от 1XX до 5XX. Наверняка вы уже знакомы с кодами состояния 200, 404 и 500.
Далее мы приведем краткий обзор значений кодов состояния:
- 1XX — информация
- 2XX — успешно
- 3XX — перенаправление
- 4XX — ошибка клиента (ошибка на вашей стороне)
- 5XX — ошибка сервера (ошибка на их стороне)
Обычно при выполнении наших собственных запросов мы хотим получить коды состояния в диапазоне 200.
Библиотека Requests понимает, что коды состояния 4XX и 5XX сигнализируют об ошибках, и поэтому при возврате этих кодов состояния объекту ответа на запрос присваивается значение .
Проверив истинность ответа, вы можете убедиться, что запрос успешно обработан. Например:
script.py
Сообщение Response Failed появится только при возврате кода состояния 400 или 500. Попробуйте заменить URL на несуществующий, чтобы увидеть ошибку ответа 404.
Чтобы посмотреть код состояния, добавьте следующую строку:
script.py
Так вы увидите код состояния и сможете сами его проверить.
Получение SSL: ошибка CERTIFICATE_VERIFY_FAILED
Когда я впервые выполнил указанную выше программу, я получил следующую ошибку, связанную с сертификатами SSL.
$ python3.6 http_client.py Traceback (most recent call last): File "http_client.py", line 4, in <module> connection.request("GET", "/") File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1239, in request self._send_request(method, url, body, headers, encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1285, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1234, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1026, in _send_output self.send(msg) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 964, in send self.connect() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1400, in connect server_hostname=server_hostname) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 401, in wrap_socket context=self, session=session) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 808, in init self.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 1061, in do_handshake self._sslobj.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 683, in do_handshake self._sslobj.do_handshake() ssl.SSLError: certificate verify failed (_ssl.c:748) $
Из вывода было ясно, что он должен что-то делать с сертификатами SSL. Но сертификат веб-сайта в порядке, так что это должно быть что-то с настройкой. После некоторого поиска в Google я обнаружил, что в MacOS нам нужно запустить файл Install Certificates.command, находящийся в каталоге установки в Python, чтобы исправить эту проблему. На изображении ниже показан результат выполнения этой команды, похоже, что он устанавливает последние сертификаты, которые будут использоваться при создании SSL-соединений.
Обратите внимание, что я получил эту ошибку в Mac OS. Однако в моей системе Ubuntu он работал отлично
BaseHandler Objects¶
objects provide a couple of methods that are directly
useful, and others that are meant to be used by derived classes. These are
intended for direct use:
- (director)
-
Add a director as parent.
- ()
-
Remove any parents.
The following attribute and methods should only be used by classes derived from
.
Note
The convention has been adopted that subclasses defining
or methods are named
; all others are named .
-
A valid , which can be used to open using a different
protocol, or handle errors.
- (req)
-
This method is not defined in , but subclasses should
define it if they want to catch all URLs.This method, if implemented, will be called by the parent
. It should return a file-like object as described in
the return value of the of , or .
It should raise , unless a truly exceptional
thing happens (for example, should not be mapped to
).This method will be called before any protocol-specific open method.
-
This method is not defined in , but subclasses should
define it if they want to handle URLs with the given protocol.This method, if defined, will be called by the parent .
Return values should be the same as for .
- (req)
-
This method is not defined in , but subclasses should
define it if they want to catch all URLs with no specific registered handler to
open it.This method, if implemented, will be called by the
. Return values should be the same as for
.
- (req, fp, code, msg, hdrs)
-
This method is not defined in , but subclasses should
override it if they intend to provide a catch-all for otherwise unhandled HTTP
errors. It will be called automatically by the getting
the error, and should not normally be called in other circumstances.req will be a object, fp will be a file-like object with
the HTTP error body, code will be the three-digit code of the error, msg
will be the user-visible explanation of the code and hdrs will be a mapping
object with the headers of the error.Return values and exceptions raised should be the same as those of
.
-
nnn should be a three-digit HTTP error code. This method is also not defined
in , but will be called, if it exists, on an instance of a
subclass, when an HTTP error with code nnn occurs.Subclasses should override this method to handle specific HTTP errors.
Arguments, return values and exceptions raised should be the same as for
.
-
This method is not defined in , but subclasses should
define it if they want to pre-process requests of the given protocol.This method, if defined, will be called by the parent .
req will be a object. The return value should be a
object.
Объект Response
Response — это объект для проверки результатов запроса.
Давайте сделаем тот же запрос, но на этот раз сохраним его в переменную, чтобы мы могли более подробно изучить его атрибуты и поведение:
В этом примере вы захватили значение, возвращаемое значение , которое является экземпляром Response, и сохранили его в переменной response. Название переменной может быть любым.
Код ответа HTTP
Первый кусок данных, который можно получить из ответа — код состояния (он же код ответа HTTP). Код ответа информирует вас о состоянии запроса.
Например, статус означает, что ваш запрос был успешно выполнен, а статус означает, что ресурс не найден. Есть множество других ответов сервера, которые могут дать вам информацию о том, что произошло с вашим запросом.
Используя вы можете увидеть статус, который вернул вам в ответ сервер:
вернул 200 — это значит, что запрос успешно выполнен и сервер отдал вам запрашиваемые данные.
Иногда эту информацию можно использовать в коде для принятия решений:
Если сервер возвращает 200, то программа выведет , если код ответа 400, то программа выведет .
Requests делает еще один шаг к тому, чтобы сделать это проще. Если вы используете экземпляр Response в условном выражении, то он получит значение , если код ответа между 200 и 400, и False во всех остальных случаях.
Поэтому вы можете сделать проще последний пример, переписав :
Помните, что этот метод не проверяет, что код состояния равен 200.
Причиной этого является то, что ответы с кодом в диапазоне от 200 до 400, такие как и , тоже считаются истинными, так как они дают некоторый обрабатываемый ответ.
Например, статус 204 говорит о том, что запрос был успешным, но в теле ответа нет содержимого.
Поэтому убедитесь, что вы используете этот сокращенный вид записи, только если хотите узнать был ли запрос успешен в целом. А затем обработать код состояния соответствующим образом.
Если вы не хотите проверять код ответа сервера в операторе , то вместо этого вы можете вызвать исключение, если запрос был неудачным. Это можно сделать вызвав :
Если вы используете , то HTTPError сработает только для определенных кодов состояния. Если состояние укажет на успешный запрос, то исключение не будет вызвано и программа продолжит свою работу.
Теперь вы знаете многое о том, что делать с кодом ответа от сервера. Но когда вы делаете GET-запрос, вы редко заботитесь только об ответе сервера — обычно вы хотите увидеть больше.
Далее вы узнаете как просмотреть фактические данные, которые сервер отправил в теле ответа.
Content
Ответ на Get-запрос, в теле сообщения часто содержит некую ценную информацию, известную как «полезная нагрузка» («Payload»). Используя атрибуты и методы Response, вы можете просматривать payload в разных форматах.
Чтобы увидеть содержимое ответа в байтах, используйте :
Пока дает вам доступ к необработанным байтам полезной нагрузки ответа, вы можете захотеть преобразовать их в строку с использованием кодировки символов UTF-8. Response это сделает за вас, когда вы укажите :
Поскольку для декодирования байтов в строки требуется схема кодирования, Requests будет пытаться угадать кодировку на основе заголовков ответа. Вы можете указать кодировку явно, установив перед указанием :
Если вы посмотрите на ответ, то вы увидите, что на самом деле это последовательный JSON контент. Чтобы получить словарь, вы можете взять строку, которую получили из и десериализовать ее с помощью . Однако, более простой способ сделать это — использовать .
Тип возвращаемого значения — это словарь, поэтому вы можете получить доступ к значениям в объекте по ключу.
Вы можете делать многое с кодом состояний и телом сообщений. Но если вам нужна дополнительная информация, такая как метаданные о самом ответе, то вам нужно взглянуть на заголовки ответа.
Заголовки
Заголовки ответа могут дать вам полезную информацию, такую как тип ответа и ограничение по времени, в течение которого необходимо кэшировать ответ.
Чтобы посмотреть заголовки, укажите :
возвращает похожий на словарь объект, позволяющий получить доступ к значениям объекта по ключу. Например, чтобы получить тип содержимого ответа, вы можете получить доступ к Content-Type:
Используя ключ или — вы получите одно и то же значение.
Теперь вы узнали основное о Response. Вы увидели его наиболее используемые атрибуты и методы в действии. Давайте сделаем шаг назад и посмотрим как изменяются ответы при настройке Get-запросов.
Содержимое ответа в JSON
Если же используются данные формата JSON, то необходимо использовать следующий декодер.
>>> import requests
>>> r = requests.get(‘https://api.github.com/events’)
>>> r.json()
[{‘repository’: {‘open_issues’: 0, ‘url’: ‘https://github.com/…
Если же попытка декодирования оказалась неудачной, то функцией r.json() будет возвращена ошибка. Она зависит от кода, который прислал сервер. Например, при коде 204 будет возвращено следующее исключение: ValueError: No JSON object could be decoded.
Важно обратить внимание, что если r.json() вызывается без ошибок, это еще не означает, что сервер не вернул какое-то исключение. Так, некоторые из них могут возвращать именно JSON, если ответ неудачный. Для проверки запроса необходимо использовать такую команду r.raise_for_status()
Для проверки запроса необходимо использовать такую команду r.raise_for_status()
Python Tutorial
Python HOMEPython IntroPython Get StartedPython SyntaxPython CommentsPython Variables
Python Variables
Variable Names
Assign Multiple Values
Output Variables
Global Variables
Variable Exercises
Python Data TypesPython NumbersPython CastingPython Strings
Python Strings
Slicing Strings
Modify Strings
Concatenate Strings
Format Strings
Escape Characters
String Methods
String Exercises
Python BooleansPython OperatorsPython Lists
Python Lists
Access List Items
Change List Items
Add List Items
Remove List Items
Loop Lists
List Comprehension
Sort Lists
Copy Lists
Join Lists
List Methods
List Exercises
Python Tuples
Python Tuples
Access Tuples
Update Tuples
Unpack Tuples
Loop Tuples
Join Tuples
Tuple Methods
Tuple Exercises
Python Sets
Python Sets
Access Set Items
Add Set Items
Remove Set Items
Loop Sets
Join Sets
Set Methods
Set Exercises
Python Dictionaries
Python Dictionaries
Access Items
Change Items
Add Items
Remove Items
Loop Dictionaries
Copy Dictionaries
Nested Dictionaries
Dictionary Methods
Dictionary Exercise
Python If…ElsePython While LoopsPython For LoopsPython FunctionsPython LambdaPython ArraysPython Classes/ObjectsPython InheritancePython IteratorsPython ScopePython ModulesPython DatesPython MathPython JSONPython RegExPython PIPPython Try…ExceptPython User InputPython String Formatting
Request Method
The request method indicates the method to be performed on the resource identified by the given Request-URI. The method is case-sensitive and should always be mentioned in uppercase. The following table lists all the supported methods in HTTP/1.1.
S.N. | Method and Description |
---|---|
1 |
GET
The GET method is used to retrieve information from the given server using a given URI. Requests using GET should only retrieve data and should have no other effect on the data. |
2 |
HEAD
Same as GET, but it transfers the status line and the header section only. |
3 |
POST
A POST request is used to send data to the server, for example, customer information, file upload, etc. using HTML forms. |
4 |
PUT
Replaces all the current representations of the target resource with the uploaded content. |
5 |
DELETE
Removes all the current representations of the target resource given by URI. |
6 |
CONNECT
Establishes a tunnel to the server identified by a given URI. |
7 |
OPTIONS
Describe the communication options for the target resource. |
8 |
TRACE
Performs a message loop back test along with the path to the target resource. |
GET и POST запросы с использованием Python
Существует два метода запросов HTTP (протокол передачи гипертекста): запросы GET и POST в Python.
Что такое HTTP/HTTPS?
HTTP — это набор протоколов, предназначенных для обеспечения связи между клиентами и серверами. Он работает как протокол запроса-ответа между клиентом и сервером.
Веб-браузер может быть клиентом, а приложение на компьютере, на котором размещен веб-сайт, может быть сервером.
Итак, чтобы запросить ответ у сервера, в основном используют два метода:
- GET: запросить данные с сервера. Т.е. мы отправляем только URL (HTTP) запрос без данных. Метод HTTP GET предназначен для получения информации от сервера. В рамках GET-запроса некоторые данные могут быть переданы в строке запроса URI в формате параметров (например, условия поиска, диапазоны дат, ID Объекта, номер счетчика и т.д.).
- POST: отправить данные для обработки на сервер (и получить ответ от сервера). Мы отправляем набор информации, набор параметров для API. Метод запроса POST предназначен для запроса, при котором веб-сервер принимает данные, заключённые в тело сообщения POST запроса.
Чтобы сделать HTTP-запросы в python, мы можем использовать несколько HTTP-библиотек, таких как:
- HTTPLIB
- URLLIB
- REQUESTS
Самая элегантная и простая из перечисленных выше библиотек — это Requests. Библиотека запросов не является частью стандартной библиотеки Python, поэтому вам нужно установить ее, чтобы начать работать с ней.
Если вы используете pip для управления вашими пакетами Python, вы можете устанавливать запросы, используя следующую команду:
pip install requests
Если вы используете conda, вам понадобится следующая команда:
conda install requests
После того, как вы установили библиотеку, вам нужно будет ее импортировать
Давайте начнем с этого важного шага:
import requests
Синтаксис / структура получения данных через GET/POST запросы к API
Есть много разных типов запросов. Наиболее часто используемый, GET запрос, используется для получения данных.
Когда мы делаем запрос, ответ от API сопровождается кодом ответа, который сообщает нам, был ли наш запрос успешным. Коды ответов важны, потому что они немедленно сообщают нам, если что-то пошло не так.
Чтобы сделать запрос «GET», мы будем использовать функцию.
Метод используется, когда вы хотите отправить некоторые данные на сервер.
Ниже приведена подборка различных примеров использования запросов GET и POST через библиотеку REQUESTS. Безусловно, существует еще больше разных случаев. Всегда прежде чем, писать запрос, необходимо обратиться к официальной документации API (например, у Yandex есть документация к API различных сервисов, у Bitrix24 есть документация к API, у AmoCRM есть дока по API, у сервисов Google есть дока по API и т.д.). Вы смотрите какие методы есть у API, какие запросы API принимает, какие данные нужны для API, чтобы он мог выдать информацию в соответствии с запросом. Как авторизоваться, как обновлять ключи доступа (access_token). Все эти моменты могут быть реализованы по разному и всегда нужно ответ искать в официальной документации у поставщика API.
#GET запрос без параметров response = requests.get('https://api-server-name.com/methodname_get') #GET запрос с параметрами в URL response = requests.get("https://api-server-name.com/methodname_get?param1=ford¶m2=-234¶m3=8267") # URL запроса преобразуется в формат https://api-server-name.com/methodname_get?key2=value2&key1=value1 param_request = {'key1': 'value1', 'key2': 'value2'} response = requests.get('https://api-server-name.com/methodname_get', params=param_request) #GET запрос с заголовком url = 'https://api-server-name.com/methodname_get' headers = {'user-agent': 'my-app/0.0.1'} response = requests.get(url, headers=headers) #POST запрос с параметрами в запросе response = requests.post('https://api-server-name.com/methodname_post', data = {'key':'value'}) #POST запрос с параметрами через кортеж param_tuples = response = requests.post('https://api-server-name.com/methodname_post', data=param_tuples) #POST запрос с параметрами через словарь param_dict = {'param': } response = requests.post('https://api-server-name.com/methodname_post', data=payload_dict) #POST запрос с параметрами в формате JSON import json url = 'https://api-server-name.com/methodname_post' param_dict = {'param': 'data'} response = requests.post(url, data=json.dumps(param_dict))
HTTPResponse Objects¶
An instance wraps the HTTP response from the
server. It provides access to the request headers and the entity
body. The response is an iterable object and can be used in a with
statement.
Changed in version 3.5: The interface is now implemented and
all of its reader operations are supported.
- (amt)
-
Reads and returns the response body, or up to the next amt bytes.
- (b)
-
Reads up to the next len(b) bytes of the response body into the buffer b.
Returns the number of bytes read.New in version 3.3.
- (name, default=None)
-
Return the value of the header name, or default if there is no header
matching name. If there is more than one header with the name name,
return all of the values joined by ‘, ‘. If ‘default’ is any iterable other
than a single string, its elements are similarly returned joined by commas.
- ()
-
Return a list of (header, value) tuples.
- ()
-
Return the of the underlying socket.
-
HTTP protocol version used by server. 10 for HTTP/1.0, 11 for HTTP/1.1.
-
URL of the resource retrieved, commonly used to determine if a redirect was followed.
-
Status code returned by server.
-
Reason phrase returned by server.
-
A debugging hook. If is greater than zero, messages
will be printed to stdout as the response is read and parsed.
-
Is if the stream is closed.
- ()
-
Deprecated since version 3.9: Deprecated in favor of .
- ()
-
Deprecated since version 3.9: Deprecated in favor of .
Передача параметров в GET
В некоторых случаях вам нужно будет передавать параметры вместе с вашими запросами GET, которые принимают форму строк запроса. Для этого нам нужно передать эти значения в параметре params, как показано ниже:
import requests payload = {'user_name': 'admin', 'password': 'password'} r = requests.get('http://httpbin.org/get', params=payload) print(r.url) print(r.text)
Здесь мы присваиваем значения наших параметров переменной полезной нагрузки, а затем – запросу GET через params. Приведенный выше код вернет следующий результат:
http://httpbin.org/get?password=passworduser_name=admin {"args":{"password":"password","user_name":"admin"},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate","Connection":"close","Host":"httpbin.org","User-Agent":"python-requests/2.9.1"},"origin":"103.9.74.222","url":"http://httpbin.org/get?password=passworduser_name=admin"}
Как видите, библиотека Reqeusts автоматически превратила наш словарь параметров в строку запроса и прикрепила ее к URL-адресу.
Обратите внимание, что вам нужно быть осторожным, какие данные вы передаете через запросы GET, поскольку полезная нагрузка видна в URL-адресе, как вы можете видеть в выходных данных выше.
Main Classes¶
These classes are the main interface to :
- class (*, session: Union = None, url: str = ‘https://example.org/’, html: Union, default_encoding: str = ‘utf-8’, async_: bool = False)
-
An HTML document, ready for parsing.
Parameters: - url – The URL from which the HTML originated, used for .
- html – HTML from which to base the parsing upon (optional).
- default_encoding – Which encoding to default to.
-
All found links on page, in absolute form
(learn more).
- (retries: int = 8, script: str = None, wait: float = 0.2, scrolldown=False, sleep: int = 0, reload: bool = True, timeout: Union = 8.0, keep_page: bool = False, cookies: list = , send_cookies_session: bool = False)
-
Async version of render. Takes same parameters.
-
The base URL for the page. Supports the tag
(learn more).
-
The encoding string to be used, extracted from the HTML and
headers.
- (selector: str = ‘*’, *, containing: Union] = None, clean: bool = False, first: bool = False, _encoding: str = None) → Union, requests_html.Element]
-
Given a CSS Selector, returns a list of
objects or a single one.Parameters: - selector – CSS Selector to use.
- clean – Whether or not to sanitize the found HTML of and tags.
- containing – If specified, only return elements that contain the provided text.
- first – Whether or not to return just the first result.
- _encoding – The encoding format.
Example CSS Selectors:
See W3School’s CSS Selectors Reference
for more details.If is , only returns the first
found.
-
The full text content (including links) of the
or .
-
Unicode representation of the HTML content
(learn more).
-
All found links on page, in as–is form.
-
lxml representation of the
or .
- (fetch: bool = False, next_symbol: List = ) → Union]
-
Attempts to find the next page, if there is one. If
is (default), returns object of
next page. If is , simply returns the next URL.
-
PyQuery representation
of the or .
-
Bytes representation of the HTML content.
(learn more).
- (retries: int = 8, script: str = None, wait: float = 0.2, scrolldown=False, sleep: int = 0, reload: bool = True, timeout: Union = 8.0, keep_page: bool = False, cookies: list = , send_cookies_session: bool = False)
-
Reloads the response in Chromium, and replaces HTML content
with an updated version, with JavaScript executed.Parameters: - retries – The number of times to retry loading the page in Chromium.
- script – JavaScript to execute upon page load (optional).
- wait – The number of seconds to wait before loading the page, preventing timeouts (optional).
- scrolldown – Integer, if provided, of how many times to page down.
- sleep – Integer, if provided, of how many seconds to sleep after initial render.
- reload – If , content will not be loaded from the browser, but will be provided from memory.
- keep_page – If will allow you to interact with the browser page through .
- send_cookies_session – If send convert.
- cookies – If not send .
If is specified, the page will scrolldown the specified
number of times, after sleeping the specified amount of time
(e.g. ).If just is provided, the rendering will wait n seconds, before
returning.If is specified, it will execute the provided JavaScript at
runtime. Example:script = """ () => { return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight, deviceScaleFactor: window.devicePixelRatio, } } """
Returns the return value of the executed , if any is provided:
>>> r.html.render(script=script) {'width': 800, 'height': 600, 'deviceScaleFactor': 1}
Warning: the first time you run this method, it will download
Chromium into your home directory ().
- (template: str) → parse.Result
-
Search the for the given Parse template.
Parameters: template – The Parse template to use.
- (template: str) → Union, parse.Result]
-
Search the (multiple times) for the given parse
template.Parameters: template – The Parse template to use.
-
The text content of the
or .
- (selector: str, *, clean: bool = False, first: bool = False, _encoding: str = None) → Union, List, str, requests_html.Element]
-
Given an XPath selector, returns a list of
objects or a single one.Parameters: - selector – XPath Selector to use.
- clean – Whether or not to sanitize the found HTML of and tags.
- first – Whether or not to return just the first result.
- _encoding – The encoding format.
If a sub-selector is specified (e.g. ), a simple
list of results is returned.See W3School’s XPath Examples
for more details.If is , only returns the first
found.
Redirection and History¶
By default Requests will perform location redirection for all verbs except
HEAD.
We can use the property of the Response object to track redirection.
The list contains the
objects that were created in order to
complete the request. The list is sorted from the oldest to the most recent
response.
For example, GitHub redirects all HTTP requests to HTTPS:
>>> r = requests.get('http://github.com/') >>> r.url 'https://github.com/' >>> r.status_code 200 >>> r.history >]
If you’re using GET, OPTIONS, POST, PUT, PATCH or DELETE, you can disable
redirection handling with the parameter:
>>> r = requests.get('http://github.com/', allow_redirects=False) >>> r.status_code 301 >>> r.history []
If you’re using HEAD, you can enable redirection as well:
Conclusion
You’ve come a long way in learning about Python’s powerful library.
You’re now able to:
- Make requests using a variety of different HTTP methods such as , , and
- Customize your requests by modifying headers, authentication, query strings, and message bodies
- Inspect the data you send to the server and the data the server sends back to you
- Work with SSL Certificate verification
- Use effectively using , , Sessions, and Transport Adapters
Because you learned how to use , you’re equipped to explore the wide world of web services and build awesome applications using the fascinating data they provide.
Анализ XML. XPath или Bs4
XPath — язык на котором необходимо будет доставать цепочки элементов. И на нем необходимо будет писать выражения для поиска элемента по параметрам ответа.
Примечательно что родители знают о своих детях, но дети не знают о своих родителях. Напрямую, задав путь до проверки атрибута элемента на пятом уровне вложенности, в случае если такой найден, забрать атрибут с его третьего уровня вложенности не получится.
Один из немногих мануалов по тому как с ним обращаться http://www.k-press.ru/cs/2001/2/XPath/XPath4.asp
Есть еще вариант использовать для этого Bs4. Тогда тот же поиск будет выглядеть так: