requests用法基本-进阶
2019-11-18杂谈搜奇网41°c
A+ A-本节内容
-
模块的装置
-----------------------基础用法---------------------
-
GET用法、POST用法
-----------------------进阶用法--------------------
-
cookie处置惩罚、代办ip、session
一 模块装置:
1). 装置requests包照样很轻易的,电脑中有python环境,翻开cmd,输入pip install requests下载;
假如有同砚运用pycharm的话,挑选file-->setting-->Project interpreter-->右侧"+"号点击--->输入模块名---->选中下载。
2). requests的作用、特性、以及运用流程
-
作用:模仿用户运用浏览器上网
-
特性:简朴、高效
-
运用流程:
-
指定url;
-
提议要求(requests.get/post);
-
猎取相应信息/数据(response);
-
耐久化存储(保留csv、MySQL、txt等);
-
二基础用法:
1). get(url,headers,params):各用法
猎取搜狗首页的页面数据:
1 import requests #引包 2 #1指定url 3 url = 'https://www.sogou.com/' 4 #2.提议要求 5 response = requests.get(url=url) 6 #3猎取相应数据 7 page_text = response.text #text返回的是字符串范例的数据 8 #耐久化存储 9 with open('./sogou.html','w',encoding='utf-8') as fp: 10 fp.write(page_text) 11 print('over!') 12 #也能够直接打印 13 print(page_text) #这就是服务器给我们返回的数据信息(response)
2). headers的运用:
假如没有假装UA,你发送的要求中的UA是一个爬虫标识;而且如今大部分网站都是有UA检测(反爬机制),所以我们须要UA假装(反反爬战略)骗过网站,
-
我们能够翻开网站,F12,随便点击一个信息,找到Headers这个标签,翻到最下面有一个 User-Agent ,在python中我们须要对他举行组织。
-
python中有一个随机生成UserAgent的包----fake-useragent,它的装置要领也很简朴,pip install fake-useragent。
3). 下面完成上面headers的组织:
1 #第一种要领 2 #user-agent放在字典中,不光useragent,背面我们讲到的cookie等都须要放入 3 import requests 4 headers== { 5 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' 6 } 7 #挪用要领,get(传入了两个参数,url,headers) 8 response = requests.get("http://www.baidu.com",headers=headers)
运用fake-useragent猎取并组织UA:
import requests from fake_useragent import UserAgent ua = UserAgent() headers = {'User-Agent': ua.random} url = '待爬网页的url' resp = requests.get(url, headers=headers)
4). params 参数
我们运用一个例子来融会headers与params,照样以搜狗为例:
1 import requests 2 wd = input('enter a word:') 3 url = 'https://www.sogou.com/web' 4 #参数的封装 5 param = { 6 'query':wd 7 } 8 #UA假装 9 headers = { 10 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' 11 } 12 response = requests.get(url=url,params=param,headers=headers) 13 #手动修正相应数据的编码 14 response.encoding = 'utf-8' 15 page_text = response.text 16 fileName = wd + '.html' 17 with open(fileName,'w',encoding='utf-8') as fp: 18 fp.write(page_text) 19 print(fileName,'爬取胜利!!!')
上面的例子能够看出,假如须要将参数放在url中通报,能够应用 params 参数 。
5)post用法:我们接见网站的时刻,有时刻是须要提交数据给网页的,假如提交的数据中没有网站所认证的信息,那末网站将会返回给你毛病或许其他信息。
最基础的POST要求:
1 response = requests.post("http://www.baidu.com/",data=data)
传入数据的今后就不须要运用urlencode举行编码了。
实例(完成百度翻译):
1 import requests 2 #破解百度翻译 3 url = 'https://fanyi.baidu.com/sug' 4 word = input('enter a English word:') 5 #要求参数的封装 6 data = { 7 'kw':word 8 } 9 #UA假装 10 headers = { 11 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' 12 } 13 response = requests.post(url=url,data=data,headers=headers) 14 #text:字符串 json():对象 15 json_dict = response.json() 16 17 print(json_dict)#返回是一个json列表,举行数据提取即可
如今大部分的网站都是经由过程动态加载(Ajax)该手艺加载信息,有的网站防备数据的泄漏或许用户隐私平安,会设置js、css字体加密等等;背面有机会在引见。再举个例子以下,爬取肯德基餐厅位置:
1 #爬取恣意都市对应的肯德基餐厅的位置信息 2 #动态加载的数据 3 city = input('enter a cityName:') 4 url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' 5 #数据封装 6 data = { 7 "cname": "", 8 "pid": "", 9 "keyword": city, 10 "pageIndex": "2", 11 "pageSize": "10", 12 } 13 #UA假装 14 headers = { 15 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' 16 } 17 #返回的数据 18 response = requests.post(url=url,headers=headers,data=data).text 19 print(response)#打印
有人会问怎么看我们须要传输什么参数呢?我们翻开网站币乎网站,点击登录,翻开开辟者形式(谷歌浏览器),输入账号暗码后,在标签为Network中的Headers中最下面的Request payload中。如图所示:
我们能够运用模仿参数举行登录(大部分网站举行加密);在背面会解说谷歌的一些操纵以及加密的数据的处理体式格局,这里临时略过。
三 cookie、代办ip、session
(1). cookie的引见:
进修之前简朴的相识一下cookie是做什么的,有什么作用;我们在百度上搜刮一下,会出来许多的关于cookie的引见,我截取了一段:
Cookie的作用:
cookie的用处是存储用户在特定网站上的暗码和 ID。别的,也用于存储起始页的首选项。在供应个人化检察的网站上,将应用计算机硬驱上的少许空间来贮存这些首选项。如许,每次登录该网站时,浏览器将搜检是不是有cookie。假如有,浏览器将此 cookie 随网页的要求一同发送给服务器 ,有一个基础的观点就行;
接下来我们猎取一下cookies:
1 import requests 2 #网址 3 url ="http:///www.baidu。com” 4 #返回相应 5 response = requests.get(url) 6 #猎取要求网页的cookies 7 #打印出cookies 8 print(response.cookies)##RequestCookieJar范例,我们运用items要领将其转换成元组,遍历美每一个cookie的的称号跟值。 9 #第一种要领 10 for k,v in response.cookies.items(): 11 print(k +"="+ v) 12 #第二种要领 13 print(resp.cookies.get_dict())
我们也能够运用cookie来保持我们在网站上的登录状况,以我学校的网站为例(能够自行找登录网站),起首登录网站,翻开F12,进入network面板----headers中,将cookies复制下来放进我们组织的headers中;
1 import requests 2 3 headers = { 4 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36", 5 "Cookie": "JSESSIONID=加密字符串" 6 } 7 8 r = requests.get(url,headers=headers) 9 10 print(r.text)
运转今后就会发明返返来的信息中有上岸后的效果,证实登录胜利。
(2)session(会话保持):
多个要求之间是能够同享cookie
的。那末假如运用requests
,也要到达同享cookie
的目标,那末能够运用requests
库给我们供应的session
对象。注重,这里的session
不是web开辟中的谁人session,这个处所只是一个会话的对象罢了。
上面的诠释能够有些笼统,打个比如你在爬取一个网站,第一次要求应用post登录了网站,第二次想猎取登录胜利后的信息,你再运用get要领要求个人信息页面,你发明要求不到,实际上上面的两个操纵是翻开了两个浏览器,是完整差别的。
所以有需求就有处理方案,如许我们就引出session对象,它能够保持同一个会话,也就是翻开一个浏览器的新标签页;如许就防备我们上岸后猎取不到信息的懊恼。
以登录大家网为例,运用requests
来完成。示例代码以下:
1 import requests 2 3 url = "http://www.renren.com/PLogin.do" 4 data = {"email":"email",'password':"password"} 5 headers = { 6 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" 7 } 8 9 # 登录 10 session = requests.session() 11 #提交参数信息 12 session.post(url,data=data,headers=headers) 13 14 # 接见大鹏个人中间 15 resp = session.get('http://www.renren.com/880151247/profile') 16 17 print(resp.text)
注:session一般用于模仿登录胜利后举行下一步操纵。
(3).代办ip的运用
代办ip的运用场所:关于某些网站,我们测试的时刻要求频频能够猎取网页内容,然则当大规模且频仍的要求,网站能够涌现验证码、或许跳到登录认证页面,更有的会直接封掉客户端IP,致使肯定的时间内无法接见。
为了防备这类状况的发作,我们须要举行代办操纵,代办实在就是代办服务器,代办网站的话自行百度一下。
代办的概况:https://www.kuaidaili.com/doc/wiki/
代办分为下面几种范例:
-匿名度:
- 通明:对方服务器能够晓得你运用了代办,而且也晓得你的实在IP
- 匿名:对方服务器能够晓得你运用了代办,但不晓得你的实在IP
- 高匿:对方服务器不晓得你运用了代办,更不晓得你的实在IP。
- 范例:
- http:该范例的代办ip只能够提议http协定头对应的要求
- https:该范例的代办ip只能够提议https协定头对应的要求
设置代办的体式格局:
1 import requests 2 proxies = { 3 "http":"ip:端口", 4 "https":"ip:端口", 5 } 6 requests.get(url,proxies=proxies)
总结:
requests的get和post要领经常使用的参数:
-
url
-
headers
-
data/params
-
proxies
你能够看会了,然则你敲了吗?
初学者
分享及胜利