requests是基于urllib3的一个用于发起http请求的库(中文文档
数据采集流程: 
  1. 指定url>>
  2. 基于
  3. requests模块发起请求>>
  4. 获取响应中的数据>>
  5. 数据解析>>
  6. 进行持久化存储
1.模块安装
pip install requests

2.requests之request请求  

  2.1请求方式

  常用的就是requests.get()和requests.post()
 #各种请求方式:常用的就是requests.get()和requests.post()
import requests
requests.get('https://api.github.com/events')
requests.post('http://httpbin.org/post', data = {'key':'value'})
requests.put('http://httpbin.org/put', data = {'key':'value'})
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')

  2.2请求url

  在数据采集之前,要通过页面的加载方式(静态加载还是动态加载)确定需要获取资源的url(可以参考爬虫简介实例)

  2.3请求头

  如果你想为请求添加 HTTP 头部,只要简单地传递一个 dict 给 headers 参数就可以了。

  有些网站为了拒绝通过程序代码的请求,会在接收请求时会对发起请求的载体进行校验,请求头中的‘User-Agent’参数就是请求载体的唯一标识,因此一般需要定制请求头加入载体标识,这也是其中一种反反爬策略:UA伪造。

  方式一:唯一指定请求载体身份

 import requests
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
response=requests.get('http://www.baidu.com',headers=headers)
print(response.encoding)#百度编码格式为ISO-8859-1
response.encoding='utf-8'
print(response.text)

唯一指定请求载体

  方式二:通过fake-useragent随机生成
 import requests

 from fake_useragent import UserAgent#pip install fake-useragent模块
UA=UserAgent()#实例化创建请求载体对象
headers={
'User-Agent':UA.random#随机获取一个请求载体
}
# print(headers) response=requests.get('http://www.baidu.com',headers=headers)
print(response.encoding)#百度编码格式为ISO-8859-1
response.encoding='utf-8'
print(response.text)

fake-useragent随机生成请求载体

  2.3请求参数

    2.3.1 get请求参数----params

  get请求通过URL的查询字符串(querystring)传递某种数据。如果你是手工构建URL,那么数据会以键值对的形式置于URL中,跟在一个问号的后面。例如, https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action=&qq-pf-to=pcqq.c2c(豆瓣动作片评分)。 Requests允许你使用params关键字参数,以一个字符串字典来提供这些参数。

 import requests
from fake_useragent import UserAgent
UA=UserAgent()
headers={'User-Agent':UA.random} START=0
END=2000#如果循环爬取,起始位置数据计数会有大量重复,因此设置起始值爬取
f=open('豆瓣动作片评分.txt','w',encoding='utf-8') url=f'https://movie.douban.com/j/chart/top_list'
params={
'type':'',
'interval_id':'100:90',
'action':'',
'start':START,
'limit':END,
}
response = requests.get(url=url, params=params, headers=headers)
data=response.json() for movie in data:
f.write(f'{movie["rank"]}\t{movie["title"]}\t{movie["score"]}\n') f.close()

get请求参数params

    2.3.2 post请求参数----data

  你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单。要实现这个,只需简单地传递一个字典给 data 参数。你的数据字典在发出请求时会自动编码为表单形式。

 '''
肯德基城市位置查询# http://www.kfc.com.cn/kfccda/storelist/index.aspx
'''
import requests
from fake_useragent import UserAgent#伪造UA(pip install fake-useragent)
useragent=UserAgent() headers={
'UserAgent':useragent.random#随机生成UA
}
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
city=input('请输入查询城市>>>')
data={
'cname':'',
'pid':'',
'keyword':city,
'pageIndex':'',
'pageSize':'',
} response=requests.post(url,data=data,headers=headers)
for i in response.json()['Table1']:
print(i['addressDetail'])

post请求参数data

  2.4超时设置----timeout

  requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应。

 >>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001) 注意
timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)If no timeout is specified explicitly, requests do not time out.

超时timeout

3.requests之response响应

  任何时候进行了类似 requests.get() 的调用,都在做两件主要的事情。其一,你在构建一个 Request 对象, 该对象将被发送到某个服务器请求或查询一些资源。其二,一旦 requests 得到一个从服务器返回的响应就会产生一个 Response 对象。该响应对象包含服务器返回的所有信息,也包含你原来创建的 Request 对象。

  import requests

  response = requests.get('http://www.baidu.com')
print(response.status_code) # 打印状态码
print(response.url) # 打印请求url
print(response.headers) # 打印头信息
print(response.cookies) # 打印cookie信息
#response.encoding='utf-8'/'gbk'#解决编码问题,或者对需要提取的内容进行部分编解码操作(数据解析会讲)
print(response.text) #以文本形式打印网页源码---文本内容
print(response.content) #以字节流形式打印-----图片/音频/视频
print(response.json()) #以json形式打印----数据接口API
print(response.encoding) #输出页面内容编码格式(如ISO-8859-1)可以指定编码确保输出不乱码

爬虫之requests的请求与响应的更多相关文章

  1. python爬虫(二)_HTTP的请求和响应

    HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Prot ...

  2. Python爬虫-02:HTTPS请求与响应,以及抓包工具Fiddler的使用

    目录 1. HTTP和HTTPS 1.1. HTTP的请求和响应流程:打开一个网页的过程 1.2. URL 2. 客户端HTTP请求 3. Fiddler抓包工具的使用 3.1. 工作原理 3.2. ...

  3. python爬虫 - python requests网络请求简洁之道

    http://blog.csdn.net/pipisorry/article/details/48086195 requests简介 requests是一个很实用的Python HTTP客户端库,编写 ...

  4. 第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍

    第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍 Requests请求 Requests请求就是我们在爬虫文件写的Requests() ...

  5. 第三百二十二节,web爬虫,requests请求

    第三百二十二节,web爬虫,requests请求 requests请求,就是用yhthon的requests模块模拟浏览器请求,返回html源码 模拟浏览器请求有两种,一种是不需要用户登录或者验证的请 ...

  6. Python-网络爬虫模块-requests模块之响应-response

    当requests发送请求成功后,requests就会得到返回值,如果服务器响应正常,就会接收到响应数据: Response响应中的属性和方法 常用属性: status_code: 数据类型:int ...

  7. 爬虫之requests请求库

    介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下 ...

  8. Scrapy爬虫入门Request和Response(请求和响应)

    开发环境:Python 3.6.0 版本 (当前最新)Scrapy 1.3.2 版本 (当前最新) 请求和响应 Scrapy的Request和Response对象用于爬网网站. 通常,Request对 ...

  9. Python爬虫开发【第1篇】【HTTP与HTTPS请求与响应】

    一.HTTP.HTTPS介绍 HTTP协议(超文本传输协议):一种发布.接收HTML页面的方法 HTTPS协议:简单讲是HTTP安全版,在HTTP下加入SSL层 SSL(安全套接层),用于WEB的安全 ...

随机推荐

  1. tp5--开发规范

    在日常开发的过程中,写代码都要有一定的规范,不然可读取就太差了,所以为了以后的维护.对接,好的代码规定是必须的. 以下是我自己对自己提出的要求: 全部: 1)  每个方法都要写好备注(@retrun作 ...

  2. iscsi的工作原理与优化(2)

    2.1 iSCSI协议模型,iscsi[会话层协议,即应用协议] iSCSI使用TCP/IP协议在不稳定网络上进行可靠的数据传输.iSCSI层和标准SCSI集在协议栈中的位置如图1所示.iSCSI层包 ...

  3. js中的filter

    filter是常说的增删改查中的'查',当对一个数组进行筛选时,经常会使用indexOf 和es6中的includes()方法.filter是es5中的一种迭代方法,其定义为:对数组中的每一项运行给定 ...

  4. Xapian实战(三):索引

    参考资料: Xapian:Document, Value和Term Xapian:Database Xapian机制简要介绍 1. Xapian中各类要点总结 @ Database Database ...

  5. Node Mysql事务处理封装

    node回调函数的方式使得数据库事务貌似并没有像java.php那样编写简单,网上找了一些事务处理的封装并没有达到自己预期的那样简单编写,还是自己封装一个吧.封装的大体思路很简单:函数接受一个事务处理 ...

  6. 数学--数论--HDU 2674 沙雕题

    WhereIsHeroFrom: Zty, what are you doing ? Zty: I want to calculate N!.. WhereIsHeroFrom: So easy! H ...

  7. 图论--2-SAT--Tarjan连通分量+拓扑排序O(N+M)模板

    #include <cstdio> #include <cstring> #include <queue> #include <vector> #inc ...

  8. python连接MySQL/redis/mongoDB数据库的简单整理

    python连接mysql 用python操作mysql,你必须知道pymysql 代码示意: import pymysql conn = pymysql.connect(host='127.0.0. ...

  9. Java——IO流超详细总结

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...

  10. 一元三次方程 double输出 -0.00

    求一个 a*x*x*x+b*x*x+c*x+d 的解 题目很简单,但是我输出了-0.00,然后就一直卡着,这个问题以后要注意. 让0.00 编程-0.00的方法有很多. 第一种就是直接特判 if(fa ...