1.是python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。
2.作用:模拟浏览器发送请求。
3.该如何使用(requests模块的编码流程)
— 指定url
— 发送请求
— 获取响应数据
— 持久化存储
主要分为这四步来操作的
4.环境的安装
到本地终端下,输入以下代码,即可安装
pip install requests
或者在pyCharm首选项里进行设置。
5.实战编码:
— 需求 :爬取搜狗首页的页面数据
根据上面的四部流程进行操作
import requests #导入requests模块
if __name__ == "__main__":
#1.指定url
url = "https://www.sogou.com/"
#2. 发起请求,
#发送请求成功,get方法会返回一个响应对象
response = requests.get(url=url)
#3. 获取响应数据
#以文本的形式给page_txt
page_txt = response.text
print(page_txt)
#4.持久化存储
#初期先存储到本地文件夹下的sogou.html文件下,以w的格式存入
with open('./sogou.html', 'w', encoding='UTF-8') as fp:
fp.write(page_txt)
print('爬取数据结束!!!')
这样就能获取到网页到所有内容并存入了sogou.html里
get和post的区别_萌萌哒小宝宝的博客-CSDN博客get和post的区别主要有以下几方面:1、url可见性:get,参数url可见;post,url参数不可见2、数据传输上:get,通过拼接url进行传递参数;post,通过body体传输参数3、缓存性:get请求是可以缓存的post请求不可以缓存4、后退页面的反应get请求页面后退时,不产生影响post请求页面后退时,会重新提交请求5、传输数据的大小get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)post请求传输数据的大小根据php.ini 配https://blog.csdn.net/qq_38889350/article/details/112187977?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165069089016782350944758%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165069089016782350944758&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-112187977.142%5Ev9%5Epc_search_result_control_group,157%5Ev4%5Enew_style&utm_term=get%E5%92%8Cpost%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187 with open()不了解的可以看看这篇
Python——with open()的用法_m0_48936146的博客-CSDN博客1. 用途:是python用来打开本地文件的,他会在使用完毕后,自动关闭文件,相对open()省去了写close()的麻烦2. 用法:with open(file="你要打开的路径名(或保存内容的地址)",mode="r/w/a",encoding="utf-8") as f: data=f1.read/write() print(data)如果没有指定的路径,会自动新建文件,无需先去新建。2.1 关于mode的三种常用模式:r:只读 用read()w: 只写 用https://blog.csdn.net/m0_48936146/article/details/124360734?spm=1001.2014.3001.5502
二、requests巩固深入 1、爬取搜狗指定词条对应的搜索结果见面(简单网页采集器)引入UA检测和UA伪装
1.1 动态搜索的设置
因为看图可以发现query是用于定义搜索参数的,所以可以将query单独封装起来
1.2 【解析+代码】
#UA: User_Agent(请求载体的身份标识)
#UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份为
#某一款浏览器,则说明该请求是一个正常的请求,但是如果检测到的请求的载体身份标识不是
#某一款浏览器的,则表示该请求为不正常的请求(爬虫),那么服务器端很有可能拒绝这次请求
#所以为了让我们每次都能成功访问,所以必须进行UA伪装,UA检测所对应的策略叫UA伪装
#UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器
import requests
if __name__ == "__main__":
#UA伪装:将对应的User-Agent封装到一个字典中
headers = {
#伪装成了谷歌浏览器
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
}
#1.指定url,转换为动态搜索
#当我们复制过来url的时候发现是乱码形式
#但在requests模块当中,这块代码也可以使用中文
#观察到query后面跟着的是我们搜索的关键词
#url = "https://www.sogou.com/web?query=%E5%90%83%E4%BB%80%E4%B9%88"
#url = "https://www.sogou.com/web?query=吃什么"
# 观察到query后面跟着的是我们搜索的关键词,但上面这样写,是写死的,不是动态的,所以需要对url携带的参数做一些处理
# 将url携带的参数封装出来,存入字典中实现动态搜索
url = "https://www.sogou.com/web?"
kw = input('请输入关键词:')
param = {
'query': kw
}
#2. 发送请求
#get有三个参数,上一个案例使用了第一个参数,第二个参数就是我们上面封装的关键词
#现在对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
#get的第三个参数headers是指用get方法发起的请求,所携带的头信息
response = requests.get(url=url,params=param,headers=headers)
#3. 获取数据
page_text = response.text
#4. 存储
fileName = kw+'.html' #指定文件名
with open(fileName,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,'保存成功!!!!')
【运行结果】
在文件中自动生成了吃什么的html文件
2、破解百度翻译
——实现输入"dog"时,只抓取这个单词的解析
2.1 解析
首先可以观察百度翻译页面,输入的单词 和解析是随着我们输入的单词而时时更新了,这就是“阿贾克斯请求”(ajax)的作用,XHR对应的就是阿贾克斯请求的数据包,在XHR下寻找kw为dog的数据包,就获取到了URL的值,并且可以知道对应的请求是POST类型
右击 -> 检查 -> Network -> XHR
可以观察到在阿贾克斯请求下有好几个sug的数据包,点进去就可以观察到,第一个sug存放的是"d"这个值,第二个sug存放的是“do”这个值,最后一个sug所携带的post请求就是我们要的结果值“dog”,所以这个和我们输入的单词数有关,这就是阿贾克斯的实时存入功能
再看下行的内容,可以看见有一个Content-Type:
这个指的是服务器端响应回客户端的数据类型
通过观察获取到的信息
-post请求(携带了参数)
kw=dog 这个kw就是post所携带的参数
- 响应数据是一组json数据
2.2 【代码+解析】
import requests
import json #导入json模块
if __name__=="__main__":
#1. 指定url
post_url = 'https://fanyi.baidu.com/sug'
#2. 进行UA伪装
header = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
}
#3. post请求参数处理(同get请求一致)
wd=input()
data = {
'kw':wd
}
#4. 发送请求
#post类似与get,第一个参数是url 第二个参数是url所携带的参数,第三个头标签
response = requests.post(post_url,data=data,headers=header)
#5. 获取响应数据;json()方法返回的是obj字典对象(如果确认响应数据是json类型的,才可以使用json())
dic_obj = response.json() #字典对象
#5. 持久化存储
fileName=wd+'.json'
fp=open(fileName,'w',encoding='utf-8')
#dump()第一个参数是一个变量类型,文件格式存放位置,第三个参数是指是否以ascii码来编译
json.dump(dic_obj,fp,ensure_ascii=False) #因为导入的有中文所以不能使用ascii码
print('Over!!!!')
【运行结果】
发现已经抓取成功



