网站建设企业网站优化,有哪些国外网站做的好的效果图,深圳品牌设计公司的发展,小城镇建设网站并阐述观点Python爬虫之requests模块#xff08;一#xff09;
学完urllib之后对爬虫应该有一定的了解了#xff0c;随后就来学习鼎鼎有名的requests模块吧。
一、requests简介。 1、什么是request模块#xff1f; requests其实就是py原生的一个基于网络请求的模块#xff0c;模拟…Python爬虫之requests模块一
学完urllib之后对爬虫应该有一定的了解了随后就来学习鼎鼎有名的requests模块吧。
一、requests简介。 1、什么是request模块 requests其实就是py原生的一个基于网络请求的模块模拟浏览器发起请求是不是和urllib很像。没错其实requests和urllib是有很多相似之处的但是requests更加的便捷、简单。 2、为什么要使用requests模块 一个技术的出现肯定是有所图的回想一下urllib的使用。 第一是不是如果url携带中文是不是每次都要对url进行编码使用quote函数如果一个url中有很多组参数都带中文那岂不是需要对url进行数次的编码 第二基于post请求需要手动的处理post请求的参数urlencode函数 第三urllib处理cookie和代理的操作比较繁琐。
但是对于requests来说则会自动处理url编码、自动处理post请求参数还简化了cookie和代理操作等等 3、requests模块如何被使用 其实和其他所有模块一样需要先使用pip安装随后import调用
pip install requests具体使用流程和urllib几乎类似
指定url使用requests模块发起请求获取响应数据进行持久化存储
二、基于requests模块发起get请求
1、requests模块处理不带参数的get请求
需求爬取搜狗首页页面数据
import requests
#1、指定url
url https://www.sogou.com/#2、发起一个get请求直接调用requests的get方法url参数为指定爬取的url
#get方法会返回请求成功后的响应对象
response requests.get(urlurl)#3、获取响应中的数据值text属性作用是获取响应对象中字符串形式的页面数据
page_data response.text# print(page_data)
#4、持久化存储
with open(sougou_req.html,w,encodingutf-8) as f:f.write(page_data)其实和urllib很类似。但是可以看到响应对象的属性有一个text。 其实关于响应对象的常用属性还是挺多的如下常见的 requests对象中其他重要的属性 response.content #content属性和text类似只不过返回的是响应对象中二进制byte类型的数据
response.status_code #status_code很简单明了就是返回响应状态码比如200、404、502等...
response.headers #返回响应头信息字典形式展示
response.url # 获取请求当中指定的url2、requests模块处理携带参数的get请求
需求指定一个词条获取搜狗搜索结果所对应的页面数据
第一种方式
import requests#指定URL,query后面是请求参数词条是孙燕姿编码格式是utf-8
url https://www.sogou.com/web?query孙燕姿ieutf8#发送请求requests即使请求url携带参数也同样可以直接使用get函数对其发起请求
response requests.get(urlurl)#获取响应页面数据
page_data response.text#持久化存储
with open(sunyanzi_re.html, w, encodingutf-8) as f:f.write(page_data)第二种方式
import requests#指定URL,query后面是请求参数参数先不写
url https://www.sogou.com/web#get方法其实还有一个params的参数可以将参数使用字典的方式直接赋值
#将参数封装到字典中
params {query: 孙燕姿,ie: utf-8
}
#使用get的params赋值
response requests.get(url, paramsparams)#查看响应状态码
print(response.status_code)
这里使用status_code返回请求的状态码成功则为200。
3、requests模块get请求自定义请求头信息
requests模块自定义请求头信息和urllib类似
import requests#自定义请求头信息
url https://www.sogou.com/web#将参数封装到字典中
params {query: 孙燕姿,ie: utf-8
}#自定义请求头信息
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
}#使用get的headers自定义请求头信息将请求头信息赋值给headers
response requests.get(url, paramsparams,headersheaders)#获取页面响应数据
data_page response.text#持久化存储
with open(ff.html,w,encodingutf-8) as f:f.write(data_page)
三、基于requests模块发起post请求
需求登陆豆瓣获取登录成功后的页面数据
首先这里需要获取到登陆时的URL 查看数据表单确认用户数据。这里我发现豆瓣密码居然是明文传输的。
import requests#指定POST请求的URL
url https://accounts.douban.com/j/mobile/login/basic#封装post请求的data参数data参数是账号密码信息在浏览器中复制数据表单
data {remember: true,name: **,password: **,ticket: tr0kBmbIbu****vjIlOi6F7Q**,randstr: **,tc_app_id: 204**
}#伪装UA
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
}#发起post请求调用post方法第二个参数是data参数第三个参数为自定义请求头信息
response requests.post(urlurl,datadata,headersheaders)#获取响应对象中的页面数据
data_page response.text#持久化保存
with open(douban_re.html,w,encodingutf-8) as f:f.write(data_page)
四、quests模块的ajax的get请求
AJAX即“Asynchronous Javascript And XML”异步JavaScript和XML是指一种创建交互式网页应用的网页开发技术。 ajax是一种浏览器通过js异步发起请求局部更新页面的技术。 Ajax请求的局部更新浏览器地址栏不会发生变化 局部更新不会舍弃原来页面的内容
需求抓取豆瓣电影上的详情数据
当然首先还是得获取到一个ajax的请求。这里通过开发者工具抓取到get方式的URL
这里注意到URL是携带参数的可以点开GET左边的箭头打开复制下面的参数。
import requests#url携带参数需要封装字典或者抽取到params中
#url https://movie.douban.com/j/chart/top_list?type5interval_id100:90actionstart20limit20
url https://movie.douban.com/j/chart/top_list#抽取参数start表示从20开始获取获取20个电影
params {type: 5,interval_id: 100:90,action: ,start: 20,limit: 20
}#自定义请求头信息
heards {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
}#发起请求ajax依旧是get方法
response requests.get(urlurl,paramsparams,headersheards)data_page response.text
print(data_page)五、quests模块的ajax的post请求
需求爬取肯德基城市餐厅位置数据
打开kfc官网 http://www.kfc.com.cn/kfccda/index.aspx 点击查询按钮就可以看到一个异步的ajax请求 这里选择北京点击查询并且抓取XHR就能抓取到这个ajax请求。 同样表单数据可以看到参数 import requests#指定url
url http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opcname#处理URL
data {cname: 北京,pid: ,pageIndex: 1,pageSize: 10
}#伪装UA
heards {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
}#发起基于ajax的post请求
response requests.post(urlurl,paramsdata,headersheards)kfc response.text
print(kfc)拿到结果可以验证一下这就是基于ajax的post请求。
六、初步总结
使用requests模块基于ajax的post和get请求和普通的get和post请求没有什么差别唯一的不同是必须要基于抓包工具抓取异步请求的url。