爬虫与反爬虫的修罗场

哪种平台最吸引爬虫爱好者,当然是社区类的,那里容易产生原生态,高质量的数据啊,

你看微博,知乎,豆瓣爬的不亦乐乎。

评论也是产生内容的好地方

生活类点评网站

旅游类点评网站

音乐类点评

只要有点评的地方,总有成千上万的爬虫趴着。

这些都是爬虫与反爬虫的修罗场,他不想叫你爬,你越想爬

对他是核心数据,对你也是核心数据

今天要分析的网站

今天我们弄一下大众点评

学习阶段,我们要抱着学习的目的

重点是思路,做爬虫就不要想着一劳永逸了

方法公开,人家就换了

知识是你自己的,学到了,他换不掉

好了,我们开始吧

网站展示



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 爬虫与反爬虫的修罗场,点评网站,字体反爬之三的更多相关文章

  1. Python爬虫入门教程 34-100 掘金网全站用户爬虫 scrapy

    爬前叨叨 已经编写了33篇爬虫文章了,如果你按着一个个的实现,你的爬虫技术已经入门,从今天开始慢慢的就要写一些有分析价值的数据了,今天我选了一个<掘金网>,我们去爬取一下他的全站用户数据. ...

  2. Python爬虫入门教程 38-100 教育部高校名单数据爬虫 scrapy

    爬前叨叨 今天要爬取一下正规大学名单,这些名单是教育部公布具有招生资格的高校名单,除了这些学校以外,其他招生的单位,其所招学生的学籍.发放的毕业证书国家均不予承认,也就是俗称的野鸡大学! 网址是 ht ...

  3. Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分

    1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...

  4. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分

    1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...

  5. Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy

    爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ...

  6. Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy

    爬前叨叨 2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我 ...

  7. 2019-03-22 Python Scrapy 入门教程 笔记

    Python Scrapy 入门教程 入门教程笔记: # 创建mySpider scrapy startproject mySpider # 创建itcast.py cd C:\Users\theDa ...

  8. Python基础入门教程

    Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...

  9. Python爬虫入门教程 2-100 妹子图网站爬取

    妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...

  10. Python爬虫入门教程 61-100 写个爬虫碰到反爬了,动手破坏它!

    python3爬虫遇到了反爬 当你兴冲冲的打开一个网页,发现里面的资源好棒,能批量下载就好了,然后感谢写个爬虫down一下,结果,一顿操作之后,发现网站竟然有反爬措施,尴尬了. 接下来的几篇文章,我们 ...

随机推荐

  1. Vim基础教程

    一.简介 世界上只有三种编辑器,EMACS.VIM和其它. 我们所处的时代是非常幸运的,有越来越多的编辑器,相对于古老的VIM和EMACS,它们被称为现代编辑器.我们来看看这两个古董有多大年纪了: * ...

  2. PAT 1072 开学寄语(20)(代码+思路)

    1072 开学寄语(20 分) 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面.理发.整衣, ...

  3. 用java创建UDF,并用于Hive

    典型代码如下: 导入UDF类: import org.apache.hadoop.hive.ql.exec.UDF; public class UpperCassUDF extends UDF{ pu ...

  4. cmake 头文件 库文件 链接库

    原文地址:http://www.cnblogs.com/binbinjx/p/5626916.html 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_direct ...

  5. debian中默认不存在sudo命令解决方法

    原创 2016年09月04日 21:44:14 5664 1.使用su安装sudo $su #apt-get install sudo 1 2 2.给账户设置管理员权限 #vim /etc/sudoe ...

  6. [Jmeter]通过批处理调用java,java从CSV动态读取登录的用户名和密码,并将其作为参数组合成字符串,写入外部.bat文件,然后通过Java执行这个外部批处理文件

    问题1:怎样通过批处理调用java代码? 问题2:怎样通过java从CSV文件获取到用户名和密码存入变量? 问题3:怎样将获取到的用户名和密码组合成字符串,写入外部批处理文件? 问题4:怎样在批处理文 ...

  7. jquery ajax请求方式与提示用户正在处理请稍等

    为了提高用户体验度,我们通常会给出 “正在处理,请稍等!”诸如此类的提示.我们可通过设置$.ajax()下的参数beforeSend()来实现 初次使用$.ajax() ,我没有去区分过ajax的异步 ...

  8. Django入门指南-第9章:静态文件设置(完结)

    http://127.0.0.1:8000 #下一步是告诉Django在哪里可以找到静态文件.打开settings.py,拉到文件的底部,在STATIC_URL后面添加以下内容: STATICFILE ...

  9. EXCEL 单元格引用问题

    =(SUM(INDIRECT("'2.5酒店预订收入'!"&"J"&MATCH(C21,'2.5酒店预订收入'!B:B,0)&" ...

  10. lpm_clshift ip仿真

    今天仿真了一下lpm_clshift ip 其中din为输入的信号,sh_out为输出的信号. 以上为IP的设置. 可以看到din 的00000010 对应的step的2,一个时钟后sh_out的输出 ...