requests学习笔记

requests简介

requests是python中原生的一款基于网络请求的模块

作用:模拟浏览器发送请求

浏览器发请求步骤:

1 指定网址url

2 发送请求

3 获取响应数据

4对数据的持久化操作

requests模块基础

导入requests模块

import requests

指定url(网址)

url='https://www.sogou.com/'

get 发送请求

a=requests.get(url)

text获取响应数据

page_text=a.text

字符串形式的响应数据

响应数据的持久化储存

with open(r'C:\Users\33494\Desktop\ghgh.html','w',encoding='utf-8') as af:
    af.write(page_text)

 过程

 json是字典一行    从Response判断

response:响应数据

案列一:简易网页采集器(可搜关键字)

requests的get方法的三个参数

a=requests.get(url,params,headers)

url:网址

params:参数,可拼接到url上

header:头信息,可以用来伪装载体(伪装为浏览器)

UA反爬机制及伪装

ua:指的是use-Agent请求载体的身份标识

门户网站的浏览器会检测对应请求载体的身份标识   如果为某一正常浏览器 则正常响应

反之 可能拒绝请求

如何抓包网页获取UA

1打开搜索页面输入内容搜索

2鼠标右击点击 检查 并刷新

 3.点击network后 下面随便点一个 点击header

 4向下翻找到

 UA伪装

1定义一个字典 键 user......    值用你上面获取到的后半部分

hears={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/103'}

2在进行爬虫发送请求get操作时

把第三个参数定义为这个字典即可

requests.get(url,params,headers=hears)

简单可搜索网页采集器制作(第二个参数)

打开一个搜索网页随便搜  我们发现网页的网址很长

 缩短网页  删到如图 我们发现此网址与长网址效果一样 已经成功把网址缩短 

 而=号的后面(55)显示的正好是我们搜索的内容

复制前半段

url='https://www.sogou.com/web?'

将后半段创建一个字典

shu=input('输入你要查找的内容')
param={'query':shu}
head={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/103'}
page=requests.get(url,param,headers=head)

字典相当于   (query=shu)

通过get的第二个参数实现拼接

page=requests.get(url,param,headers=head)

剩下的按原操作

import requests
url='https://www.sogou.com/web?'
shu=input('输入你要查找的内容')
param={'query':shu}
head={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/103'}
page=requests.get(url,param,headers=head)
page_text=page.text#text不加括号
with open(r'C:\Users\33494\Desktop\kk.html','w',encoding='utf-8') as fp:
    fp.write(page_text)

实战案例 破解某度翻译

分析过程

打开翻译 发现是部分页面进行刷新(ajkr请求)

搜索dog 

检查抓包    Network

输入单词发现抓包

 因为是ajks   点击XHR

抓到几个包   一个个点击看   找到最后一个是dog的  (你搜索的单词)

 (右下角    :dog)

观察 

 发现这是一个post请求(响应数据应该是json数据)

post

post请求 :提交数据(向服务器)

get请求:获取数据

实战

获取url

 post请求用post不用get

发请求

fan=input('输入你要翻译的内容')
data={'kw':fan}
url_post=requests.post('https://fanyi.baidu.com/sug',data=data)

第二个参数data表示要传入服务器的内容

 UA伪装

获取响应数据

可以用text 也可以用json(必须返回的是json对象

shu=url_post.json()

返回一个字典对象

储存

用json特有的方法jdump

json. dump(shu,fp,ensure_ascii=False)

将shu写入fp文件

先import json

全部

import requests
import json
fan=input('输入你要翻译的内容')
data={'kw':fan}
head={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/103'}
url_post=requests.post('https://fanyi.baidu.com/sug',data=data,headers=head)
shu=url_post.json()
fp=open(r'C:\Users\33494\Desktop\kk','w',encoding='utf-8')
json.dump(shu,fp,ensure_ascii=False)

实例:某豆电影

分析

获取数据  发送请求   url不变:ajkx

抓包  net。。。。 刷新  打开 XHR

 get

 json

 获取url

参数的理解

 start:从第几个开始

limit:获取几个

实战代码

import requests
import json
url='https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action='
head={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/103'}
data={'type': '5',
'interval_id':'100:90',
'action':'',
'start': '0',
'limit': '20'}
xin=requests.post(url,data=data,headers=head)
shu=xin.json()
fp=open(r'C:\Users\33494\Desktop\kk','w',encoding='utf-8')
json.dump(shu,fp,ensure_ascii=False)

肯某

import requests
import json
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
head={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/103'}
data={'cname':'',
'pid':'',
'keyword': '北京',
'pageIndex': '1',
'pageSize': '10'}
xin=requests.post(url,data=data,headers=head)
shu=xin.json()
fp=open(r'C:\Users\33494\Desktop\kk','w',encoding='utf-8')
json.dump(shu,fp,ensure_ascii=False)

药监

1从json中获取数据(json是一个字典)

定义一个列表用于存储,根据字典的键获取并存储

2多个json的存储

for 循环  覆盖前面的   包含  用一个列表存储所有字典

再把此字典存储

3多个页面   有个参数  page  定为动态   ’page‘:a

for循环覆盖    获取的获取几页的所有id   page要转化为字符串


进阶

cookie登陆

有一些网站内容是登陆后才能看的

简介

用户登陆  网站返回cookie  下次登陆带着cookie  返回网页内容

 session请求  会话  一连串请求

import requests
session=requests.session()#会话
a->b
b->a
a->b        session会记录会话内容

操作

在登陆页

 检查   network 

选上

登陆 点击这个

 

 登录页面url   同时发现是post请求

url='https://passport.17k.com/ck/user/login'#这是抓包里 login里的

date={'loginName':'15093795129',
      'password':'www12131415'}
resp=session.post(url,data=date)#登陆

post 第二个参数是账号 密码

login里面

 拿书架上书

书架   检查 network  刷新页面  抓包

一个个找包  看 

看有无

书架上书的信息

 找到有的    获取url   用session(他知道cookie)获取get

(拿不用text用json)

也可直接(另一种方法)

 cookie是login,等包中的     (实际操作麻烦)

import requests
session=requests.session()#会话

resp=session.post('https://passport.17k.com/ck/user/login',data={'loginName':'15093795129'
                                                                 ,'password':'www12131415'})
print(resp.text)
resp2=session.get('https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919')
print(resp2.text)

 防盗链

图片<img>   视频<video>

视频真地址

爬取视频  发现源代码里没有    检查有

(后期通过js  页面脚本生成的)

不在源代码里

页面源代码运行完 是视频里一样的

不在页面源代码里  一定是二次请求到的

检查  是实时的

检查出的scrurl(无效地址)

子视频界面上  检查选出  视频地址

刷新抓包选XHR

点出来的一个  

预览

 这个地址(预览里的srcurl)与视频地址有很大关系(但输入链接找不到网页)

对比两个链接地址

scrurl

只有中间不同

 有地址的

 网页防盗把下面的替换为上面的

替换

16613......替换为     cont-1741837

原页面url里 刚好有 这一串数字  

所以  原视频  取数字  替换  srcurl

步骤:

scrurl二次可以请求到     检查得到的网址源代码里无

原网页 拿到  cont_id

用原网页抓包来的网址(二次请求)拿到scrurl   

替换scrurl


referer防盗链

request完发现  拿不到

发现  里面有

解决方法

headers 请求头里加上   Referer这个字典

 防盗链原理

抓包得到的url     上一级网址是原网址

网站会检查  上一级网址是啥   如果凭空出现  二级网址  就会返回错误信息  

操作:

json   多重字典 拿srcurl

下载视频用content

代码

import requests
url='https://www.pearvideo.com/video_1094945'#原网址

cont_id=url.split('_')[1]#拿到cont_id

#抓包网址  用来拿 srcurl
url_two='https://www.pearvideo.com/videoStatus.jsp?contId=1094945&mrd=0.36961951608801336'

hears={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Fire'
        'fox/103.0','Referer':url}#加上源地址 处理防盗链
#返回的json字典  拿数据
resp=requests.get(url_two,headers=hears).json()
scrurl=resp["videoInfo"]["videos"]["srcUrl"]
systemTime=resp['systemTime']#scrurl中要被替换的数据


#替换  拿到真网址
vid_url=scrurl.replace(systemTime,'cont-'+cont_id)

#下载视频
with open('a.mp4','wb') as fp:
    fp.write(requests.get(vid_url).content)

 代理

原理

通过第三方机器发送请求

一个机器  多次  访问一个网址 会被封ip

一个机器 运用多个代理去访问 请求网址 则不会

借用他人ip

使用

网站上找一个ip

例子:218.60.8.83:3129

request   get的    proxies参数使用代理

proxies={'http':'http://218.60.8.83:3129'}
import requests
url='http://www.baidu.com'
proxies={'http':'http://218.60.8.83:3129'}

reps=requests.get(url,proxies=proxies)
print(reps.text)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值