1 Requests介绍:
Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。更重要的一点是它支持 Python3 哦!
2 安装
利用pip安装
pip install requests
3 基本请求
r = requests.get('https://www.baidu.com/')
r = requests.post('https://www.baidu.com/')
r = requests.put('https://www.baidu.com/')
r = requests.delete('https://www.baidu.com/')
r = requests.head('https://www.baidu.com/')
r = requests.options('https://www.baidu.com/t')
3.1 get请求
需求:爬取搜狗首页的页面源码数据
import requests
1.指定url
url = 'https://www.sogou.com/'
2.发起请求
response = requests.get(url=url)#get返回一个响应对象
3.获取响应数据
page_text = response.text #获取字符串形式的响应数据
print(page_text)
4.持久化存储
with open('./sogou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
3.2 post请求
参数是字典,我们也可以传递JSON类型的参数
需求:将北京所有肯德基餐厅的位置信息进行爬取
import requests
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
city = input('enter a city name:')
for page in range(5):
data = {
'cname': '',
'pid': '',
'keyword': city,
'pageIndex': str(page),
'pageSize': '10',
}
#参数动态化使用的是data参数
data_dict = requests.post(url=url,data=data).json()
print(data_dict)
3.3自定义请求头
伪装请求头是采集时经常用的,我们可以用这个方法来隐藏
url = 'https://www.sogou.com/web?query=jay'
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}
#UA伪装
response = requests.get(url=url,headers=headers)
# response.encoding#返回响应数据原始的编码格式
response.encoding = 'utf-8'
page_text = response.text
with open('./jay.html','w',encoding='utf-8') as fp:
fp.write(page_text)
3.4设置超时时间
可以通过timeout获取超时时间,一旦超过这个时间还没有获取相应内容,就会提示错误。
req =requests.get("http://www.kfc.com.cn", timeout=0.1)
3.5代理访问
采集时为了避免被封IP,经常会使用代理,requests也有相应的proxies属性
import requests
url = 'https://www.baidu.com/'
proxies ={
'http':'http://123.101.231.234:9999',
'http':'http://183.166.103.22:9999'
}
data_dict = requests.get(url=url,proxies=proxies)
print(data_dict)
#如果代理需要密码
proxies ={
'http':'http://user:pass@123.101.231.234:9999'
}
3.6 session自动保存cookies
session的意思是保持会话,比如登录后继续操作(记录身份信息),而requests是单次的请求,身份信息不会被记录
import requests
#创建一个session对象
s= requests.sessions()
#用session对象发出get请求,设置cookies
data_dict = s.get('https://www.baidu.com/cookies/sessioncoo')
print(data_dict)
3.7 ssl验证
访问https页面
import requests
url = 'https://www.12306.cn/mormhweb/'
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}
#禁用安全请求警告
requests.packages.urllib3.disable_warnings()
data_dict = requests.get('https://www.baidu.com/',verify=False,headers=headers)
print(data_dict.text)
4 获取相应请求信息
代码 | 含义 |
---|---|
req.json() | 获取响应内容(以json字符串的方式) |
req.text | 获取响应内容(以字符串的方式) |
req.content | 获取响应内容(以字节的方式) |
req.headers | 获取响应头内容 |
req.url | 获取访问地址 |
req.encoding | 获取网页编码 |
req.encoding | 获取网页编码 |
req.cookie | 获取cookie信息 |