python爬虫知识点总结(四)Requests库的基本使用

官方文档:http://docs.python-requests.org/en/master

安装方法

  命令行下输入:pip3 install requests。详见:https://www.cnblogs.com/cthon/p/9388304.html

一、什么是Requets?

requets

实例引入

import requests

response = requests.get('https://www.baidu.com')
print(type(response))
print(response.status_code)
print(type(response.text))
print(response.text)
print(response.cookies)

  

各种请求方式

import requests
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.get('http://httpbin.org/get')
requests.options('http://httpbin.org/get')

  

请求

基本GET请求

基本写法

import requests

response = requests.get('http://httpbin.org/get')
print(response.text)

  

带参数GET请求

import requests
response = requests.get('http://httpbin.org/get?name=jack&age=22')
print(response.text)

  

import requests

data = {
    'name':'jack',
    'age':22
}
response = requests.get('http://httpbin.org/get',params=data)
print(response.text)

  

解析json

import requests
import json

response = requests.get('https://github.com/get')
print(type(response.text))
print(response.json())
print(json.loads(response.text))
print(type(response.json()))

  

获取二进制数据

import requests

response = requests.get('https://github.com/favicon.ico')
print(type(response.text),type(response.content))
print(response.text)
print(response.content)

  

import requests

response = requests.get('https://www.bilibili.com/video/av24028845/?p=9')
with open('q.avi','wb') as f:
    f.write(response.content)
    f.close()

  

添加headers

import requests

response = requests.get('https://zhihu.com/explore')
print(response.text)

  

import requests

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'}
response = requests.get('https://www.zhihu.com/explore',headers=headers)
print(response.text)

  

基本POST请求

import requests

data = {'name':'jack','age':'22'}
response = requests.post('https://httpbin.org/post',data=data)
print(response.text)
print(response.json())

  

import requests

data = {'name':'jack','age':'22'}
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'}
response = requests.post('https://httpbin.org/post',data=data,headers=headers)
print(response.text)
print(response.json())

  

响应

response属性

import requests

response = requests.get('http://www.jianshu.com')
print(type(response.status_code),response.status_code)
print(type(response.headers),response.headers)
print(type(response.cookies),response.cookies)
print(type(response.url),response.url)
print(type(response.history),response.history)

  

状态码判断

import requests

response = requests.get('http://www.cnblogs.com/cthon/p/9383778.html')
exit() if not response.status_code == requests.codes.not_found else print('404 Not Found')

  

import requests

response = requests.get('http://www.cnblogs.com/cthon/p/9383778.html')
exit() if not response.status_code == 200 else print('Request Successfully')

  

状态码

100:('continue',),
101:('switching_protocols',),
102:('processing',),
103:('checkpoint',),
122:('url_too_long','request_url_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_status'),
208:('already_reported',),
226:('im_used',),
    
#Redirection
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','temporary_moved','temporary',),#There 2 to be removed in 3.0
    
#Client Error
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:('confict',),
410('gone',),
411:('length_required',),
412:('precondition_failed','precondition'),
413:('request_entity_too_large',),
414:('request_url_too_large',),
415:('unsupported_media_type','unsupported_media','media_type'),
416:('requested_range_not_satisfiable','requestd_range','range_not_satisfiable'),
417:('expectation_request',),
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',),

#Server Error
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_negotiaes',),
507:('insufficient_storage',),
509:('bandwidth_limit_exceeded','bandwidth'),
510:('not_extended',),
511:('network_aurhentication_required','network_auth','network_authentication'),

  

高级文件操作

import requests

files= {'file':open('favicon.ico','rb')}
response = requests.post('http://httpbin.org/post',files=files)
print(response.text)

  

获取Cookie

import requests

response = requests.get('http://www.baidu.com')
print(response.cookies)
for key,value in response.cookies.items():
    print(key+'='+value)

  

会话维持

import requests

requests.get('http://httpbin.org/cookies/set/number/123456789')
response=requests.get('http://httpbin.org/cookies')
print(response.text)

  

import requests

s = requests.Session()
s.get('http://httpbin.org/cookies/set/number/123456789')
response=s.get('http://httpbin.org/cookies')
print(response.text)

  

证书验证

#12306错误证书,请求失败
import requests

response = requests.get('https://www.12306.cn/')
print(response.status_code)

  

import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://www.12306.cn',verify = False)
print(response.status_code)

  

import requests

reeponse = requests.get('https://www.12306.cn',cer=('/path/server.crt','/path/key'))
print(response.status_code)

  

代理设置

  http代理

import requests

proxies = {
    'http':'http://127.0.0.1:9743',
    'https':'https://127.0.0.1:9743'
}
response = requests.get('https://www.taobao.com',proxies=proxies)
print(response.status_code)

  

import requests

proxies = {
    'http':'http:/user:password@/127.0.0.1:9743'
}
response = requests.get('https://www.taobao.com',proxies=proxies)
print(response.status_code)

  

  socket代理

pip3 install 'requests[socks]'
 
import requests

proxies = {
    'http':'socks5://127.0..0.1.9742',
    'https':'socks5://127.0.0.1:9742'
}
response = requests.get('https://www.taobao.com',proxies=proxies)
print(response.status_code)

 

超时设置

import requests
from requests.exceptions import ReadTimeout
try:
    response = requests.get('http://www.baidu.com',timeout = 0.01)
    print(response.status_code)
except ReadTimeout:
    print('Timeout')

  

认证设置

import requests
from requests.auth import HTTPBasicAuth 

r = requests.get('http://120.27.34.24:9001',auth=HTTPBasicAuth('user','123'))
print(r.status_code)

  

import requests

r = requests.get('http://120.27.34.24:9001',auth=('user','123'))
print(r.status_code)

  

异常处理

import requests
from requests.exceptions import ReadTimeout,HTTPError,RequestException

try:
    response = requests.get('http://www.baidu.com',timeout=0.1)
    print(response.status_code)
except ReadTimeout:
    print('Timeout')
except HTTPError:
    print('Http error')
except ConnectionError:
    print('Connection Error')   
except RequestException:
    print('Error')

  

猜你喜欢

转载自www.cnblogs.com/cthon/p/9398026.html