Это 11-я оригинальная статья для ежедневного изучения Python.
После использования библиотеки URLLIB возникают проблемы.Например, для получения файла cookie требуется несколько шагов, кода больше, это и стиль Python кажутся немного менее похожими на ха, есть ли более простая библиотека для запроса? Ответ — да, это сторонняя библиотека.requests, автор этой библиотеки известенkennethreitz, причина создания этой библиотеки — упростить разработчикам Python инициирование и обработку запросов. В нем также есть имя:HTTP for Humans, Как следует из названия, он используется для запроса http. Если вы хотите увидеть исходный код, вы можете найти его имя на github, и вы сможете его увидеть.
Далее давайте представим, как использовать эту библиотеку!
(Эта статья изначально была опубликована в публичном аккаунте [Daily Learning Python])
Поскольку это сторонняя библиотека, нам нужно загрузить ее и ввести ее в командную строку
pip install requests
Если вы установили анакоду, можете игнорировать это
После установки давайте использовать его
отправить запрос на получение
# 发送请求
import requests
response = requests.get('http://httpbin.org/get')
# 获取返回的html信息
print(response.text)
Таким образом, отправляется запрос на получение, а также печатается возвращенный контент.Для этого больше не нужно знать, какая кодировка веб-страницы, но иногда возникают проблемы с кодировкой, но вы также можете указать тип кодировки, например:
response.encoding = 'utf-8'
После завершения спецификации вы можете нормально кодировать, если знаете тип кодировки веб-страницы.
Из вышеперечисленного мы также можем получить следующую информацию
print(response.headers)
# 请求状态码
print(response.status_code)
# 获取网页的二进制内容
print(response.content)
print(response.url) # 获取请求的url
print(response.cookies) # 获取cookie
Как вы думаете, это очень просто, достаточно одной строчки кода. Больше никаких шагов кода или чего-то еще.
Далее отправляется запрос на подъем по полосе запросов
# 还可以添加请求头进行请求
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
response = requests.get('httpbin.org/get', headers=headers )
print(response.headers)
print(response.text)
Добавление заголовка запроса — это просто добавление параметра ключевого слова
Вы также можете сделать запрос на получение с параметрами
# 进行带参数的get请求
data = {'name': 'june', 'password': 123456}
response = requests.get('http://httpbin.org/get', params=data)
print(response.text)
Что делать, если вам нужно войти в систему? Как отправить почтовый запрос? Скажу вам, это все еще очень просто
# 进行post请求
data = {'name': 'june', 'password': 123456}
response = requests.post('http://httpbin.org/post', data=data, headers=headers)
print(response.text)
Это очень просто, но также добавьте параметр ключевого слова данных и опубликуйте параметры входа для отправки.
В дополнение к вышеупомянутым двум запросам, можно ли сделать другие запросы? Я очень рад сообщить вам, да. Например, вы хотите отправить такой запрос на размещение
requests.put()
requests.delete()
Это для отправки запросов на размещение и запросов на удаление, и другие запросы отправляются таким же образом, поэтому я не буду рассказывать о них по одному.
При входе нам иногда нужно ввести проверочный код, так как его потерять? Сканер не видит веб-страницу. Самый простой способ — загрузить изображение кода подтверждения и ввести его вручную. Так как же нам его загрузить? Мы можем отправить запрос на URL-адрес этого изображения, а затем сохранить возвращенный контент в файле двоичным методом.
код показывает, как показано ниже:
# 从网上读取二进制数据,比如图片
response = requests.get('https://www.baidu.com/img/bd_logo1.png', headers=headers)
# 这个是直接获取字节码,这个是要保存的文件
print(response.content)
# 这个是获取解码后的返回内容,这个是乱码
print(response.text)
# 用文件来把图片下载下来
with open('baidu.png', 'wb') as f: # 注意写的方式是以二进制方式写入
f.write(response.content)
print('下载完毕')
Все еще очень просто, я должен сказать, что эта библиотека очень полезна.
Когда нам нужно загрузить файл, например изображение, мы также можем использовать метод post для его отправки.
# 上传文件
files = {'picture': open('baidu.png', 'rb')}
response = requests.post('http://httpbin.org/post', files=files)
print(response.text)
Получите файл cookie и просто обработайте его
# 获取cookie
response = requests.get('https://www.baidu.com')
for k, v in response.cookies.items():
print(k, '=', v)
Когда возвращается веб-страница, является форматом JSON, нам не нужно использовать библиотеку JSON для разрешения, мы можем использовать метод запросов для анализа, эффект такой же.
# 解析json
j = response.json() # 可以用json库来解析,结果一样
При сохранении данных для входа в библиотеку urllib необходимо сохранить файл cookie, но в библиотеке запросов нам нужно использовать толькоrequests.session()Просто сохраните информацию.
# 用会话来保持登陆信息
session = requests.session()
response = session.get('http://httpbin.org/cookies/set/number/123456')
print(response.text)
Таким образом, вы можете сохранить логин, вам не нужно беспокоиться о файлах cookie, но вы можете каждый раз получать сессию, а затем использовать ее для запросов или других операций. Нет необходимости создавать сеанс для каждого запроса или операции, поэтому данные для входа нельзя сохранить.
Когда веб-сайт небезопасен и требует подтверждения с помощью сертификата, например, этот веб-сайт
https://www.12306.cn
В настоящее время, чтобы получить доступ к содержимому веб-сайта внутри, нам нужно проверить, что код выглядит следующим образом.
# 证书验证
response = requests.get('https://www.12306.cn', verify=False) # 不加这个关键字参数的话会出现验证错误问题,因为这个网站的协议不被信任
Это даст доступ, но будет предупреждение
E:\anaconda\lib\site-packages\urllib3\connectionpool.py:858: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
Если вам не кажется это красивым, мы также можем добавить в запрос параметр ключевого слова cert, значением которого является доверенный сертификат, кортеж, а также номер учетной записи и пароль и т. д., что здесь не будет продемонстрировано.
Мы также можем сделать это
from requests.auth import HTTPBasicAuth
# 设置认证
# requests.get('需要认证的网址', auth=HTTPBasicAuth('user', 'passwd')) # 由于找不到需要认证的网址,所以先写个主体
# 还可以这样认证
# requests.get('需要认证的网址', auth=('user', 'passwd')) # 这样就简单点
Поскольку я не могу найти сайт, требующий аутентификации, я не буду его показывать.
запросы также могут использовать прокси-IP для запроса веб-сайтов, чтобы предотвратить блокировку IP-адреса, чтобы вы не могли сканировать. Использование прокси ip также намного проще, чем библиотека urllib, код выглядит следующим образом:
# 设置代理
proxies = {'http': 'http://122.114.31.177:808',
'https': 'https://119.28.223.103:8088'}
# 在请求时添加上列代理
response = requests.get('http://httpbin.org/get', proxies=proxies)
print(response.text)
Приведенный выше формат словаря требует взаимно однозначного соответствия, а затем к запросу добавляются прокси-параметры ключевого слова.
Когда программа запущена, она будет принудительно остановлена при возникновении ошибки.Если вы хотите продолжить работу, вам нужно перехватить исключение, чтобы программа продолжала работать.
В библиотеке Requests есть библиотека аномальных библиотек Requests.Exceptions
Здесь мы просто имеем дело с обработкой таймаута запроса
import requests
from requests.exceptions import ReadTimeout, ConnectTimeout, HTTPError, ConnectionError, RequestException
# 捕捉异常
try:
response = requests.get('http://httpbin.org/get', timeout=0.1) # 规定时间内未响应就抛出异常
print(response.text)
except ReadTimeout as e:
print('请求超时')
except ConnectionError as e:
print('连接失败')
except RequestException as e:
print('请求失败')
Здесь перехватываются три исключения, поскольку ReadTimeout является подклассом ConnectionError, поэтому сначала захватите ReadTimeout, а затем захватите родительский класс. И ConnectionError и RequestException одинаковы
Дополнительные сведения об обработке исключений см. в документации.
Выше приведены все мои заметки во время изучения и некоторые ямки, с которыми я столкнулся при их использовании. Надеюсь, они будут вам полезны. Если вы хотите увидеть больше использования, вы можете перейти к официальной документации. Я также разместил код на github, вы можете проверить его, если хотите.
Гитхаб:GitHub.com/Серджио Джун/…
Официальная документация:docs.Python-requests.org/this_cn/latshan…
Учебные ресурсы: https://edu.hellobi.com/course/157
Изучайте Python каждый день
Публичный аккаунт, ориентированный на python