Comment utiliser la bibliothèque de requêtes du robot Python

王林
Libérer: 2023-05-16 11:46:05
avant
999 Les gens l'ont consulté

1. Installez la bibliothèque de requêtes

Étant donné que le processus d'apprentissage utilise le langage Python, vous devez installer Python à l'avance. J'ai installé Python 3.8. Vous pouvez vérifier la version de Python que vous avez installée en exécutant la commande python --version. Il est recommandé d'installer Python 3. Version X ou supérieure.

Comment utiliser la bibliothèque de requêtes du robot Python

Après avoir installé Python, vous pouvez directement installer la bibliothèque de requêtes via la commande suivante.

pip install requests
Copier après la connexion

Ps : Vous pouvez passer à des sources de pip nationales, telles que Alibaba et Douban, qui sont rapides
Afin de démontrer la fonction, j'ai utilisé nginx pour simuler un site Web simple.
Après le téléchargement, exécutez simplement le programme nginx.exe directement dans le répertoire racine (Remarque : sous environnement Windows).
À ce moment-là, lorsque l'ordinateur local accède à : http://127.0.0.1, il entrera dans une page par défaut de nginx.

Comment utiliser la bibliothèque de requêtes du robot Python

2. Obtenez la page Web

Ensuite, nous commençons à utiliser des requêtes pour simuler une requête et obtenir le code source de la page.

import requestsr = requests.get('http://127.0.0.1')print(r.text)
Copier après la connexion

Les résultats obtenus après l'exécution sont les suivants :

nbsp;html><title>Welcome to nginx!</title><style>    body {        width: 35em;        margin: 0 auto;        font-family: Tahoma, Verdana, Arial, sans-serif;    }</style><h2>Welcome to nginx!</h2><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p>
<p>For online documentation and support please refer to<a>nginx.org</a>.<br>Commercial support is available at<a>nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
Copier après la connexion

3. À propos des requêtes

Il existe de nombreuses requêtes courantes. Par exemple, l'exemple ci-dessus utilise la requête GET. Voici une introduction détaillée à ces méthodes de requête courantes. .

4. Requête GET

4.1. Initier une requête

Nous utilisons la même méthode pour initier une requête GET :

import requests  r = requests.get('http://httpbin.org/get')  print(r.text)
Copier après la connexion

Le résultat du retour est le suivant :

{"args": {}, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.23.0", "X-Amzn-Trace-Id": "Root=1-5f846520-19f215aa46213a2b4241c18a"  }, "origin": "xxxx", "url": "http://httpbin.org/get"}
Copier après la connexion

En renvoyant le résultat, nous pouvons voir le résultat renvoyé Les informations incluses sont : En-têtes, URL, IP, etc.

4.2. Ajouter des paramètres

Habituellement, l'URL que nous visitons contiendra certains paramètres, tels que : l'identifiant est 100, le nom est YOOAO. Pour un accès normal, nous écrirons l'URL d'accès suivante :

http://httpbin.org/get?id=100&name=YOOAO
Copier après la connexion

Évidemment, c'est très gênant, et ce sera sujet aux erreurs lorsqu'il y a de nombreux paramètres. À ce stade, nous pouvons optimiser le contenu d'entrée via le paramètre params.

import requests  data = {      'id': '100',      'name': 'YOOAO'}  r = requests.get('http://httpbin.org/get', params=data)  print(r.text)
Copier après la connexion

Voici le résultat renvoyé en exécutant le code comme suit :

{"args": {"id": "100", "name": "YOOAO"  }, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.23.0", "X-Amzn-Trace-Id": "Root=1-5f84658a-1cd0437b4cf34835410d7161"  }, "origin": "xxx.xxxx.xxx.xxx", "url": "http://httpbin.org/get?id=100&name=YOOAO"}
Copier après la connexion

En renvoyant le résultat, nous pouvons voir que les paramètres transmis via le dictionnaire sont automatiquement construits dans une URL complète, et nous n'avons pas besoin de compléter manuellement le construction nous-mêmes.

4.3. Traitement du résultat de retour

Le résultat de retour est au format json, nous pouvons donc utiliser la méthode d'appel de json pour analyser. Si le contenu renvoyé n'est pas au format json, cet appel signalera une erreur.

import requests  
r = requests.get('http://httpbin.org/get')  print(type(r.text))   print(type(r.json()))
Copier après la connexion

Résultats de retour :

<class><class></class></class>
Copier après la connexion

4.4. Capture de contenu

Ici, nous utilisons des expressions régulières simples pour capturer le contenu de toutes les balises Récupération des résultats :

import requestsimport re
r = requests.get('http://127.0.0.1')pattern = re.compile('<a.>(.*?)', re.S)a_content = re.findall(pattern, r.text)print(a_content)</a.>
Copier après la connexion

Une simple acquisition de page et une exploration du contenu sont terminées ici,

4.5, téléchargement du fichier de données

L'exemple ci-dessus renvoie toutes les informations de la page, si nous voulons obtenir les informations de la page pour les images, l'audio et la vidéo fichiers, nous devons apprendre à capturer les données binaires de la page. Nous pouvons utiliser la méthode open pour terminer le téléchargement de fichiers binaires tels que des images. Exemple de code :

['nginx.org', 'nginx.com']
Copier après la connexion

Dans la méthode open, son premier paramètre est le nom du fichier, et le deuxième paramètre signifie l'ouvrir sous forme binaire, et vous pouvez écrire dans le fichier Entrez les données binaires.

Une fois l'opération terminée, les images téléchargées seront enregistrées dans le même dossier du fichier en cours d'exécution. En utilisant le même principe, nous pouvons traiter des fichiers vidéo et audio.

4.6. Ajouter des en-têtes

Dans l'exemple ci-dessus, nous avons directement lancé la requête sans ajouter d'en-têtes. Certains sites Web provoquent des exceptions d'accès car les requêtes ne comportent pas d'en-têtes de requête. Ici, nous pouvons ajouter manuellement le contenu des en-têtes et simuler l'ajout de l'Uer. -Code de contenu de l'agent dans les en-têtes :

import requests
r = requests.get('http://tu.ossfiles.cn:9186/group3/M00/09/FB/rBpVfl8QFLOAYhhcAAC-pTdNj7g471.jpg')with open('image.jpg', 'wb') as f:    f.write(r.content)print('下载完成')
Copier après la connexion

Résultat de l'exécution :

import requests
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36'}r = requests.get('http://httpbin.org/get', headers=headers)print(r.text)
Copier après la connexion

Le résultat peut être vu que la valeur de User-Agent a changé. Pas le précédent : python-requests/2.23.0.

5. Requête POST

Maintenant que nous avons entendu parler de la requête GET, parlons d'une autre méthode de requête courante : la requête POST.

使用 requests 实现 POST 请求的代码如下:

import requestsdata = {      'id': '100',      'name': 'YOOAO'}  
r = requests.post("http://httpbin.org/post", data=data)print(r.text)
Copier après la connexion

结果如下

{"args": {}, "data": "", "files": {}, "form": {"id": "100", "name": "YOOAO"  }, "headers": {"Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Content-Length": "17", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "python-requests/2.23.0", "X-Amzn-Trace-Id": "Root=1-5ec8f4a0-affca27a05e320a84ca6535a"  }, "json": null, "origin": "xxxx", "url": "http://httpbin.org/post"}
Copier après la connexion

从 form 中我们看到了自己提交的数据,可见我们的 POST 请求访问成功。

6、响应

访问URL时,有请求就会有响应,上面的示例使用 text 和 content 获取了响应的内容。除此以外,还有很多属性和方法可以用来获取其他信息,比如状态码、响应头、Cookies 等。

import requests
r = requests.get('http://127.0.0.1/')print(type(r.status_code), r.status_code)print(type(r.headers), r.headers)print(type(r.cookies), r.cookies)print(type(r.url), r.url)print(type(r.history), r.history)
Copier après la connexion

关于状态码,requests 还提供了一个内置的状态码查询对象 requests.codes,用法示例如下:

import requestsr = requests.get('http://127.0.0.1/')exit() if not r.status_code == requests.codes.ok else print('Request Successfully')==========执行结果==========Request Successfully
Copier après la connexion

这里通过比较返回码和内置的成功的返回码,来保证请求得到了正常响应,输出成功请求的消息,否则程序终止。

这里我们用 requests.codes.ok 得到的是成功的状态码 200。

这样的话,我们就不用再在程序里面写状态码对应的数字了,用字符串表示状态码会显得更加直观。

下面是响应码和查询条件对照信息:

# 信息性状态码  100: ('continue',),  101: ('switching_protocols',),  102: ('processing',),  103: ('checkpoint',),  122: ('uri_too_long', 'request_uri_too_long'),  
# 成功状态码  200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'),  201: ('created',),  202: ('accepted',),  203: ('non_authoritative_info', 'non_authoritative_information'),  204: ('no_content',),  205: ('reset_content', 'reset'),  206: ('partial_content', 'partial'),  207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'),  208: ('already_reported',),  226: ('im_used',),  
# 重定向状态码  300: ('multiple_choices',),  301: ('moved_permanently', 'moved', '\\o-'),  302: ('found',),  303: ('see_other', 'other'),  304: ('not_modified',),  305: ('use_proxy',),  306: ('switch_proxy',),  307: ('temporary_redirect', 'temporary_moved', 'temporary'),  308: ('permanent_redirect',        'resume_incomplete', 'resume',), # These 2 to be removed in 3.0  
# 客户端错误状态码  400: ('bad_request', 'bad'),  401: ('unauthorized',),  402: ('payment_required', 'payment'),  403: ('forbidden',),  404: ('not_found', '-o-'),  405: ('method_not_allowed', 'not_allowed'),  406: ('not_acceptable',),  407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'),  408: ('request_timeout', 'timeout'),  409: ('conflict',),  410: ('gone',),  411: ('length_required',),  412: ('precondition_failed', 'precondition'),  413: ('request_entity_too_large',),  414: ('request_uri_too_large',),  415: ('unsupported_media_type', 'unsupported_media', 'media_type'),  416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),  417: ('expectation_failed',),  418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),  421: ('misdirected_request',),  422: ('unprocessable_entity', 'unprocessable'),  423: ('locked',),  424: ('failed_dependency', 'dependency'),  425: ('unordered_collection', 'unordered'),  426: ('upgrade_required', 'upgrade'),  428: ('precondition_required', 'precondition'),  429: ('too_many_requests', 'too_many'),  431: ('header_fields_too_large', 'fields_too_large'),  444: ('no_response', 'none'),  449: ('retry_with', 'retry'),  450: ('blocked_by_windows_parental_controls', 'parental_controls'),  451: ('unavailable_for_legal_reasons', 'legal_reasons'),  499: ('client_closed_request',),  
# 服务端错误状态码  500: ('internal_server_error', 'server_error', '/o\\', '✗'),  501: ('not_implemented',),  502: ('bad_gateway',),  503: ('service_unavailable', 'unavailable'),  504: ('gateway_timeout',),  505: ('http_version_not_supported', 'http_version'),  506: ('variant_also_negotiates',),  507: ('insufficient_storage',),  509: ('bandwidth_limit_exceeded', 'bandwidth'),  510: ('not_extended',),  511: ('network_authentication_required', 'network_auth', 'network_authentication')
Copier après la connexion

7、SSL 证书验证

现在很多网站都会验证证书,我们可以设置参数来忽略证书的验证。

import requests
response = requests.get('https://XXXXXXXX', verify=False)print(response.status_code)
Copier après la connexion

或者制定本地证书作为客户端证书:

import requests
response = requests.get('https://xxxxxx', cert=('/path/server.crt', '/path/server.key'))print(response.status_code)
Copier après la connexion

注意:本地私有证书的 key 必须是解密状态,加密状态的 key 是不支持的。

8、设置超时

很多时候我们需要设置超时时间来控制访问的效率,遇到访问慢的链接直接跳过。

示例代码:

import requests# 设置超时时间为 10 秒r = requests.get('https://httpbin.org/get', timeout=10)print(r.status_code)
Copier après la connexion

将连接时间和读取时间分开计算:

r = requests.get('https://httpbin.org/get', timeout=(3, 10))
Copier après la connexion

不添加参数,默认不设置超时时间,等同于:

r = requests.get('https://httpbin.org/get', timeout=None)
Copier après la connexion

9、身份认证

遇到一些网站需要输入用户名和密码,我们可以通过 auth 参数进行设置。

import requests  from requests.auth import HTTPBasicAuth  # 用户名为 admin ,密码为 admin r = requests.get('https://xxxxxx/', auth=HTTPBasicAuth('admin', 'admin'))  print(r.status_code)
Copier après la connexion

简化写法:

import requests
r = requests.get('https://xxxxxx', auth=('admin', 'admin'))print(r.status_code)
Copier après la connexion

10、设置代理

如果频繁的访问某个网站时,后期会被一些反爬程序识别,要求输入验证信息,或者其他信息,甚至IP被封无法再次访问,这时候,我们可以通过设置代理来避免这样的问题。

import requests
proxies = {  "http": "http://10.10.1.10:3128",  "https": "http://10.10.1.10:1080",}
requests.get("http://example.org", proxies=proxies)
Copier après la connexion

若你的代理需要使用HTTP Basic Auth,可以使用 

http://user:password@host/ 语法:

proxies = {    "http": "http://user:pass@10.10.1.10:3128/",}
Copier après la connexion

要为某个特定的连接方式或者主机设置代理,使用 scheme://hostname 作为 key, 它会针对指定的主机和连接方式进行匹配。

proxies = {'http://10.20.1.128': 'http://10.10.1.10:5323'}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!