Python爬虫入门教程 65-100 爬虫与反爬虫的修罗场,点评网站,字体反爬之三
爬虫与反爬虫的修罗场
哪种平台最吸引爬虫爱好者,当然是社区类的,那里容易产生原生态,高质量的数据啊,
你看微博,知乎,豆瓣爬的不亦乐乎。
评论也是产生内容的好地方
生活类点评网站
旅游类点评网站
音乐类点评
只要有点评的地方,总有成千上万的爬虫趴着。
这些都是爬虫与反爬虫的修罗场,他不想叫你爬,你越想爬
对他是核心数据,对你也是核心数据
今天要分析的网站
今天我们弄一下大众点评
学习阶段,我们要抱着学习的目的
重点是思路,做爬虫就不要想着一劳永逸了
方法公开,人家就换了
知识是你自己的,学到了,他换不掉
好了,我们开始吧
网站展示
what?! 数字是图片
打开svg图片,看看猫腻
按照咱爬虫的经验分析
必然是css实现了图片的定位,显示的局部
简单,手撕代码
走起
我们如何搞定这些定位呢?
简单啊,查找突破口
DOM长成这个样子
<b>
<svgmtsi class="zrvm6"></svgmtsi>
<svgmtsi class="zrpoc"></svgmtsi>
</b>
zrvm6
对应的是哪个数字呢?
坐标在着
.zrvm6 {
background: -103.0px -116.0px;
}
那是不是拿到所有的坐标就可以了?
必然是的
打开网页源文件
找啊~找啊,找朋友
咦?
这么耿直的么?
这是在鄙视我们爬虫工程师么
还是告诉我,此地无银
秀啊,找到了
接下来,敲黑板
如何从<svgmtsi class="zrvm6"></svgmtsi>
得到数字6
呢
第一步,我要打rap
额,不,我要获取css
为了加速,我写重要步骤了
你只需要这样,这样,就抓取到了
哈哈哈
关键代码
重要的注释,我已经添加好了
import re
import requests
from lxml import html
# 获取css的全部数据,并且一会通过正则表达式匹配出你想要的class
# css_name 你需要获取的css名称,例如zrvm6
# css_url 'https://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/3b0a424aef56ae40afe7711036173836.css'
# 这个地方是动态的,每次都要重新抓取一下
# .tiimh{background:-456.0px -849.0px;} 编写正则表达式
def get_css_position(css_name,css_url):
css_positon_html = requests.get(css_url).text
str_css = (r'%s{background:-(\d+).0px -(\d+).0px' % css_name)
css_re = re.compile(str_css)
info_css = css_re.findall(css_positon_html)
return info_css
if __name__ == '__main__':
a = get_css_position('tiimh','https://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/3b0a424aef56ae40afe7711036173836.css')
print(a)
展示结果,bingo,搞定
[('456', '849')]
接下来,你在这样,这样,over
坐标拿到了,下面要对应到svg里面
svg是有规律的,让我们看一下吧
横坐标,12的倍数,纵坐标分别是49,90,140,这个应该也是动态的,批量抓取的时候注意
# url需要动态获取哦~
result = requests.get('https://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/3e7551c3d26f090c29498db5024b1090.svg')
tree = html.fromstring(result.content)
a = tree.xpath('//text[@y="49"]/text()')[0] # 纵坐标也是动的,需要动态
b = tree.xpath('//text[@y="90"]/text()')[0]
c = tree.xpath('//text[@y="140"]/text()')[0]
补全解析过程
x,y = get_css_position('zrvm6','https://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/3b0a424aef56ae40afe7711036173836.css')[0]
x,y = int(x),int(y)
print('zrvm6的坐标是',x,y)
if y <= 49:
print('svg图片对应的数字:',a[x // 12])
elif y <= 90:
print('svg图片对应的数字:',b[x // 12])
else:
print('svg图片对应的数字:',c[x // 12])
09682953461602125891507990058105385628648915741477 54883192734856091073652293607343306967545493213422 24700621614898877713
zrvm6的坐标是 103 116
svg图片对应的数字: 6
ok,搞定了,要的就是这个feel
得到数字6,回去一看
哦,果然是6
666
欢迎关注「非本科程序员」 回复 【点评】获取本篇博客源码
Python爬虫入门教程 65-100 爬虫与反爬虫的修罗场,点评网站,字体反爬之三的更多相关文章
- Python爬虫入门教程 34-100 掘金网全站用户爬虫 scrapy
爬前叨叨 已经编写了33篇爬虫文章了,如果你按着一个个的实现,你的爬虫技术已经入门,从今天开始慢慢的就要写一些有分析价值的数据了,今天我选了一个<掘金网>,我们去爬取一下他的全站用户数据. ...
- Python爬虫入门教程 38-100 教育部高校名单数据爬虫 scrapy
爬前叨叨 今天要爬取一下正规大学名单,这些名单是教育部公布具有招生资格的高校名单,除了这些学校以外,其他招生的单位,其所招学生的学籍.发放的毕业证书国家均不予承认,也就是俗称的野鸡大学! 网址是 ht ...
- Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分
1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...
- Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分
1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...
- Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy
爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ...
- Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy
爬前叨叨 2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我 ...
- 2019-03-22 Python Scrapy 入门教程 笔记
Python Scrapy 入门教程 入门教程笔记: # 创建mySpider scrapy startproject mySpider # 创建itcast.py cd C:\Users\theDa ...
- Python基础入门教程
Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...
- Python爬虫入门教程 2-100 妹子图网站爬取
妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...
- Python爬虫入门教程 61-100 写个爬虫碰到反爬了,动手破坏它!
python3爬虫遇到了反爬 当你兴冲冲的打开一个网页,发现里面的资源好棒,能批量下载就好了,然后感谢写个爬虫down一下,结果,一顿操作之后,发现网站竟然有反爬措施,尴尬了. 接下来的几篇文章,我们 ...
随机推荐
- thinkphp下多语言
这里指定2种语言 ,zh-cn 和 zh-tw 1.在配置文件中写入 'LANG_SWITCH_ON' => true, // 开启语言包功能 'LANG_AUTO_DETECT' => ...
- LocalBroadcastManager 的使用
一.使用本地广播发送一条广播(本例为自己发送自己接收,本地广播也可以是其他应用接收)然后接收到广播时回调Receiver类中的回调方法onReceive()在此方法中自定义发出通知 代码 packag ...
- jquery正则判断字符串有几个逗号
var angelweb="我,你,ta,";var re=/[,,]/g;if(re.test(angelweb)){ var n=angelweb.match(re).leng ...
- sql优化常用命令总结
1.显示执行计划的详细步骤 SET SHOWPLAN_ALL ON; SET SHOWPLAN_ALL OFF; 2. 显示执行语句的IO成本,时间成本 SET STATISTICS IO ON SE ...
- ASP.NET MVC HtmlHelper 默认值
例如: @Html.HiddenFor(m=>m.IsMating,new { Value="True"}) 注意:value属性的首字母要用大写.
- 怎样完整地离线更新并升级基于 Debian 的操作系统
不久之前我已经向你展示了如何在任意离线的 Ubuntu 和 Arch Linux 操作系统上安装软件. 今天,我们将会看看如何完整地离线更新并升级基于 Debian 的操作系统. 和之前所述方法的不同 ...
- 如何删除win8自带输入法
如何删除 win8 自带输入法 win8 自带的那个中文输入法太坑了,想删又删不了.试了半个小时才试出一个方法.方法如下: 第一步:在更改语言道选项下面点击[添加语言] [控制面板] -> [时 ...
- Maven系列(一)plugin
Maven系列(一)plugin maven-compiler-plugin 使用 mvn compile 命令,出现错误: 编码 GBK 的不可映射字符而不能编译.这是因为代码或注释中存在中文引起的 ...
- centos 6.5 安装mysql
步骤1: yum -y install mysql-server 步骤2: chkconfig mysqld on 步骤3: service mysqld start mysql -u root se ...
- HTML <img> 标签的 alt 属性
定义和用法 alt 属性是一个必需的属性,它规定在图像无法显示时的替代文本. 假设由于下列原因用户无法查看图像,alt 属性可以为图像提供替代的信息: 网速太慢 src 属性中的错误 浏览器禁用图像 ...