22.2.14session和反反爬处理
22.2.14 session和反反爬处理
1.session:
requests库包含session,都是用来对一个url发送请求,区别在于session是一连串的请求,在session请求过程中cookie等参数不会丢失。
requests库的session会话对象可以跨请求保持某些参数,说白了,就是比如你使用session成功的登录了某个网站,则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数尤其是在保持登陆状态时运用的最多,在某些网站抓取,或者app抓取时,有的时强制登陆,有的是不登陆返回的数据就是假的或者说是不完整的数据,那我们不可能去做到每一次请求都要去登陆一下怎么办,就需要用到保持会话的功能了,我们可以只登陆一次,然后保持这种状态去做其他的或者更多的请求。
code:
import requests
url='http://www.renren.com/PLogin.do'
id = input('请输入用户名:')
pw = input('请输入密码:')
data = {
"email": id,
"password": pw}
headers={
'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
}
session=requests.session()
session.post(url,data=data,headers=headers)
response=session.get("http://www.renren.com/880151247/profile")
with open('renren.html','w',encoding='utf-8') as fp:
fp.write(response.text)
2.反反爬处理
反反爬主要是处理user-agent,cookie,referer,定期sleep,加代理等等。
处理user-agent,cookie,referer都是一样的套路,在浏览器的抓包工具中找到对应的值,包装到headers中,再请求url时传入headers。定期sleep主要是为了防止一瞬间对网址的访问量过大,致使网址给你的账号封禁。
使用代理:
proxies = {
"http":"http://代理IP"
或者
"https":"https://代理IP"
#注意要和你访问的url前面的一致,你的url前面是http就在proxies里面用第一个,如果是https就用第二个。
}
requests.get(url,proxies)
这里以爬取梨视频为例,下载某一个视频:
import requests
from lxml import etree
def refererPrt():
url = "https://www.pearvideo.com/video_1751556" #练习爬取的网站是湿湿的,url可能会过期
#拿到开头url中的视频编号:
vedioId = url.split("_")[1]
# https://video.pearvideo.com/mp4/short/20220211/1644668544573-15825835-hd.mp4 404 f12 systemTime: "1644668544573"
# https://video.pearvideo.com/mp4/short/20220211/cont-1676274-15825835-hd.mp4 right 源码
#思路:分别拿到上面两个url,再将systemTime替换成cont-1676274
#1676274是视频的url("https://www.pearvideo.com/video_1676274")中有
# https://www.pearvideo.com/videoStatus.jsp?contId=1676274&mrd=0.7848558827776768
vedioStudios = f"https://www.pearvideo.com/videoStatus.jsp?contId={vedioId}&mrd=0.7848558827776768"
#这个链接在f12 network fech/xhr headers requests url可以拿到
#未能得到想要的信息:提示该文章已经下线。 解决方法:反反爬(添加User-Agent、处理cookie、处理防盗链referer等等,这里处理防盗链referer即可)
headers = {
"Referer": url #防盗链,可以理解为溯源 本次请求的上一级是谁(在本次练习中必须是拉取视频的网址,即开头的url)
}
#加入这个headers就能拿到我们想要的内容
response = requests.get(vedioStudios,headers = headers)
# print(response.json())
systemTime = (response.json())['systemTime']
vediourl = (response.json())['videoInfo']['videos']['srcUrl']
# print(systemTime)
# print(vediourl)
#拿到systemTime和vediourl,下一步就是做替换
#print(vedioId)
vediourl = vediourl.replace(systemTime,"cont-"+vedioId)
#print(vediourl)
#拿到视频地址,接下来用文件的形式存下来
with open("vedio.mp4",mode="wb") as f:
f.write(requests.get(vediourl).content)
f.close()
if __name__ == '__main__':
refererPrt()
22.2.14session和反反爬处理的更多相关文章
- python做反被爬保护的方法
python做反被爬保护的方法 网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.但是当网络爬虫被滥用后,互联网上就出现太多同质的东西,原创得不到保护.于是,很 ...
- python反反爬,爬取猫眼评分
python反反爬,爬取猫眼评分.解决网站爬取时,内容类似:$#x12E0;样式,且每次字体文件变化.下载FontCreator . 用FontCreator打开base.woff.查看对应字体关系 ...
- selenium + chrome 被检测,反反爬小记
selenium + chrome 很多难以采集的网站都使用selenium爬取,但是后来发现selenium有特征值,会被检测出来,今天来小结一下反反爬方案 测试网站 全绿好像代表没被检测出 中间人 ...
- Scrapy中的反反爬、logging设置、Request参数及POST请求
常用的反反爬策略 通常防止爬虫被反主要有以下几策略: 动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息.) 禁用cookies(也就是不启用cookies midd ...
- python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题
python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题 一丶爬虫概述 通过编写程序'模拟浏览器'上网,然后通 ...
- 爬取豆瓣电影储存到数据库MONGDB中以及反反爬虫
1.代码如下: doubanmoive.py # -*- coding: utf-8 -*- import scrapy from douban.items import DoubanItem cla ...
- 反反爬虫 IP代理
0x01 前言 一般而言,抓取稍微正规一点的网站,都会有反爬虫的制约.反爬虫主要有以下几种方式: 通过UA判断.这是最低级的判断,一般反爬虫不会用这个做唯一判断,因为反反爬虫非常容易,直接随机UA即可 ...
- 爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider)
爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider),这之间的斗争恢宏壮阔... Day 1小莫想要某站上所有的电影,写了标准的爬虫(基于HttpCli ...
- 爬虫---Beautiful Soup 反反爬虫事例
前两章简单的讲了Beautiful Soup的用法,在爬虫的过程中相信都遇到过一些反爬虫,如何跳过这些反爬虫呢?今天通过知乎网写一个简单的反爬中 什么是反爬虫 简单的说就是使用任何技术手段,阻止别人批 ...
随机推荐
- php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
PHP从主流来看,是一门面向过程的语言,它的最大缺点就是无法实现多线程管理,其程序的执行都是从头到尾,按照逻辑一路执行下来,不可能出现分支,这一点是限制php在主流程序语言中往更高级的语言发展的原因之 ...
- Python基础—编码(Day2)
一.字符编码 1.ASCII码:包含英文.数字.特殊字符,8位=1字节byte =1个字符,如: 0010 1010 ASCII码表里的字符总共有256个,前128个为常用的字符如运算符,后128个称 ...
- java中abstract关键字(抽象类)
需求 当父类某个方法,需要声明,但是又不确定如何实现时,可以用抽象方法,那么这个类就是抽象类 例如:父类是一个动物类,父类里面有很多方法,其中有一个方法是吃食物,但是不知道吃什么,需要子类继承的时候重 ...
- TCP/IP详解 读书笔记(一):概述
分层 网络协议通常分不同层次进行开发,每一层负责不同的职责,一个协议簇指的是一组不同层次上的多个协议的组合. TCP/IP通常被认为是一个四层协议系统: 链路层:主要是处理与电缆或其他传输媒介的物理接 ...
- mysql is not null 执行效率低
a表字段类型为int b表字段类型为varchar a left join b时如果查询条件是is not null,效率很快,is null 效率很低 后来两者改为同类型 int,效率很高
- excel仪表盘制作,商业智能仪表盘的作用
商业仪表盘被称为管理驾驶舱的重要组成部分,无论是管理决策者,还是企业业务流程中的普通员工,都可以利用它来展示分析的结果,让决策更加快速准确,更快地推动业务流程的进展,提高工作效率. 一个明确地了解自 ...
- 利用logrotate工具对catalina.out进行日志分割实战
logrotate是linux自带的日志分割工具,如果没有可以用yum安装 yum -y install logrotate 要配置日志分割定时任务,需要在/etc/logrotate.d/下创建一个 ...
- 【译】C# 11 特性的早期预览
原文 | Kathleen 翻译 | 郑子铭 Visual Studio 17.1(Visual Studio 2022 Update 1)和 .NET SDK 6.0.200 包含 C# 11 的预 ...
- Chrome:开发者模式下复制Element下的代码
Element模块下的代码只能一行一行复制,想要复制一个代码块,可以把该代码块先收起来,再对这个收起来的代码块进行复制就OK了
- (第一章第六部分)TensorFlow框架之实现线性回归小案例
系列博客链接: (一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html (二)TensorFlow框架之图与Tensor ...