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一下,结果,一顿操作之后,发现网站竟然有反爬措施,尴尬了. 接下来的几篇文章,我们 ...
随机推荐
- [leetcode]228. Summary Ranges区间统计
Given a sorted integer array without duplicates, return the summary of its ranges. Example 1: Input: ...
- mockito使用
mockito学习资料: http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html http://blog.csdn.net/sdy ...
- 使用jsonp跨域发送请求
如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型. 使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面. ...
- 779A Pupils Redistribution
/* A. Pupils Redistribution time limit per test 1 second memory limit per test 256 megabytes input s ...
- TPM、read counts、RPKM/FPKM你选对了吗?
TPM.read counts.RPKM/FPKM你选对了吗? 已有 3940 次阅读 2017-12-15 15:04 |个人分类:RNA-seq|系统分类:科普集锦|关键词:RNA-seq| RN ...
- 80% UI 初学者走过的弯路,你走了几条?
关于UI 对于初学UI设计的人而言,可能对UI具体是做什么,或者自己是否能顺利转行胜任这样的岗位存在一定的顾虑,今天我们就来重点说说UI是做什么的,以及学UI到有哪些需要避免的弯路. 1.UI设计是做 ...
- [BAT]通过schtasks.exe远程调用windows 2008 server上的计划任务,提示ERROR : Access is denied
在windows 2008 server 上建了一个计划任务,想通过命令 schtasks /run /tn "IPADForAdvisor_QA_APITest" /s SZPC ...
- Linux编程规范
1)在使用C语言进行编程时,源文件都必须加---文件头 /******************************************************** *文件名:test.c *创 ...
- 【JDBC】jdbc原理总结
1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库 ...
- 2018.10.19 NOIP训练 桌子(快速幂优化dp)
传送门 勉强算一道dp好题. 显然第kkk列和第k+nk+nk+n列放的棋子数是相同的. 因此只需要统计出前nnn列的选法数. 对于前mmm%nnn列,一共有(m−1)/n+1(m-1)/n+1(m− ...