Glidedsky系列—爬虫CSS反爬
前言
题目网址为:http://glidedsky.com/level/web/crawler-css-puzzle-1
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目描述
二、题目分析
1.网页分析
我们看到的网页展示效果:
网页对应的源码:
我们可以发现网页所展示的内容跟我们看到的div文本内容有些差异,如果直接获取文本内容,得到的值肯定是不对的,这次网页使用的是CSS反爬,可以利用CSS样式来改变div属性的位置、数值、以及是否可见等等,这种类型的反爬不难,总的来说就是找规律,需要耗费一定的精力去找寻它的变化规律。
我们开始逐个分析div的样式,其中文本值为4的div样式属性,我们可以看到这个4在页面展示中是没有的,它其中的样式属性opacity是css样式中设置透明度的,值为0,也就不可见
我们在前端看到的数值为369,而div中剩下数字顺序为6,3,9 我们再继续分析每个数字的样式属性
我们观察发现,9位置没有变化,它的样式中不包含left属性,而位置发生的6和3都有left属性,6的left值为1em,3的left值为-1em,通过width属性我们可以知道,每个数字的宽度就是1em,而6向右偏移1个单位,3向左偏移一个单位就恰好是我们最终看到的页面效果,我们就此猜测数字最终的位置就是初始的位置加上left上的数值,然后我们可以观察后面的div来验证我们的猜想。
然而事情并没有这么快就结束,我们发现数值77对应的div下面一个文本数值都没有,只有一个奇奇怪怪的::before,本着不懂就百度的心态,CSS的知识点又增加了
其中的content值就是我们需要的
查看网页的源码,我们可以找到样式对应的属性
2.代码实现
代码如下:
import re
import requests
from lxml import etreedef get_token():resp = s.get(login_url)token = re.findall('<meta name="csrf-token" content="(.*?)">', resp.text)[0]return tokendef page_sum(page_url):page_text = s.get(url=page_url).texthtml = etree.HTML(page_text)div_list = html.xpath('//div[@class="row"]/div')#获取网页中所有的style样式css_style = re.findall('<style>([\s\S]*)<\/style>', page_text)[0].replace(' ', '').replace('\n','')#print(css_style)page_sum = 0#循环遍历出10个divfor divs in div_list:#记录div中每个数字的初始位置index = 0#记录偏移后的位置与数值,key为位置索引,value为数值num_dict = {}num_str=''#循环出div中的每个数字for div in divs:div_style = div.xpath('./@class')[0]#数字div中包含的所有样式匹配规则re_style = '.'+div_style+'{(.*?)}'#样式中含有before的正则匹配规则content_style ='.'+div_style+':before{content:"(\d+)"}'# print(content_style)#当数字div样式包含属性content_style,直接获取content值,并退出当前div循环if re.findall(content_style,css_style):num = int(re.findall(content_style,css_style)[0])#print(num)break#获取当前数字div的样式div_style_lists = re.findall(re_style,css_style)# print(div.xpath('./text()'))div_dict={}#把数字div样式属性弄成字典键值对格式for div_style_list in div_style_lists:k,v=div_style_list.replace('em','').split(':')div_dict[k] = v#print(div_dict)if 'opacity' in div_dict:continue#当样式中包含left属性,数字需进行偏移if 'left' in div_dict:#偏移后位置索引为,数字初始位置加left属性中的偏移量num_index = index + int(div_dict['left'])#当前数字位置处理完毕,位置索引自增,为下个数字的初始位置index+=1div_num = div.xpath('./text()')[0]num_dict[num_index] = div_num# num_list.append(num_index)else:#数字不用偏移,初始位置就为最终位置num_index = indexindex += 1div_num = div.xpath('./text()')[0]num_dict[num_index] = div_num# num_list.append(num_index)if num_dict:#根据k进行排序,依次将str(数字)拼接,即为网页展示的三位数效果for i in sorted(num_dict.keys()):num_str+=num_dict[i]num = int(num_str)page_sum+=numreturn page_sumprint(page_sum)headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0'
}
login_url = "http://glidedsky.com/login"
s = requests.session()
data = {'_token' : get_token(),'email' : '账号','password' : "密码"
}
s.post(url = login_url,data=data)
num_count=0
for i in range(1,1001):print('正在计算第%d页'%i)num_count+=page_sum('http://glidedsky.com/level/web/crawler-css-puzzle-1?page=%d'%i)
print(num_count)
代码注释写得应该挺清楚了哈~
Glidedsky系列—爬虫CSS反爬相关推荐
- python爬虫进阶-自如租房信息(CSS反爬)
目的 分析学习CSS反爬并得到正确的信息 详细需求 http://sz.ziroom.com/z/ 思路解析 一.F12 二.分析 三.复制url,浏览器打开查看 四.映射字符 五.汇总 1.源网页请 ...
- python爬虫反爬-python爬虫--爬虫与反爬
爬虫与反爬 爬虫:自动获取网站数据的程序,关键是批量的获取. 反爬虫:使用技术手段防止爬虫程序的方法 误伤:反爬技术将普通用户识别为爬虫,从而限制其访问,如果误伤过高,反爬效果再好也不能使用(例如封i ...
- 抓取设了CSS反爬机制的大众点评数据(下)
该篇实现大众点评爬虫操作代码,所有原理都在(上)篇均已详细阐述,让我没想到的是大众点评不仅设置了CSS反爬,在ip限制方面也是十分的凶狠,不得已花了10块钱买了一天代理ip. 大众点评究的反爬竟有多恶 ...
- 第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫和反爬的对抗过程以及策略—scrapy架构源码分析图...
第三百四十五节,Python分布式爬虫打造搜索引擎Scrapy精讲-爬虫和反爬的对抗过程以及策略-scrapy架构源码分析图 1.基本概念 2.反爬虫的目的 3.爬虫和反爬的对抗过程以及策略 scra ...
- 爬虫与反爬:一场无休止之战
现实生活中,其实很多人都与爬虫"打过交道". 比如,逢年过节之时,为确保能买到回家火车票,有人会选择使用"抢票软件",这个软件就是利用网络爬虫来登录铁路售票网络 ...
- tesseract破解css反爬抓取自如租房信息
引言 作为一个刚毕业两年的打工人,在深圳这种房价压死人的城市,买房是不可能买房了,只能寄希望于租到一个便宜又舒适的房子.今天给大家带来的案例是tesseract破解css反爬抓取自如租房信息,将好房源 ...
- Python爬虫-2019年我破解了商标网数据爬虫-破解反爬技术那些事情
Python爬虫-2019年我破解了商标网!数据爬虫-破解反爬技术那些事情 由于自己一直做Python大数据挖掘技术开发,最近有不少的朋友要做大数据分析,找我帮忙商标网的数据挖掘,实现爬取中国商标网全 ...
- 16.网络爬虫—字体反爬(实战演示)
网络爬虫-字体反爬 一·字体反爬原理 二·字体反爬模块Fonttools TTF文件 三·FontCreator 14.0.0.2790 FontCreatorPortable下载与安装 四·实战演示 ...
- 【Python3爬虫】大众点评爬虫(搞定CSS反爬)
本次爬虫的爬取目标是大众点评上的一些店铺的店铺名称.推荐菜和评分信息. 一.页面分析 进入大众点评,然后选择美食(http://www.dianping.com/wuhan/ch10),可以看到一页有 ...
最新文章
- cognos学习轨迹
- c语言编写程序数一下 1到100的所有整数中出现多少次数字9
- Arcface demo
- linux网络编程之一般应用采用的协议和不同套接字的地址结构以及用户进程和内核通过哪些函数传递套接字的地址结构
- 检测性异常VS非检测性异常
- SAAS产业趋势洞察——乘风破浪会有时
- Magento重建所有索引方法
- Gopher一定要会的代码自动化检查
- 4_less中带参数混合
- xml+javascript实现简单图片轮换
- 如何实现文件上传 - JavaWeb
- 前端 JavaScript 实现一个简易计算器
- 大数据解读剩女现象:谁遗忘了她们的爱情?
- VB6.0数据库访问技术与例程解析Java教程
- [opencv]学习之帧差法实现运动物体检测
- 深入浅出讲解 Python 元类(Metaclass)的使用
- 项目管理学习总结(15)——技术负责人所需的四个核心能力
- 卡塔兰数(Catlan)
- 【2022秋招-面试题目汇总(随时更新)】
- CMake入门二——子目录的嵌套
热门文章
- java中excel文件的导入,限制上传的文件类型,文件的大小,显示上传文件的进度条...
- 回调函数注入(Callback Injection)实例汇总
- [Kaggle Classify-Leaves] 树叶分类 score0.950
- linux开发环境工具
- 没有使用IaC的DevOps系统都是耍流氓
- 21. 理解CNI和CNI插件
- 【云原生分布式存储】成书心路历程
- 计算机能直接识别的算法表示形式,几种常用的图像置乱算法:图像识别算法
- 媛明源科普基金倡议发起婴儿日
- OMI数据-官网资料的记录