博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
request模块
阅读量:4967 次
发布时间:2019-06-12

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

一、request模块简介

  1. 什么是requests模块
    • python原生基于网络请求的模块,模拟浏览器发起请求。
  2. 为什么使用requests模块
    • urllib需要手动处理url编码,使用quote()处理中文编码
    • urllib需要手动处理post请求的参数,将请求参数封装到字典后用urlencode()处理,在用encode()进行编码
    • urllib的cookie和代理操作比较繁琐
      • cookie:
        • 创建一个cookiejar对象
        • 基于cookiejar创建一个handler对象
        • 基于handler创建一个operner对象
        • 基于operner发起请求
      • 代理:
        • 创建handler对象,代理ip和端口封装到该对象
        • 创建openner对象,并发起请求
  3. requests模块如何使用
    • 安装:pip install requests
    • 使用流程:
      • 指定url
      • 使用requests模块发起请求
      • 获取响应数据
      • 进行持久化存储

二、基于项目进行学习

项目一、get请求

需求:获取sogou主页数据

import requests#指定urlurl = "https://www.sogou.com/"#发起get请求:get方法会返回请求成功后的相应对象response = requests.get(url=url)#获取相应中的数据值#text:相应对象中字符串形式的页面数据page_data=response.textprint(page_data)#持久化操作with open("./sogou.html",'w','utf-8') as fp:    fp.write(page_data)

response对象中重要属性:

  1. response.content:获取相应对象中二进制类型的页面数据
  2. response.text:字符串形式的页面数据
  3. response.status_code:返回响应状态码
  4. response.headers:获取响应头信息
  5. response.url:获取请求的url

requests模块带参get请求方式1

需求:指定一个词条,获取搜狗搜索结果对应的页面数据

import requests#指定url,url中携带中文,requests并不需要手动用quote()方法去处理url="https://www.sogou.com/web?query=周杰伦&ie=utf8"#发起get亲求response=requests.get(url=rul)#获取页面数据page_text=response.text#持久化存储with open('./sougou_art.html','w',encoding="utf-8") as fp:    fp.write(page_text)

requests模块带参get请求方式2

#方式2,将参数封装到字典中import requests#指定urlurl="https://www.sogou.com/web"#将参数封装到字典params={    "query":"周杰伦",    "ie":"utf-8"}#发起get亲求response = requests.get(url=url,params=params)#持久化存储with open("./sogou.html",'w',encoding='utf-8') as fp:    fp.write(response.text)

requests模块自定义请求头的get请求

#自定义请求头信息import requests#指定urlurl="https://www.sogou.com/web"#将参数封装到字典params={    "query":"周杰伦",    "ie":"utf-8"}#创建headers字典对象headers={    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}#发起get请求,并传入headers字典对象response=requests.get(url=url,params=params,headers=headers)response.status_code

项目二、post请求

#需求:登陆豆瓣网,获取登陆成功后的页面数据import requests#指定urlurl='https://accounts.douban.com/j/mobile/login/basic'#制定post数据data={    'ck':None,     'name':'x@163.com',    'password':'1111111',    'remember':'false',    'ticket':None}#自定义headers[可选]headers={    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}#发起post请求response=requests.post(url=url,data=data,headers=headers)#获取相应对象中的页面数据page_text=response.text#持久化保存with open('./douban.html','w',encoding='utf-8') as fp:    fp.write(page_text) 

项目三、基于ajax的get

和普通的get请求类似,只是返回结果为json格式字符串

#需求:抓取豆瓣电影详情import requests#指定urlurl = 'https://movie.douban.com/j/new_search_subjects'#封装参数params={    'sort': 'U',    'range': '0,10',    'tags':'',    'start': '1',    'genres': '动画'}#自定义请求头信息headers={    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}response=requests.get(url=url,params=params,headers=headers)print(response.text)

项目四、基于ajax的post

和普通的post请求类似

#需求:爬取肯德基城市餐厅信息import requests#指定urlurl = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'#封装查询信息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/70.0.3538.102 Safari/537.36'}#发起请求response=requests.post(url=url,data=data,headers=headers)#获取数据结果page_text=response.textprint(page_text)

项目五、综合

#需求:爬取搜狗知乎某词条搜索结果前三页数据import requestsimport os# 创建文件夹if not os.path.exists('./pages'):    os.mkdir('./pages')#指定urlurl = 'https://zhihu.sogou.com/zhihu'#自定义请求头信息headers={    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}#指定关键字word=input("Enter a search word:")#动态指定页码的范围start_pageNum=int(input("Enter a start pageNum:"))end_pageNum=int(input("Enter a end pageNum:"))for page in range(start_pageNum,end_pageNum+1):    #指定params    params={        "query": word,        "page": page,        "ie": "utf8",    }    #发起请求    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 fp:        fp.write(page_text)        print("第%s页数据获取成功" % page)

转载于:https://www.cnblogs.com/yaya625202/p/10366080.html

你可能感兴趣的文章
optionMenu-普通菜单使用
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
appium(13)- server config
查看>>
IIS负载均衡-Application Request Route详解第六篇:使用失败请求跟踪规则来诊断ARR...
查看>>
管理信息系统 第三部分 作业
查看>>
[Leetcode Week13]Search a 2D Matrix
查看>>
查看端口占用cmd命令
查看>>
2019.01.17王苛震作业
查看>>
清除浮动
查看>>
PayPal(贝宝)支付接口、文档、IPN
查看>>
ORACLE 10G R2_执行计划中cost cardinality bytes cpu_cost io_cost解释
查看>>
本地存储
查看>>
MP3的播放与停止
查看>>
牛客(59)按之字形顺序打印二叉树
查看>>
JavaScript 图表库 xCharts
查看>>
Android项目的目录结构
查看>>
C++中“引用”的底层实现
查看>>
Spring Cloud与微服务构建:微服务简介
查看>>
Babel 是干什么的
查看>>
20180418小测
查看>>