某土地网站cookie和字体反爬虫

网站分析流程:

打开浏览器无痕窗口访问网站首页并抓包:
sequence

1、第一次请求返回了一段JS代码

Set-Cookie: yunsuo_session_verify=bce172d3d4b76e70d08b342b4c675618;

<script type="text/javascript">
function stringToHex(str){
    var val="";
    for(var i = 0; i < str.length; i++){
    if(val == "")
    val = str.charCodeAt(i).toString(16);
    else val += str.charCodeAt(i).toString(16);}
    return val;
}
function YunSuoAutoJump(){ 
    var width =screen.width;
    var height=screen.height;
    var screendate = width + "," + height;
    var curlocation = window.location.href;
    if(-1 == curlocation.indexOf("security_verify_")){  // indexOf方法可返回某个指定的字符串值在字符串中首次出现的位置, 如果要检索的字符串值没有出现,则该方法返回 -1
    document.cookie="srcurl=" + stringToHex(window.location.href) + ";path=/;";}
    self.location = "/DesktopModule/BizframeExtendMdl/workList/bulWorkView.aspx?wmguid=6506735a-142d-4bde-9674-121656045e
                    d1&recorderguid=b65bc136-c939-4fba-a63f-d586f4f88f69&sitePath=&security_verify_data=" + stringToHex(screendate);}  // 会跳转
    // self 指窗口本身,它返回的对象跟window对象是一模一样的                
</script>

每次请求返回的这段JS代码都会将访问页面的url转换为16进制存入到cookie
并且在当前url的基础上拼接一个参数security_verify_data=’屏幕宽+高的16进制‘
在跳转页面设置另一个cookie 'security_session_mid_verify’重新跳转回初始请求页面
2、第二次请求返回同样的JS代码
可以观察到cookie中确实包含srcurl
Set-Cookie: security_session_mid_verify=ffb3dc19b5925c35e2be8a30abe172b3;
重新跳转到初始请求页面
3、显示第三次请求返回真正的目标页面

所以爬取的时候也要模拟前两次请求拿到cookie才能成功获取数据

除了上述cookie反爬之外还有一个字体反爬:
在这里插入图片描述
之前遇到的字体反爬网页源码中的字体都显示形如&#x123; 的这种表示,F12查看字体为?(这个方框在我写文章的时候其实也是用实体字符’&#x100be‘写的)

不过这次的文字都显示为类似乱码的中文,无论使用任何方法都抓取不到编码而是乱码文字
不能像以前一样通过字体的编码与文字的映射关系将乱码替换为真正的文字(假设已经通过ttf文件整理好映射关系了)

接下来:

1、首先搞懂以&#x为开头的字符串叫做实体字符,是可以被浏览器识别并显示对应字符的
并且发现&#x后面的16进制数字即为乱码的unicode码
因此明白了此网站的字体反爬就是找一堆特别复杂的汉字或者其他不友好的字符,将字符的unicode作为字体的编码

2、采取的方法是将所有ttf文件的编码通过python 的html.upescape转化为原来的unicode码所表示的汉字,然后将requests请求回来的数据中的文字逐一替换
注意这里有一个大坑
网站显示的字符集为gb2312
对response.content.decode(‘gb2312’) 解码替换发现部分字体替换成功
是因为gb2312字符集太小了导致解码出现部分乱码导致替换不成功
后采用gb18030(兼容gb2312)解码成功替换

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Python爬虫中的cookiesession是两个重要的概念。 Cookie是服务器在客户端存储的一小段文本信息,用于记录用户的登录状态、浏览历史等信息。在Python爬虫中,我们可以使用requests库中的cookies参数来设置和获取cookie信息。 Session是一种记录用户状态的机制,它可以在不同的请求之间保持用户的登录状态。在Python爬虫中,我们可以使用requests库中的Session对象来创建一个会话,从而实现登录、保持登录状态等操作。通过Session对象,我们可以方便地管理cookie信息,实现自动登录和持久化会话等功能。 ### 回答2: Python爬虫是指使用Python语言编写程序,自动获取互联网上的信息并进行数据分析或者存储的技术。而CookieSession则是爬虫程序中常用的两种技术,它们的作用是帮助爬虫程序模拟网站的登录情况和维持网站爬虫程序之间的会话状态,以便进行身份认证和绕过防护机制。 Cookie是存储在浏览器客户端的数据,主要用于表示用户身份、用户访问时间、用户信息等,如用户访问某个网站时会在浏览器中创建一个Cookie,这个Cookie信息会被服务器进行读取和处理。当爬虫程序需要模拟网站登录时,需要获取并保存服务器返回的Cookie,以便后续更好的请求和响应网站数据。Python中通过requests模块进行Cookie的使用。requests模块中有一个Session对象,默认情况下,Session对象会存储Cookie到本地,这就相当于保存了用户的登录状态,方便后面的请求使用。在requests的get和post方法调用时,通过传递session对象作为第一个参数,就可以在整个请求过程中使用保存过的Cookie信息。具体使用方法如下: ``` # 创建session对象 import requests session = requests.Session() # 网站登录请求 session.post(login_url, data=user_data) # 获取用户信息 user_info = session.get(user_url) ``` 而Session则是保存Web应用程序会话的数据结构,即Session是由Web应用程序使用的一种机制,该机制通过在客户端存储或通过增加HTTP Cookie的方式传递标识符来维护状态信息。Session的数据保存在服务器端,每次请求时都会带上保存在Cookie中的Session ID,服务器根据Session ID来查找对应的Session对象。在Python中,我们可以通过Flask、Django等Web框架来实现Session的使用。 综上,CookieSession爬虫程序中非常重要的技术,能够帮助爬虫程序更好地模拟登录和保持会话,让爬虫程序更快速、准确地抓取网站信息。但需要注意的是,爬虫程序的使用需要遵守网站的相关规定和道德底线,不得违相关法律法规和道德规范。 ### 回答3: Python爬虫是一个广泛应用于网络数据抓取和处理的技术。在Python爬虫中,cookiesession是非常重要的概念,它们有助于实现身份验证和保持用户会话状态。在本篇文章中,我们将具体介绍cookiesessionPython爬虫中的应用。 1. Cookie Cookie是一种客户端存储机制,通常由Web服务器在HTTP响应头中返回。Cookie可以包含存储在客户端计算机上的信息,并在相应的HTTP请求中发送回服务器。Python中的Requests库可以方便地处理Cookie,使用方法如下: ``` import requests # 创建Session对象 s=requests.Session() # 访问登陆页,获取cookie s.get('http://www.example.com/login') # 从响应中读取cookie cookie=s.cookies.get_dict() # 发送带有cookie的请求 s.get('http://www.example.com/user',cookies=cookie) ``` 从上面的代码可以看出,通过创建一个Session对象,我们可以在访问登陆页时获取Cookie,在后续请求中将Cookie发送回服务器。这种方式可以模拟用户登陆状态,方便爬取需要用户身份验证的数据。 2. Session Session是另一种用于跟踪用户会话状态的机制。与Cookie不同,Session是由Web服务器在服务器端管理的。当用户发送请求时,服务器会为用户创建一个Session,该Session在Web服务器上存储。Python中也可以方便地使用Session来处理会话状态,使用方法如下: ``` import requests # 创建Session对象 s=requests.Session() # 在Session中发起请求 s.get('http://www.example.com/user') ``` 通过创建一个Session对象,我们可以在爬取时保持用户的会话状态,实现一些需要用户登录后才能进行的操作。与Cookie不同,Session的内部机制是由Web服务器实现的,并不需要我们自己去处理。 总结 从上述内容可以看出,CookieSessionpython爬虫中起着至关重要的作用。Cookie可以方便地处理用户身份验证,从而实现一些需要用户身份验证的操作。而Session则可以方便地处理用户会话状态,为用户提供一种无缝的体验,在爬虫中也有广泛的应用。因此,Python爬虫开发者应该熟练掌握CookieSession的用法,以便在爬取数据时更加高效、方便。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值