Python爬虫入门教程 65-100 爬虫与反爬虫的修罗场,点评网站,字体反爬之三
2019-04-30 14:39
579 查看
爬虫与反爬虫的修罗场
哪种平台最吸引爬虫爱好者,当然是社区类的,那里容易产生原生态,高质量的数据啊,
你看微博,知乎,豆瓣爬的不亦乐乎。
评论也是产生内容的好地方
生活类点评网站
旅游类点评网站
音乐类点评
只要有点评的地方,总有成千上万的爬虫趴着。
这些都是爬虫与反爬虫的修罗场,他不想叫你爬,你越想爬
对他是核心数据,对你也是核心数据
今天要分析的网站
今天我们弄一下
大众点评
学习阶段,我们要抱着学习的目的
重点是思路,做爬虫就不要想着一劳永逸了
方法公开,人家就换了
知识是你自己的,学到了,他换不掉
好了,我们开始吧
网站展示
- https://www.dianping.com/search/keyword/24/0_%E4%B8%87%E8%BE%BE%E5%B9%BF%E5%9C%BA
what?! 数字是图片
打开svg图片,看看猫腻
按照咱爬虫的经验分析
必然是css实现了图片的定位,显示的局部
简单,手撕代码
走起
我们如何搞定这些定位呢?
简单啊,查找突破口
DOM长成这个样子
[code]<b> <svgmtsi class="zrvm6"></svgmtsi> <svgmtsi class="zrpoc"></svgmtsi> </b>
zrvm6对应的是哪个数字呢?
坐标在着
[code].zrvm6 { background: -103.0px -116.0px; }
那是不是拿到所有的坐标就可以了?
必然是的
打开网页源文件
找啊~找啊,找朋友
咦?
这么耿直的么?
这是在鄙视我们爬虫工程师么
还是告诉我,此地无银
秀啊,找到了
接下来,敲黑板
如何从
<svgmtsi class="zrvm6"></svgmtsi>得到数字
6呢
第一步,我要打rap
额,不,我要获取css
为了加速,我写重要步骤了
你只需要这样,这样,就抓取到了
哈哈哈
关键代码
重要的注释,我已经添加好了
[code]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,搞定
[code][('456', '849')]
接下来,你在这样,这样,over
坐标拿到了,下面要对应到svg里面
svg是有规律的,让我们看一下吧
横坐标,12的倍数,纵坐标分别是49,90,140,这个应该也是动态的,批量抓取的时候注意
[code]# 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]
补全解析过程
[code]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])
[code]09682953461602125891507990058105385628648915741477 54883192734856091073652293607343306967545493213422 24700621614898877713 zrvm6的坐标是 103 116 svg图片对应的数字: 6
ok,搞定了,要的就是这个feel
得到数字6,回去一看
哦,果然是6
666
相关文章推荐
- Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
- Python爬虫入门教程 54-100 博客园等博客网站自动评论器
- Python爬虫入门教程 2-100 妹子图网站爬取
- Python爬虫入门教程 5-100 27270图片爬取
- Python爬虫入门教程 55-100 python爬虫高级技术之验证码篇
- Python爬虫入门教程 16-100 500px摄影师社区抓取摄影师数据
- Python爬虫入门教程 17-100 博客抓取数据
- Python爬虫入门教程 49-100 Appium安装+操作51JOB_APP(模拟手机操作之一)手机APP爬虫
- Python爬虫入门教程 11-100 行行网电子书多线程爬取
- Python爬虫入门教程 57-100 python爬虫高级技术之验证码篇3-滑动验证码识别技术
- Python爬虫入门教程 10-100 图虫网多线程爬取
- Python爬虫入门教程 24-100 微医挂号网医生数据抓取
- Python爬虫入门教程 18-100 煎蛋网XXOO图片抓取
- Python爬虫入门教程 14-100 All IT eBooks多线程爬取
- Python爬虫入门教程 56-100 python爬虫高级技术之验证码篇2-开放平台OCR技术
- Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照
- Python爬虫入门教程 25-100 知乎文章图片爬取器之一
- Python爬虫入门教程 4-100 美空网未登录图片爬取
- Python爬虫入门教程 10-100 图虫网多线程爬取!
- Python爬虫入门教程 26-100 知乎文章图片爬取器之二