python网络爬虫之requests模块
什么是requests模块
requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。

因为在使用urllib模块的时候,会有诸多不便之处,总结如下:
手动处理url编码
手动处理post请求参数
处理cookie和代理操作繁琐
......
使用requests模块:
自动处理url编码
自动处理post请求参数
简化cookie和代理操作
......
为什么要使用requests模块
如何使用requests模块
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。- 安装:
- pip install requests
- 使用流程
- 指定url
- 基于requests模块发起请求
- 获取响应对象中的数据值
- 持久化存储
基于如下5点展开requests模块的练习
1.基于requests模块的get请求 2.基于requests模块的post请求 3.基于requests模块ajax的get请求 4.基于requests模块ajax的post请求 5.综合练习
案例演示代码演示:
1.基于requests模块的get请求,需求:

import requests #1.指定url headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' } url = 'https://www.sogou.com/' #2.发起请求:get返回一个响应对象 response = requests.get(url=url,verify=False,headers=headers) #3.获取响应数据:text属性返回的是字符串形式的响应数据 page_text = response.text print(page_text) #4.持久化存储 with open('./sogou.html','w',encoding='utf-8') as fp: fp.write(page_text) print('over!!!')需求:爬取搜狗首页的页面数据

import requests wd = input('enter a word:') #url携带的参数需要手动处理 url = 'https://www.sogou.com/web' #将参数手动处理成了字典的形式 param = { 'query':wd } #使用params参数处理了请求携带的参数 response = requests.get(url=url,params=param) page_text = response.text fileName = wd+'.html' #文件名 #数据持久化 with open(fileName,'w',encoding='utf-8') as fp: fp.write(page_text) print(fileName,'爬取成功!')需求:爬取指定词条对应搜狗搜索结果页面
2.基于requests模块的post请求:
3.基于requests模块ajax的git请求:
prsponse这里的数据在世我们拿到的数据信息
在线JSON校验格式化工具:http://www.bejson.com/
4.基于requests模块ajax的post请求:

ajax动态加载数据抓包查看方法
如果是Content-Type:application/json,可以obj_json = response.json() #json()返回的就是对象类型的响应数据

#!/usr/bin/env python # -*- coding:utf-8 -*- import requests import urllib.request if __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) movie_list = response.json() print(movie_list) #y以json格式拿取列表里嵌套着字典,每个字典是一电影的详情 all_names = [] for dic in movie_list: print(dic) name = dic['title'] all_names.append(name) print(all_names)需求:爬取豆瓣电影分类排行榜的电影名称

#!/usr/bin/env python # -*- coding:utf-8 -*- import requests import urllib.request if __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': '100' } #发起post请求,获取响应对象 response = requests.post(url=url,headers=headers,data=data) #获取响应内容:响应内容为json串 print(response.text)需求:爬取肯德基餐厅查询http://www.kfc.com.cn/kfccda/index.aspx中指定地点的餐厅数据
5.综合练习:

更多精彩