requests的get方法

1 在百度里面查询关键字的方法,并获取带百度当前页面

  1. import requests
  2.  
  3. keywords = input('请输入>>>').strip()
  4. response = requests.get('https://www.baidu.com/s?',
  5. params={
  6. 'wd': keywords,
  7. 'pn':20
  8.  
  9. },
  10. headers = {
  11. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
  12. }
  13.  
  14. )
  15.  
  16. if response.status_code == 200:
  17. with open('b.html', 'wt', encoding='utf-8') as f:
  18. f.write(response.text)

2 get请求给知乎

  1. import requests
  2.  
  3. response = requests.get('https://www.zhihu.com',
  4. headers={
  5. 'Referer': 'https://www.zhihu.com/',
  6. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
  7. }
  8. )
  9.  
  10. with open('c.html', 'wt', encoding='utf-8')as f:
  11. f.write(response.text)
  12.  
  13. print(response.status_code)
  14. print(response.text)

3 get请求给githup

  1. import requests
  2.  
  3. response = requests.get(url='https://github.com/',
  4. headers={
  5. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
  6.  
  7. 'Cookie': '_octo=GH1.1.1333562301.1559296277; _ga=GA1.2.392559115.1559296287; has_recent_activity=1; _gat=1; tz=Asia%2FShanghai; _device_id=0dcf09aab9c4d288aaa33f26fecd1309; user_session=Yp-WRUHkznMCmRXO6-WsL8QRfVCau3k7gQ56zIZHMHfVTRCB; __Host-user_session_same_site=Yp-WRUHkznMCmRXO6-WsL8QRfVCau3k7gQ56zIZHMHfVTRCB; logged_in=yes; dotcom_user=andygouyong; _gh_sess=TTFoakY4c0ZtcHVMc2wrdjJiMmtSejhvN0VsVnhqU01PdW9yL01CMFNHYjZOaUNGUTFmNjlQK0o5NXFmVU40L1AzeUxCV2x0VHBka2VkR3ZBRUtxVnU2YUJPTUM0T3RWM0E5OVJtSklJTmswMXl6WS9lY3lrMGYvd1FoU0NnNVNla0lrZE13TzlIekhoRDA5a1JHcXBIeDNBUXlLZnoxVkd5elNNRmdCUHVZbGttREtyd2JDUWcxS1ZaZFpJZ3pnWUx1Z2p3MEppTGZOZkVMWEMrQ01HRGJxcU5kMWJPa3V5d001OHVsNElaWUowYitYYlFxeDgxNXd4YVdlZEJ5bFViVFdtTCtGQTFHYWZWTjFiSzhodVBPNXdQLzMxSkx3ZkJCeFpUdWJQdzR2dkRhcFhTeTUvZkROczZpWC9GMlVaZjgzTmxhWG5wakh1WnpDOFZpdzZ3PT0tLVFZRmowSjkva3RGY3dqaU15b0VHTkE9PQ%3D%3D--4508766204caae7d9c3ecc0c6e7c0fc8ae887a7f'
  8. }
  9. )
  10. print(response.status_code)
  11. print(response.text)
  12. with open('d.html','wt',encoding='utf-8')as f:
  13. f.write(response.text)

requests的post方法(模拟登陆githup)

  1. #!/user/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. import re, requests
  5. import time
  6.  
  7. # 先获取登陆页面,拿到authenticity_token
  8. # 然后请求的url为'https://www.githuo.com/login
  9. # 请求方式为git
  10.  
  11. r1 = requests.get('https://github.com/login',
  12. headers={
  13. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
  14. }
  15.  
  16. )
  17.  
  18. authenticity_token = re.findall('name="authenticity_token" value="(.*?)"', r1.text, re.S)[0]
  19.  
  20. r1_cookies = r1.cookies.get_dict()
  21. print(authenticity_token)
  22. print(r1_cookies)
  23.  
  24. # 提交数据表单,完成登陆
  25. # 请求方法POST
  26. # https://github.com/session
  27. # 请求头
  28. # Referer: https://github.com/login
  29. # User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
  30.  
  31. # cookies=r1_cookies
  32. # 请求体
  33. # form date
  34. # commit: Sign in
  35. # utf8: ✓
  36. # authenticity_token: qGeaCNP3aTAb5B13GiLwYrrO9uth09TU9Wm0CnXBg3cNQowPJJDHHMj0BXjziy1M6uuQVpEScoa9SzubrXDNMg==
  37. # login: 你的githup登录名
  38. # password: 你的githup密码
  39.  
  40. r2 = requests.post(
  41. # 请求的url
  42. 'https://github.com/session',
  43. # 请求的cookies
  44.  
  45. # 请求头
  46. headers={
  47. 'Referer': 'https://github.com',
  48. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
  49.  
  50. },
  51. cookies=r1_cookies,
  52. # 请求体,勇哥这里得特别别注意
  53. data={
  54. 'commit': 'Sign in',
  55. 'utf8': '✓',
  56. # 这里里面的authenticity_token就是前面get请求中的,在login页面中拿到
  57. 'authenticity_token': authenticity_token,
  58. 'login': '你的githup登录名',
  59. 'password': '你以为我会吧密码贴出来吗,还是太年轻啊'
  60.  
  61. },
  62. allow_redirects=True
  63. )
  64.  
  65. with open('e.html', 'wt', encoding='utf-8')as f:
  66. f.write(r2.text)
  67. print(r2.status_code)
  68. print('Repositories' in r2.text)

3 爬取梨视频

废话不多说,看勇哥写的代码

  1. import requests
  2. import re
  3. import os
  4. from threading import Thread
  5.  
  6. ppth = os.path.dirname(__file__)
  7.  
  8. def get_index_page(url):
  9. # 向目标网站发起请求
  10. response = requests.get(url)
  11. # 如果相应的状态吗是200,说明请求成功
  12. if response.status_code == 200:
  13. return response.text
  14.  
  15. def parse_index_page(htmll):
  16. url = re.findall('class="vervideo-bd".*?href="(.*?)"', htmll, re.S)
  17. return url
  18.  
  19. def get_detail_page(url):
  20. movie_text = requests.get(url).text
  21. return movie_text
  22.  
  23. def parse_detail_page(text):
  24. movie_mp4 = re.findall('srcUrl="(.*?)"', text, re.S)
  25. title = re.findall('<h1 class="video-tt">(.*?)</h1>', text, re.S)
  26. # print(title)
  27. if movie_mp4:
  28. # print(movie_mp4[0])
  29. return {'title': title[0], 'movie': movie_mp4[0]}
  30.  
  31. def download(movie_mp4):
  32. print(movie_mp4)
  33. title=movie_mp4['title']
  34. movie_url=movie_mp4['movie']
  35. response=requests.get(movie_url)
  36. if response.status_code==200:
  37. title=title.replace('"', ' ').replace("'"," ").replace("?"," ").strip()
  38. print(title)
  39. filename=ppth+'/Download/'+title+'.mp4'
  40. with open(filename,'wb') as f:
  41. f.write(response.content)
  42.  
  43. # def main():
  44. # # 基础的url
  45. # base_url = 'https://www.pearvideo.com/category_{page}'
  46. # for i in range(5):
  47. # # 获取五条网站数据
  48. # url = base_url.format(page=i)
  49. # # 获取网站的html代码
  50. # htmll = get_index_page(url)
  51. # # 解析出视频网址
  52. # video_num = parse_index_page(htmll)
  53. # for j in video_num:
  54. # # 获取到每条视频的url
  55. # url_end = base_url[0:26] + j
  56. # # print(url_end)
  57. # # 解析视频的url数据,拿到.mp4结尾的数据
  58. # movie_text = get_detail_page(url_end)
  59. # # 这是一个字典{'title':none,'movie':none}
  60. # movie_mp4 = parse_detail_page(movie_text)
  61. # # print(movie_mp4)
  62. # if movie_mp4:
  63. # download(movie_mp4)
  64.  
  65. def main(base_url,i):
  66. # 获取五条网站数据
  67. url = base_url.format(page=i)
  68. # 获取网站的html代码
  69. htmll = get_index_page(url)
  70. # 解析出视频网址
  71. video_num = parse_index_page(htmll)
  72. for j in video_num:
  73. # 获取到每条视频的url
  74. url_end = base_url[0:26] + j
  75. # print(url_end)
  76. # 解析视频的url数据,拿到.mp4结尾的数据
  77. movie_text = get_detail_page(url_end)
  78. # 这是一个字典{'title':none,'movie':none}
  79. movie_mp4 = parse_detail_page(movie_text)
  80. # print(movie_mp4)
  81. if movie_mp4:
  82. download(movie_mp4)
  83.  
  84. if __name__ == '__main__':
  85.  
  86. # 基础的url
  87. base_url = 'https://www.pearvideo.com/category_{page}'
  88. for i in range(5):
  89. t=Thread(target=main,args=(base_url,i,))
  90. t.start()

4 响应response

1 response的属性

  1. import requests
  2. respone=requests.get('http://www.jianshu.com')
  3. # respone属性
  4. print(respone.text)
  5. print(respone.content)
  6.  
  7. print(respone.status_code)
  8. print(respone.headers)
  9. print(respone.cookies)
  10. print(respone.cookies.get_dict())
  11. print(respone.cookies.items())
  12.  
  13. print(respone.url)
  14. print(respone.history)
  15.  
  16. print(respone.encoding)
  17.  
  18. #关闭:response.close()
  19. from contextlib import closing
  20. with closing(requests.get('xxx',stream=True)) as response:
  21. for line in response.iter_content():
  22. pass

2 编码问题

  1. #编码问题
  2. import requests,re
  3.  
  4. response=requests.get(
  5. 'https://www.autohome.com.cn/shanghai/',
  6. headers={
  7. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
  8. }
  9. )
  10. #汽车之家网站返回的页面内容为gb2312编码的,而requests的默认编码为ISO-8859-1,如果不设置成gbk则中文乱码
  11.  
  12. response.encoding='gbk'
  13. print(response.text)
  14. with open('f.html','wt',encoding='gbk')as f:
  15. f.write(response.text)

3 获取二进制数据

  1. import requests
  2. response=requests.get('https://images.cnblogs.com/cnblogs_com/ouyang99-/1395591/o_1521768608804.jpg')
  3. with open('a.jpg','wb')as f:
  4. #写二进制数据的时候使用content
  5. f.write(tesponse.content)

4 当数据过大时,就容易发生内存撑爆的现象,这时

  1. import requests
  2. response=requests.get('https://images.cnblogs.com/cnblogs_com/ouyang99-/1395591/o_1521768608804.jpg')
  3. with open('a.jpg','wb')as f:
  4. #写二进制数据的时候使用content
  5. for line in response.iter_content():
  6. f.write(line)
    #这样来一段一段的写入文件,就可以很好的避免上述的问题

5 解析json

  1. #解析json
  2. import requests
  3. response=requests.get('http://httpbin.org/get')
  4.  
  5. import json
  6. res1=json.loads(response.text) #太麻烦
  7.  
  8. res2=response.json() #直接获取json数据
  9.  
  10. print(res1 == res2) #True

5response进阶用法

1、SSL Cert Verification

  1. #证书验证(大部分网站都是https)
  2. import requests
  3. respone=requests.get('https://www.12306.cn') #如果是ssl请求,首先检查证书是否合法,不合法则报错,程序终端
  4.  
  5. #改进1:去掉报错,但是会报警告
  6. import requests
  7. respone=requests.get('https://www.12306.cn',verify=False) #不验证证书,报警告,返回200
  8. print(respone.status_code)
  9.  
  10. #改进2:去掉报错,并且去掉警报信息
  11. import requests
  12. from requests.packages import urllib3
  13. urllib3.disable_warnings() #关闭警告
  14. respone=requests.get('https://www.12306.cn',verify=False)
  15. print(respone.status_code)
  16.  
  17. #改进3:加上证书
  18. #很多网站都是https,但是不用证书也可以访问,大多数情况都是可以携带也可以不携带证书
  19. #知乎\百度等都是可带可不带
  20. #有硬性要求的,则必须带,比如对于定向的用户,拿到证书后才有权限访问某个特定网站
  21. import requests
  22. respone=requests.get('https://www.12306.cn',
  23. cert=('/path/server.crt',
  24. '/path/key'))
  25. print(respone.status_code)

2、使用代理

  1. #官网链接: http://docs.python-requests.org/en/master/user/advanced/#proxies
  2.  
  3. #代理设置:先发送请求给代理,然后由代理帮忙发送(封ip是常见的事情)
  4. import requests
  5. proxies={
  6. 'http':'http://egon:123@localhost:9743',#带用户名密码的代理,@符号前是用户名与密码
  7. 'http':'http://localhost:9743',
  8. 'https':'https://localhost:9743',
  9. }
  10. respone=requests.get('https://www.12306.cn',
  11. proxies=proxies)
  12.  
  13. print(respone.status_code)
  14.  
  15. #支持socks代理,安装:pip install requests[socks]
  16. import requests
  17. proxies = {
  18. 'http': 'socks5://user:pass@host:port',
  19. 'https': 'socks5://user:pass@host:port'
  20. }
  21. respone=requests.get('https://www.12306.cn',
  22. proxies=proxies)
  23.  
  24. print(respone.status_code)

3、超时设置

  1. #超时设置
  2. #两种超时:float or tuple
  3. #timeout=0.1 #代表接收数据的超时时间
  4. #timeout=(0.1,0.2)#0.1代表链接超时 0.2代表接收数据的超时时间
  5.  
  6. import requests
  7. respone=requests.get('https://www.baidu.com',
  8. timeout=0.0001)

4、 认证设置

  1. #官网链接:http://docs.python-requests.org/en/master/user/authentication/
  2.  
  3. #认证设置:登陆网站是,弹出一个框,要求你输入用户名密码(与alter很类似),此时是无法获取html的
  4. # 但本质原理是拼接成请求头发送
  5. # r.headers['Authorization'] = _basic_auth_str(self.username, self.password)
  6. # 一般的网站都不用默认的加密方式,都是自己写
  7. # 那么我们就需要按照网站的加密方式,自己写一个类似于_basic_auth_str的方法
  8. # 得到加密字符串后添加到请求头
  9. # r.headers['Authorization'] =func('.....')
  10.  
  11. #看一看默认的加密方式吧,通常网站都不会用默认的加密设置
  12. import requests
  13. from requests.auth import HTTPBasicAuth
  14. r=requests.get('xxx',auth=HTTPBasicAuth('user','password'))
  15. print(r.status_code)
  16.  
  17. #HTTPBasicAuth可以简写为如下格式
  18. import requests
  19. r=requests.get('xxx',auth=('user','password'))
  20. print(r.status_code)

5、异常处理

  1. #异常处理
  2. import requests
  3. from requests.exceptions import * #可以查看requests.exceptions获取异常类型
  4.  
  5. try:
  6. r=requests.get('http://www.baidu.com',timeout=0.00001)
  7. except ReadTimeout:
  8. print('===:')
  9. # except ConnectionError: #网络不通
  10. # print('-----')
  11. # except Timeout:
  12. # print('aaaaa')
  13.  
  14. except RequestException:
  15. print('Error')

6、上传文件

  1. import requests
  2. files={'file':open('a.jpg','rb')}
  3. respone=requests.post('http://httpbin.org/post',files=files)
  4. print(respone.status_code)

2 request的get和post方法的更多相关文章

  1. 从客户端中检测到有潜在危险的Request.Form值的解决方法

    描述:从客户端中检测到有潜在危险的Request.Form值的解决方法asp.net 2.0 通常解决办法将.aspx文件中的page项添加ValidateRequest="false&qu ...

  2. Java--获取request中所有参数的方法

    我们通常用到request获取某个参数的方法: String value=request.getparameter("key"); 如果想要获取request中所有的参数呢? re ...

  3. Request.QueryString 不能像使用方法那样使用不可调用

    想要获取URL栏中的字符串,于是敲下代码如下: string other = HttpContext.Current.Request.ServerVariables("QUERY_STRIN ...

  4. 【异常记录(七)】MVC:从客户端中检测到有潜在危险的 Request.Form 值 的解决方法 [转]

    从客户端(Content="<EM ><STRONG ><U >这是测试这...")中检测到有潜在危险的Request.Form 值. 说明:  ...

  5. ckeditor出现错误“从客户端(***)中检测到有潜在危险的 Request.Form值”的解决方法

    ckeditor出现错误“从客户端(***)中检测到有潜在危险的 Request.Form值”的解决方法 页面中使用ckeditor,提交文章时总是出错,“从客户端(TextBox1="&l ...

  6. MVC:从客户端中检测到有潜在危险的 Request.Form 值 的解决方法

    从客户端(Content="<EM ><STRONG ><U >这是测试这...")中检测到有潜在危险的Request.Form 值. 说明:  ...

  7. 从客户端中检测到有潜在危险的Request.Form值 的解决方法

    在提交表单时候,asp.net 提示:"从客户端(......)中检测到有潜在危险的 Request.Form 值" .asp.net中的请求验证特性提供了某一等级的保护措施防止X ...

  8. Request的getParameter和getAttribute方法的区别

    下面整理一下getParameter和getAttribute的区别和各自的使用范围.      (1)HttpServletRequest类有setAttribute()方法,而没有setParam ...

  9. request,reponse对象中的方法

    1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例. 序号 方 法 说 明 1   obj ...

  10. java中获取request与response对象的方法

    Java 获取Request,Response对象方法   第一种.参数 @RequestMapping("/test") @ResponseBody public void sa ...

随机推荐

  1. 在服务器上安装并配置JDK1.8

    参考链接:https://blog.csdn.net/qq_40958000/article/details/83996912

  2. 深度优先搜索DFS---全球变暖

    内心OS:这道题是去年准备HD复试时,我用来练习DFS的.现在再做这道题,感触颇深,唉,时光蹉跎,物是人非啊~~ 题目: 你有一张某海域NxN像素的照片,”.”表示海洋.”#”表示陆地,如下所示: … ...

  3. Lucene搜索引擎入门

    一.什么是全文检索?            就是在检索数据,数据的分类:                在计算机当中,比如说存在磁盘的文本文档,HTML页面,Word文档等等......       ...

  4. C#效率优化(4)-- 编译器对数组遍历的优化

    在平时开发过程中,数组是我们使用频率最高的类型之一,在使用定长列表时,数组可以说是最佳方案,这也是我们最熟悉的数据结构之一. 在C#中使用数组,可以获取在内存上连续的相同类型的一组变量,在连续访问时可 ...

  5. java通过递归统计文件大小

    思路就是通过文件的遍历,对一个文件夹中的非目录文件进行大小统计,并对其中目录文件进行相同的遍历操作,代码如下: package word; import java.io.File; import ja ...

  6. VSCode部署JAVA项目出现The type java.lang.Object cannot be resolved

    如题,出现的原因是这样的:我将mac系统上的eclipse项目复制到了ubuntu环境下,通过vscode的远程功能连接ubuntu. 然后项目上就出现了各种报错,显示The type java.la ...

  7. php弱语言特性-计算科学计数法

    php处理字符串时存在一个缺陷问题,如果字符串为“1e1”,本该是一个正常的字符串,但是php会将它认为是科学计数法里面的e: 也就是按照数学的科学计数法来说:1e1=10^1=10,因此php会把这 ...

  8. [AFO]离开,未尝不是一个新的开始

    2019年5月18日 我注册了洛谷,提交了我的第一份AC代码-- A+B Problem 11月16日-17日 在短短6个月的仓促学习后,我从OI零基础走到了CSP-S的考场上 同年11月26日 在与 ...

  9. Chrome Extension 记录

    传递选定元素到内容脚本 内容脚本不能直接访问当前选中的元素.但是,任何使用 inspectedWindow.eval 来执行的代码都可以在 DevTools 控制台和命令行的 API 中使用.例如,在 ...

  10. First Kernel-pwn

    Kernel pwn-极简题目的操作模式 完全参照M4x师傅的指导,用 hacklu的baby kernel迈了第一步 题目附带文件说明 一般题目会给出bzImage,.cpio, .sh文件 sh文 ...