虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。

Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用:)

Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

requests 的底层实现其实就是 urllib3

Requests的文档非常完备,中文文档也相当不错。Requests能完全满足当前网络的需求,支持Python 2.6—3.5,而且能在PyPy下完美运行。

二:安装方式

1.强烈建议大家使用pip进行安装:pip insrall requests

2.Pycharm安装:file-》default settings-》project interpreter-》搜索requests-》install package-》ok

三、requests库的get请求

1、最简单的爬虫程序(get请求)

#!/usr/bin/env python#-*- coding:utf-8 -*-

#需求:使用requests模块想百度首页面发起一个get请求,获取响应对象

importrequestsif __name__ == "__main__":#指定请求的url地址

url = 'http://www.baidu.com'

#使用requests模块的get函数根据指定的url发起一个get请求,get函数返回一个响应对象

response =requests.get(url)#打印响应对象(结果:响应对象类型和响应状态码)

print(response)

2.响应对象的相关属性操作:

#!/usr/bin/env python#-*- coding:utf-8 -*-

#需求:使用requests模块想百度首页面发起一个get请求,获取响应对象

importrequestsif __name__ == "__main__":#指定请求的url

url = 'http://www.baidu.com'

#使用requests模块的get函数根据指定的url发起一个get请求,get函数返回一个响应对象

response =requests.get(url)#获取请求的url

print('请求的url:'+response.url)#获取响应状态码

print(response.status_code)#获取响应内容的编码格式,可以通过该属性修改响应的编码格式,直接以赋值的形式就可以修改响应的编码方式,一般出现乱码是我们需要进行设置

print('响应内容编码:'+response.encoding)#获取响应对象的响应头信息:

print(response.headers)#获取字符串形式的响应内容,即是我们通过审查元素看到的HTML内容

print(response.text)#获取字节形式的响应内容,是bytes类型,一般我们请求图频、音频、视频需要用到字节流形式的响应内容

print(response.content)

3.定制请求头信息:

在请求头中有一个参数为User-Agent,表示含义为请求载体的身份标识。通过浏览器发起的请求,请求载体为浏览器,则该请求的User-Agent为浏览器的身份标识,使用爬虫程序发起的请求,则该请求的载体为爬虫程序,则该请求的User-Agent为爬虫程序的身份标识。爬虫程序想要尽可能的模拟浏览器发起的请求,则必须将User-Agent修改成浏览器的身份标识。

【注意】User-Agent的定制其实是一种反反爬虫的初级技术手段。所以在编写爬虫程序时,必须对User-Agent进行手动定制。User-Agent的值可以通过抓包工具从浏览器请求的请求头中获取。

#!/usr/bin/env python#-*- coding:utf-8 -*-

importrequestsif __name__ == "__main__":#指定请求的url

url = 'http://www.baidu.com'

#定制请求头信息,相关的头信息必须封装在字典结构中

headers ={#定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',

}#使用requests模块的get函数根据指定的url发起一个get请求,get函数返回一个响应对象

#参数1:发起请求指定的url

#参数2:手动定制的请求头信息

response = requests.get(url=url,headers=headers)

#打印响应的状态码print(response.status_code)

4.将响应的网页内容写入磁盘进行存储:将爬取到的百度首页的网页数据写入磁盘进行存储

【注意】如果写入到文件中的网页数据出现了乱码,则需要手动将响应内容的编码格式进行设置

#!/usr/bin/env python#-*- coding:utf-8 -*-

importrequestsif __name__ == "__main__":#指定请求的url

url = 'http://www.baidu.com'

#定制请求头信息,相关的头信息必须封装在字典结构中

headers ={#定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',

}#使用requests模块的get函数根据指定的url发起一个get请求,get函数返回一个响应对象,get的参数

#参数1:发起请求指定的url

#参数2:手动定制的请求头信息

response = requests.get(url=url,headers=headers)#设置响应内容的编码格式(如果写入文件内容出现乱码的话)

response.encoding = 'utf-8'

#获取响应的网页内容

page_data =response.text

#将响应的内容写到我们指定的文件中

with open('./baidu.html','w') as fp:

fp.write(page_data)

5.携带参数的get请求:将携带的参数以键值对的形式封装到一个字典中,然后在get方法的params参数中使用即可

【注意】url有一个显著的特性。url必须是使用ASCII进行编码的字符方可生效。但是在requests模块中,即使url中存在非ASCII字符,那么requests会对其自动进行转化。urllib3则需要大家手动使用urlencode函数进行转换。

#!/usr/bin/env python#-*- coding:utf-8 -*-

importrequestsif __name__ == "__main__":#指定请求的url:可以将get请求携带的参数拼接到url域名后面,但是不建议大家这么做,一般我们将携带的参数以键值对的形式封装到字典中,操作见下方:

#url = 'http://www.baidu.com/s?ie=utf-8&wd=周杰伦'

#建议做法:指定请求网页的域名

url = 'https://www.baidu.com/s'

#将请求携带的参数以键值对的形式封装到字典中,准备待用

param ={'ie' : 'utf-8','wd' : '星星'}#定制请求头信息,相关的头信息必须封装在字典结构中

headers ={#定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',

}#使用requests模块的get函数根据指定的url发起一个get请求,get函数返回一个响应对象,get中传入的三个参数如下:

#参数1:发起请求指定的url

#参数2:手动定制的请求头信息

#参数3:指定请求携带的参数

response = requests.get(url=url,headers=headers,params=param)#设置响应内容的编码格式(如果写入文件内容出现乱码的话)

response.encoding = 'utf-8'

#获取响应的网页内容,存储的文件名我们也可以根据用户输入,存成一个动态文件名

page_data =response.text

with open('./星星.html','w') as fp:

fp.write(page_data)

6.使用get请求下载二进制数据(图片,音频,视频等)进行持久化存储

方法一:

#!/usr/bin/env python#-*- coding:utf-8 -*-

importrequestsif __name__ == "__main__":#指定一张网络图片的url

url = 'http://img05.tooopen.com/images/20141217/sy_77493739982.jpg'

#定制请求头信息,相关的头信息必须封装在字典结构中

headers ={#定制请求头中的User-Agent参数,来伪装成一个浏览器,当然也可以定制请求头中其他的参数

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',

}#使用requests模块的get函数根据指定的url发起一个get请求,get函数返回一个响应对象

response = requests.get(url=url,headers=headers)#获取响应的网页内容(该内容为图片,应该获取二进制类型数据)

image_data =response.content#将获取的二进制网页内容存储到文件中 with open('./image.jpg','wb') as fp:

fp.write(image_data)

方法二:

#!/usr/bin/env python#-*- coding:utf-8 -*-

importrequestsimporturllib.requestif __name__ == "__main__":#指定一张网络图片的url

url = 'http://img05.tooopen.com/images/20141217/sy_77493739982.jpg'#使用urllib模块进行图片下载

urllib.request.urlretrieve(url=url,filename='image.jpg')

四.requests模块的post请求

1.爬取百度翻译:在百度翻译中输入一个需要翻译的词条,然后进行post请求的发送,使用抓包工具抓取该请求(https://fanyi.baidu.com/sug)

#!/usr/bin/env python#-*- coding:utf-8 -*-

importrequestsimporturllib.requestif __name__ == "__main__":#指定post请求的url

url = 'https://fanyi.baidu.com/sug'

#定制请求头信息,相关的头信息必须封装在字典结构中

headers ={#定制请求头中的User-Agent参数,将爬虫伪装的更像浏览器,当然也可以定制请求头中其他的参数

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',

}#定制post请求携带的参数,可以使用抓包工具看需要传哪些参数,如Fiddler抓包工具

data ={'kw' : 'dog'}#使用requests模块的post函数根据指定的url发起一个post请求,post函数返回一个响应对象

#参数1:发起请求指定的url

#参数2:手动定制的请求头信息

#参数3:指定请求携带的参数

response = requests.post(url=url,headers=headers,data=data)#获取响应内容:响应内容为json串

print(response.text)

【注意】在使用爬虫程序进行网页数据爬取的时候,可能会出现爬取不到数据的时候,究其问题所在,是因为我们的爬虫程序还是没有尽可能的模拟浏览器发送请求。如何尽可能的模拟浏览器发起请求呢?我们需要将我们爬虫程序中的请求头信息和请求所带的参数尽可能的保持和浏览器中的请求头信息和参数保持一致。

五.requests模块的基于ajax的get请求:

#!/usr/bin/env python#-*- coding:utf-8 -*-

importrequestsimporturllib.requestif __name__ == "__main__":#指定ajax-get请求的url(通过抓包进行获取)

url = 'https://movie.douban.com/j/chart/top_list?'

#定制请求头信息,相关的头信息必须封装在字典结构中

headers ={#定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',

}#定制get请求携带的参数(从抓包工具中获取字典中需要传入哪些参数)

param ={'type':'5','interval_id':'100:90','action':'','start':'0','limit':'20'}#发起get请求,获取响应对象

response = requests.get(url=url,headers=headers,params=param)#获取响应内容:响应内容为json串

print(response.text)

六.requests模块的基于ajax的post请求:

#!/usr/bin/env python#-*- coding:utf-8 -*-

importrequestsimporturllib.requestif __name__ == "__main__":#指定ajax-post请求的url(通过抓包进行获取)

url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'

#定制请求头信息,相关的头信息必须封装在字典结构中

headers ={#定制请求头中的User-Agent参数,当然也可以定制请求头中其他的参数

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',

}#定制post请求携带的参数(从抓包工具中获取字典中需要传入哪些参数)

data ={'cname':'','pid':'','keyword':'北京','pageIndex': '1','pageSize': '10'}#发起post请求,获取响应对象

response = requests.get(url=url,headers=headers,data=data)#获取响应内容:响应内容为json串

print(response.text)

七.综合练习:

需求:输入吧名,输入起始页码和结束页码,然后在当前文件夹中创建一个以吧名为名字的文件夹,里面是每一页html内容,文件名是 吧名_当前页码.html

#!/usr/bin/env python#-*- coding:utf-8 -*-

importrequestsimportosif __name__ == "__main__":

url= 'http://tieba.baidu.com/f?'name= input('enter name:')

s_pageNum= int(input('enter start pageNum:'))

e_pageNum= int(input('enter end pageNum:'))#创建一个存储html文件的文件夹

if notos.path.exists(name):

os.mkdir(name)for page in range(s_pageNum, e_pageNum + 1):print('开始下载第%d页的内容' %page)

param={"kw": name,"ie": 'utf-8',"pn": (page - 1) * 50}#发起请求,获取响应对象。不要定制头信息

response = requests.get(url=url,params=param)#response.encoding = 'utf-8'

page_content =response.text

fileName= name+'_'+str(page)+'.html'filePath= name+'/'+fileName

with open(filePath,'w') as fp:

fp.write(page_content)

python爬虫百科-Python爬虫之requests库介绍(一)相关推荐

  1. python爬虫学习实践(一):requests库和正则表达式之淘宝爬虫实战

    使用requests库是需要安装的,requests库相比urllib 库来说更高级方便一点,同时与scrapy相比较还是不够强大,本文主要介绍利用requests库和正则表达式完成一项简单的爬虫小项 ...

  2. pythonrequests爬虫外文文献_Python爬虫(一):爬虫介绍、Requests库介绍及实例-Go语言中文社区...

    本文主要内容: 1.爬虫的相关概念. 2.Requsets库安装. 3.Requests库介绍. 4.爬取网页的通用代码框架. 1.爬虫相关概念. 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社 ...

  3. python爬虫、第一个爬虫(基本知识,requests库,BeautifulSoup库,正则表达式re库)

    python爬虫学习开始 1.这是我第一次写博客,表示不太会用csdn的这个编辑器,排版神马的就别说了,有什么值得改进的或者不对的地方,欢迎留言,谢谢. 2.作为学生党,正在自学python爬虫,基于 ...

  4. python之爬虫(四)之 Requests库的基本使用

    什么是Requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库 如果你看过上篇文章关于urllib库的使用,你会发现, ...

  5. Python爬虫之(六)requests库的用法

    介绍 对了解一些爬虫的基本理念,掌握爬虫爬取的流程有所帮助.入门之后,我们就需要学习一些更加高级的内容和工具来方便我们的爬取.那么这一节来简单介绍一下 requests 库的基本用法 安装 pip i ...

  6. python网络爬虫——自学笔记1.用requests库爬取图片

    1.requests库的安装 rrequests库是公认的python的一个一个非常优秀的第三方库,下载方法也很简单 只需Win+R打开控制台命令窗口,输入pip install requests后回 ...

  7. python爬虫百科-python爬虫百科

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! 专业点来说就是应用多台机器同时实现爬虫任务,这多台机器上的爬虫,就是称作分布式爬虫 ...

  8. python爬虫百科-Python从概念上先了解爬虫

    什么是爬虫 爬虫:就是抓取网页数据的程序.搜索引擎的底层其实就是爬虫. 百度百科:网络爬虫 关于Python爬虫,我们需要学习的有: Python基础语法学习(基础知识) HTML页面的内容抓取(数据 ...

  9. 网络爬虫学习第二弹:requests库的使用

    requests库使用 requests库的功能与之前学习的urllib库类似,但功能更强大,实现也更简洁.下面是基本的使用方法. import requestsr=requests.get(&quo ...

最新文章

  1. html5实现获取地理位置信息并定位
  2. mysql syncbinlog_Mysql之sync-binlog参数
  3. VMware中High Availability (HA),的含义
  4. 增加标 和增加其内容
  5. C++ 实现无向图的最小生成树Kruskal算法(完整代码)
  6. 图解JVM的Class文件格式(详细版)
  7. Mongo 用户创建及权限管理
  8. visio付款流程图_visio流程图软件
  9. 修改tomcat日志打印位置
  10. vmware安装笔记
  11. 庄辰超的势能,梁建章的心力
  12. 《转》《七年之前与七年之后》
  13. accept()函数说明
  14. AGM AG16K FPGA介绍
  15. 解决CSDN博客文章 保存网页到本地后,页面显示不全的问题
  16. 食物同时食用是否有害健康
  17. USTC高级软件工程课程学习总结和心得
  18. CAXA2020复制粘贴时卡顿或卡死
  19. 英语敢死队 第三周学习总结感受
  20. mysql登录失败5次锁定300秒_django 实现登录时候输入密码错误5次锁定用户十分钟...

热门文章

  1. Ubuntu配置jdk环境变量
  2. SQL server 行转列 列转行
  3. python-GUI,生成ssn
  4. 转 docker的下载与安装
  5. linux下安装sz/rz命令
  6. jQuery 参考手册 - 事件
  7. 算法导论 习题24.2-4 amp; 24.3-6 单源最短路径问题
  8. SDOI2018IIIDX
  9. 剑指Offer-二叉树的镜像
  10. Jzoj4209 已经没有什么好害怕的了