博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
requests模块相关用法
阅读量:6720 次
发布时间:2019-06-25

本文共 6577 字,大约阅读时间需要 21 分钟。

requests模块

-1. 什么是requests模块    - python原生的一个基于网络请求的模块,模拟浏览器发起请求。-2. 为什么使用requests模块    -1. 自动处理url编码    -2. 自动处理post请求参数    -3. 简化cookie和代理的操作 -3. requests模块如何被使用     安装: pip install requests     使用流程:         1. 指定url         2. 使用requests模块发送请求         3. 获取响应数据         4. 进行持久化存储 -4. 通过5个基于requests模块的爬虫项目对该模块进行系统学习和巩固     -get请求     -post请求     -ajax的get     -ajax的post     -综合

基于requests模块发起get请求

- 需求:爬取搜狗首页的页面数据
import requests #指定urlurl= 'https://www.sogou.com/'#发起get请求:get方法会返回成功的响应对象response = requests.get(url=url)# 获取响应中的数据值:text可以获取响应对象中字符串形式的页面数据page_data = response.text#持久化操作with open('sogo.html','w',encoding='utf-8') as f:    f.write(page_data)
#response对象中其他重要属性import requests #指定urlurl= 'https://www.sogou.com/'#发起get请求:get方法会返回成功的响应对象response = requests.get(url=url)response.content     #获取的是response对象中二进制(byte)类型的页面数据response.status_code #返回一个响应状态码如200 或404 response.headers     #返回响应头信息response.url         #获取请求的url

requests模块如何处理带参数的get请求(两种方式)

  • 需求:指定一个词条,获取搜狗搜索结果对应的页面数据
    #方式1import requestsurl = 'http://www.sogou.com/web?query=金角大王&ie=utf-8'response = requests.get(url=url)page_text = response.textwith open('jinjiao.html','w',encoding='utf-8') as f:    f.write(page_text)
    #方式2import requestsurl = 'http://www.sogou.com/web'#将参数封装到字典中params = {    'query':'金角大王',    'ie':'utf-8'}response = requests.get(url=url,params=params)page_text = response.textwith open('jinjiao.html','w',encoding='utf-8') as f:    f.write(page_text)
    #自定义请求头信息import requestsurl = 'http://www.sogou.com/web'#将参数封装到字典中params = {    'query':'金角大王',    'ie':'utf-8'}#自定义请求头信息 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36headers = {    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}response = requests.get(url=url,params=params,headers=headers)response.status_code

    基于requests模块发起post请求

    - 需求:登录豆瓣网,获取登录成功后的页面数据- tip 如果找不到post请求,试试输错密码寻找- 现在豆瓣改版了,只能获取到登录信息cookiesession等类型的东西。但是可以用request.session登录后继续获取页面
    import requests#1 指定post请求的urlurl = 'https://accounts.douban.com/j/mobile/login/basic'#封装post请求的参数data= {    'ck': '',    'name': '13520750458',    'password': '1123lys',    'remember': 'false',    'ticket':'',}#自定义请求头信息headers={       'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' }#2 发起post请求response = requests.post(url=url,data=data,headers=headers)#获取响应对象中的页面数据page_text = response.textprint(page_text)#持久化操作with open('douban.html','w',encoding='utf-8') as f:    f.write(page_text)

    基于ajax的get请求

    - 抓取豆瓣电影上的电影详情的数据
    import requests#方式一url = 'https://movie.douban.com/j/chart/top_list?type=20&interval_id=100%3A90&action=&start=80&limit=20'#自定义请求头信息headers={       'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' }response = requests.get(url=url,headers=headers)# print(response.text) #返回的是json格式的数据
    import requests#方式二url = 'https://movie.douban.com/j/chart/top_list?'#封装ajax中get请求携带的参数params={    'type':'20',    'interval_id':'100:90',    'action':'',    'start':'80',    'limit':'20',    }#自定义请求头信息headers={       'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' }response = requests.get(url=url,params=params,headers=headers)# print(response.text)  #返回的是json格式的数据

    基于ajax的post请求

    -需求 爬取肯德基城市餐厅的位置数据
    import requestsurl = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'# 处理post请求参数data = {    'cname':'',    'pid':'',    'keyword':'北京',    'pageIndex':'1',    'pageSize':'10',}headers={       'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' }#发起基于ajax的post请求response = requests.post(url=url,data=data,headers=headers)response.texttype(response.text)

    总结

    基于ajax的post和get请求和普通的get请求没什么区别,唯一不同就是获取url,ajax要用抓包工具去获取基于ajax的异步请求的url,因为ajax的地址栏的url不变的,必须去获取真正的url

  

requests模块高级(cookie操作):

- cookie:    基于用户的用户数据    - 需求: 爬取张三用户的豆瓣网的个人主页页面数据- cookie作用:服务器端使用cookie来记录客户端的状态信息实现流程:    1.执行登录操作(获取cookie)    2.在发起个人主页请求时,需要将cookie携带到该请求中    注意:session对象:发送请求(会将cookie对象进行自动存储)
import requests#创建session对象session = requests.session()#1 发起登录请求:session对象将cookie获取,且自动存储到session对象中login_url = 'https://accounts.douban.com/j/mobile/login/basic'data= {    'ck': '',    'name': '13520750458',    'password': '1123lys',    'remember': 'false',    'ticket':'',}headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}#使用session对象发起post请求login_response = session.post(url=login_url,data=data,headers=headers)#2 对个人主页发起请求(session(cookie)),获取响应页面数据url = 'https://www.douban.com/people/191748483/'response = session.get(url=url,headers=headers)page_text = response.textwith open('douban110.html','w',encoding='utf-8')as f:    f.write(page_text)    print(page_text)

requests模块高级(代理操作):

- 1 代理:第三方代理本体执行相关的事物- 2 为什么要使用代理?    -反爬手段    -反反扒手段- 3 分类:    -正向代理:代理客户端获取数据    -反向代理:代替服务端提供数据- 4 免费代理IP的网站提供商:    - www.goubanjia.com    - 快代理    - 西祠代理- 5 代码
import requestsurl = 'https://www.baidu.com/s?wd=ip&ie=utf-8'headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}#将代理ip封装到字典,(前面url的协议要与代理ip的协议类型相同,如都是https或http,如果不同需修改url的协议)proxy = {    'https':'222.74.237.246:808'}#更换网络ipresponse = requests.get(url=url,proxies=proxy,headers=headers)with open('./daili.html','wb')as f:    f.write(response.content)    print(response.content)

综合项目实战

-需求 爬取搜狗知乎某一个词条对应一定范围页码表示的页面数据
import requestsimport os# 创建一个文件夹if not os.path.exists('./pages'):    os.mkdir('./pages')word = input('enter a word')#动态指定页码范围start_page = int(input('enter a start pageNum'))end_page = int(input('enter an end pageNum'))url = 'https://zhihu.sogou.com/zhihu?'headers={       'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' }for page in range(start_page,end_page+1):    params = {        'query':word,        'page':page,        'ie':'utf-8',          }    response = requests.get(url=url,params=params,headers=headers)    page_text = response.text    filename = word+str(page)+'.html'    filePath = 'pages/'+filename    with open(filePath,'w',encoding='utf-8') as f:        f.write(page_text)        print('第%s页写入成功'%page)

 

 

转载于:https://www.cnblogs.com/lys666/p/10477814.html

你可能感兴趣的文章
JAVA学习的几个关键点
查看>>
复利单利计算的功能解释
查看>>
解决方案
查看>>
【概率dp】【滚动数组】CDOJ1652 都市大飙车
查看>>
Spring(2):【转载】认识 Spring 框架、Spring AOP
查看>>
Pyrhon代码的中文问题
查看>>
【Atcoder】AGC 016 C - +/- Rectangle
查看>>
WEB下面路径的问题
查看>>
2017"百度之星"程序设计大赛 - 初赛(A)
查看>>
android开发之画图版
查看>>
数组队列
查看>>
程序员成长纪——首章
查看>>
在Mac OS X上用自己编译出的CoreCLR运行.NET程序
查看>>
CentOS服务器配置SSH免密连接
查看>>
软考:马老师要求
查看>>
WPF 按名称查找控件
查看>>
Activity活动
查看>>
awk用法小结 (转)
查看>>
抽象工厂模式(Abstract Factory)
查看>>
java 环境配置
查看>>