JAVA实现美团电影价格抓取(附代码)

各位老大好,我是烤鸭:

最近在研究爬虫,看到有意思的是美团的电影票价,普通的抓取是抓不到的。

例如网址:http://bj.meituan.com/shop/105355906?mtt=1.movie/cinemalist.0.0.j8oaf2un(当你打开403或者404的话,美团的这个网址每次刷新都会变。你可以访问这个,http://bj.meituan.com/shop/105355906,找个影片就行。

打开如图:

图片有点看不清,没关系,如果你也在研究爬虫,可能会跟我有一样的疑问,这种怎么实现,又怎么破解。

1.分析网页

普通的爬虫抓取,只要找到的特定的标签,抓取其中的内容就可以了。但是有一些比较敏感的数据,网页会做处理,比如价格,或者视频资源之类的。
 视频一般的处理方式是blob二进制,存的数据就是二进制,取出来的时候浏览器可以解析,具体的实现我也不清楚。

举个例子:

http://finance.gaodun.cn/cfapeixun/33049.html

他的视频路径就是blob的。

       

而拿美团来说。我们检查这个价格,发现是i标签里引入一张背景图片,用postion来调整刚好暴露出来的数字就是价格。知道实现方式就简单了,就可以对症下药了。

2.解析元素

复制价格的图片i标签的内容。
background-image:url(//s0.meituan.net/bs/file/?f=fewww:/www/css/si/pricesp/12/25a711bd77.png@4344444);background-position: 0px -26px;
注意每一次打开网页,图片url都是新的,一次请求抓取这个页面的全部数据,不要分次请求。
上面的background-image的url如图。

3.破解图片

这一步是最复杂的。我用的是开源的工具tesseract-ocr。
附上github地址: https://github.com/tesseract-ocr/tesseract
各个版本下载地址: https://github.com/tesseract-ocr/tesseract/tags
说下思路,如果你用这个工具直接读取这张图片,是100%都不出来的,因为图片分辨率太小,每个数字占的位置也小。
我想的是最好的就是显示什么价格,我就截取那个价格的数字,这样肯定能够解析出来。问题来了,怎么取到这个位置。
再看一下i标签。
background-position: 0px -26px;
试着调整位置,不难发现规律,图片是x,y轴,0,-26:x轴0,y轴-26。

知道怎么弄,就开始做吧。
安装tesseract-ocr,不会安装的看这个地址吧。

https://www.cnblogs.com/jianqingwang/p/6978724.html。

下载exe正常安装,配置环境变量。


说一下tessdata文件夹,里边装的是各种训练库。eng代表英文和数字。chs是中文,
但是中文支持不太友好。其他的库自己下载去吧。我用的eng够用。

截一张安装成功的图。

tesseract -v 

查看安装版本


4.最后一步。开始代码!

之前也说了,每次刷新的价格图片都是新的,所以我下边演示图片的可能和上边的不一样。
先上一张识别结果,是我刚试过的:

这个价格是1,postion是0,-52。


操作就是按照之前的思路,把这个图片截取放大,再识别,因为截取的时候没法精确到个位数,所以只能截取一行来根据位置识别。右边的图片就是截取之后的。
不敢说正确率,只是尝试了几个,以上所有内容仅供技术交流,希望大家不要用到其他地方。

最后附上源码地址:
http://download.csdn.net/download/angry_mills/10143366

上面有些截图可能不是很清楚,没关系,原理懂了就可以,代码下载实践一下,欢迎交流。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用jieba和wordcloud进行中文分词并生成《悲伤逆流成河》词云

因为词云有利于体现文本信息,所以我就将那天无聊时爬取的《悲伤逆流成河》的评论处理了一下,生成了词云。 关于爬取影评的爬虫大概长这个样子(实际上是没有爬完的): #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2018/10/15 16:34 # Auth…

jqweui的picker动态加载数据

大家好&#xff0c;我是烤鸭&#xff1a; jqweui的picker动态加载数据 jqweui是jquery对weui的拓展开发,picker就是其中的一个拓展组件&#xff0c; 1. 先附上官网显示地址和代码&#xff1a; http://jqweui.com/extends#picker <input type"text" idpicker/&g…

vue省市区三级联动mysql,js/json,html/jsp

大家好&#xff0c;我是烤鸭&#xff1a; 省市区三级联动数据及页面&#xff1a; 测试的时候&#xff0c;发现少了几个地区&#xff0c;现在补上了&#xff0c;也优化了下排版。 如果你懒得复制和看的话&#xff0c;这里是打包的下载地址。 之前的资源地址也改了&#xff0…

UI自动化之读取浏览器配置

以火狐浏览器为例 目录 1、找到配置项 2、读取配置 1、找到配置项 打开Firefox点右上角设置>&#xff1f;&#xff08;帮助&#xff09;>故障排除信息>显示文件夹&#xff0c;复制文件管理器地址栏 2、读取配置 用FirefoxProfile() 方法读取配置&#xff0c;然后再加载…

通过cmd命令,杀掉占用端口号的进程

错误问题&#xff1a;【Error running public: Unable to open debugger port (127.0.0.1:53110): java.net.BindException "Address already in use: JVM_Bind"】 解决步骤&#xff1a; 1&#xff09;netstat -aon|findstr 53110 此处的53110 根据自己错误中提示的…

解决使用adb卸载应用失败的问题

昨天使用adb命令成功安装了应用&#xff0c;但是在卸载时却报错&#xff0c;卸载失败&#xff0c;如下图&#xff1a; 然后我找了找原因&#xff0c;觉得可能是包名以及路径的原因&#xff0c; 于是就先把手机上的应用都打印出来看下&#xff0c; 列出手机装的所有app的包名&am…

linux安装docker部署java项目

大家好&#xff0c;我是烤鸭&#xff1a; 分享一下linux上部署docker的javaweb项目 1.环境 linux centos 7.2 64-bit 系统 kernel 3.10 查看版本号 &#xff1a; uname -r 大于3.10即可 2.安装docker 这里是官网安装教程 https://docs.docker.com/engine/installation/…

Java面试题谷歌插件

该插件可以让您在做WEB开发的同时&#xff0c;也可以去学习一些理论知识&#xff0c;加深你的技术。 随机题&#xff1a;每次点开插件&#xff0c;从题库中随机筛选出的题 当前题&#xff1a;是桌面通知的题目&#xff0c;每三分钟随机发送一次桌面通知 追加题&#xff1a;向…

Apache Curator之分布式锁原理(二)

本文主要讲解如下内容&#xff1a; 为什么要使用分布式锁&#xff1f;分布式锁特性&#xff01;分布式锁的实现方式有哪些&#xff1f;Curator分布式锁原理Curator分布式锁实现类UML及相关类的介绍基于Redis&#xff0c;数据库实现分布式锁为什么要使用分布式锁&#xff1f; 在…

阿里云服务器发送邮件失败?连接超时?25端口被封?

大家好&#xff0c;我是烤鸭&#xff1a; 之前用阿里云服务器的时候发送126企业邮箱&#xff0c;用的smtp方式&#xff0c;但是一直超时。百思不得其解。因为在本地环境是可以的。 原来是阿里云服务器限制了25端口。问了126邮箱那边的技术客服&#xff0c;只支持25端口。 问了…

springboot版的微信公众号,订阅号

大家好&#xff0c;我是烤鸭&#xff1a; 这是一篇微信公众号入门的文章&#xff0c;如果是个人的话&#xff0c;只能申请未认证的订阅号。如果是公司的话&#xff0c;想申请啥都是可以的。 这篇文章说的就是个人订阅号。 环境: centos 7.3 springboot 1.5 需要&#xff…

Javascript报错Failed to execute ‘querySelectorAll‘ on ‘Document‘: ‘#123456‘ is not a valid sele

Javascript报错&#xff1a;Failed to execute ‘querySelectorAll’ on ‘Document’: ‘#123456’ is not a valid selector 解决方式(除开特殊符号,第一个字符必须是字母)&#xff1a; 第一种&#xff1a; 将ID前面加字母&#xff0c;例如&#xff1a;document.querySelect…

pycharm创建django项目linux部署

大家好&#xff0c;我是烤鸭&#xff1a; pytho部署web项目比java简单一点&#xff0c;虽然springboot内置了tomcat。 环境&#xff1a; pycharm专业版python3.6 1.安装python python下载&#xff1a;https://www.python.org/downloads/ 我使用的3.6版本 2.配置环境变量 path目…

利用Android Studio快速搭建App

大家好&#xff0c;我是烤鸭: 给大家分享一个简单的用Android Studio快速搭建app 工具&#xff1a;Android Studio 64位 专业版 插件:Datepicker Timepicker okhttp 实现需求&#xff1a;界面上选择时间&#xff0c;发get/post请求到后台&#xff0c;获取选择的时间。1.修改And…

springboot多环境加载yml和logback配置

大家好&#xff0c;我是烤鸭&#xff1a;这是一篇关于springboot多环境加载yml和logback配置文件。环境&#xff1a;开发工具 idea(推荐)/eclipse(对yml支持不好)jdk 1.8springboot 1.5.6.RELEASE 1. yml和logback文件1.1 结构,如图所示&#xff1a;1.2 application.yml (默…

汇编实验二

》实验结论 1.使用Debug将下面的程序写入内存&#xff0c;逐条执行&#xff08;见1-1&#xff09;&#xff0c;根据指令执行后的实际情况填空&#xff08;见1-2&#xff09; p.s. 已经按实验要求将使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H…

springboot中的拦截器interceptor和过滤器filter,多次获取request参数

大家好&#xff0c;我是烤鸭&#xff1a; 这是一篇关于springboot的拦截器(interceptor)和过滤器(Filter)。 先说一下过滤器和拦截器。区别&#xff1a;1. servlet请求&#xff0c;顺序&#xff1a;Filter ——> interceptor。2. Filter的作用是对所有进行过滤&#xff…

利用cookies跳过登陆验证码

前言在爬取某些网页时&#xff0c;登陆界面时经常遇到的一个坎&#xff0c;而现在大多数的网站在登陆时都会要求用户填写验证码。当然&#xff0c;我们可以设计一套机器学习的算法去破解验证码&#xff0c;然而&#xff0c;验证码的形式多种多样&#xff0c;稍微变一下&#xf…

[Swift]八大排序算法(八):基数排序

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/ &#xff09;➤GitHub地址&…

推一波JAVA学习公众号

大家好&#xff0c;我是烤鸭&#xff0c;今天不水了。分享一波java学习公众号。从基础到架构都有&#xff0c;另外说一句&#xff0c;注意身体吧。另外说一句&#xff0c;本文不定时更新。1. JAVA思维导图2. 程序员小灰可爱的小仓鼠3. 码农每日一题4. JAVA后端技…