Java爬虫,Jsoup 爬取大众点评、美团商家信息电话号码解决方案

JSON 2019-05-14 16:04:52 33923

今天有群内有同学问怎么爬取大众点评商家信息,尤其是电话号码,我看了下。发现是反爬虫的。

警告:本代码只是一个学习Demo,不能作为侵权或者违规行为。使用或者间接使用本博客内容做违规违法事情,与本人无关,继续观看表示同意。

分析大众点评Dom信息


从百度快照分析大众点评

使用了一种常见的方式,用自定义字符来解决,你抓取后是乱码的内容。但是我立马想到,这种网站肯定要做  SEO  的,所以从百度搜索了下链接。查看了下快照。


打开百度快照,再看看  HTML  源码。


这个时候最好右键查看源码,然后搜索一下,因为有的内容是异步(  JavaScript  )输出。这里我就不上图了,因为我知道百度快照不会有这些问题。

Jsoup 从百度快照抓取“大众点评”信息

直接上代码了,采用的是  Jsoup  ,这个需要效率,并发等等,请自己解决,这个只是一个栗子。

思路为:先获取百度快照—> 请求百度快照—>获取内容

public static void main(String[] args) throws IOException {

    //商家ID
    String id = "103615462";
    System.out.println(loadInfo(id));

}

public static Map<String,Object> loadInfo(String id)throws IOException{
    String ua = "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)";

    String firstURl = "https://www.baidu.com/s?cl=3&wd=http%3A%2F%2Fwww.dianping.com%2Fshop%2F" + id;
    Map<String,Object> resultMap = new HashMap<>();

    //回去百度快照链接
    Document doc = Jsoup.connect(firstURl)
            .header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3")
            .header("Accept-Encoding","gzip, deflate")
            .header("Accept-Language","zh-CN,zh;q=0.9,en;q=0.8")
            .header("Cache-Control","no-cache")
            .header("Pragma","no-cache")
            .header("Proxy-Connection","keep-alive")
            .header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36")
            .get();

    String url = doc.select("#content_left [data-click=\"{'rsv_snapshot':'1'}\"]").attr("href");
    //如果没有就是百度没有收录
    if(null != url &&  !"".equals(url.trim())){
        //请求百度快照
        doc = Jsoup.connect(url)

                .header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3")
                .header("Accept-Encoding","gzip, deflate")
                .header("Accept-Language","zh-CN,zh;q=0.9,en;q=0.8")
                .header("Cache-Control","no-cache")
                .header("Pragma","no-cache")
                .header("Proxy-Connection","keep-alive")
                .header("User-Agent",ua)
                .header("Referer",firstURl)
                .get();


        String shopname = doc.select(".shop-name").text();
        String address = doc.select(".expand-info.address").text();
        String tel = doc.select("p.expand-info.tel").text();

        //店铺名称
        resultMap.put("shopname",shopname);
        //店铺地址
        resultMap.put("address",address);
        //店铺电话
        resultMap.put("tel",tel);
        //TODO 需要其他信息自己取
    }
    return resultMap;
}

结果:

{
	"address": "地址: 湘江北路江滨社区附10号47栋3-4单元1楼门面",
	"shopname": "谭记宁乡蛇城(湘江世纪城店)",
	"tel": "电话: 15388907298   0731-89913008"
}

有的时候还是有乱码,因为回源了。这个自己测试调优。

缺点:只有百度收录了才能获取的到信息,不过这个应该没关系,大众点评基本是秒收录。

优点:和大众点评完全没关系,它意识不到你再爬取信息,因为你是请求百度,但是百度是没有限制的。

请塑造正确价值观,尊重版权,尊重他人劳动成果。


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/326.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser
JSOUP 教程,JSOUP爬虫教程,JSOUP超时分析与处理
Java 文字转图片输出,Java 输出透明背景图片,Java文字转图片防爬虫
Java百度云观测对网站的检测数据,获子域名及域名的安全信息
Java API接口返回不是JSON的解决方案,SpringMVC返回JSON配置。
JSOUP教程,JSOUP 乱码处理,JSOUP生僻字乱码解决方案
robots协议解读和作用(学习爬虫必看)
阿里云 RDS Specified key was too long; max key length is 767 bytes 解决方案
Jsoup 提交参数乱码,解决思路,解决过程及解决方案
使用zxing解析二维码抛出com.google.zxing.NotFoundException 解决方案
最新文章
文件上传漏洞与防御 4058
前端构建工具选型指南:Webpack、Vite、Rollup、esbuild 深度对比 1444
物联网时代2026年时序数据库选型指南 1151
SaaS行业面临AI挑战:从“无限复用”到“灵活适应” 1269
神经网络:从构造到模型训练全链路解析 1168
一文吃透 Redis 核心存储结构:ziplist、listpack 与哈希表扩容 / 并发查询 1593
Linux sudo提权完整指南:从基础用法到生产级安全配置 691
XSS 和 CSRF 的本质区别及开发防御全解析 772
JVM垃圾回收(GC)全维度解析:从原理到调优实战 813
Linux动静态库与ELF加载全解析:从实操制作到底层原理 912
最热文章
免费天气API,天气JSON API,不限次数获取十五天的天气预报 783114
最新MyEclipse8.5注册码,有效期到2020年 (已经更新) 711464
苹果电脑Mac怎么恢复出厂系统?苹果系统怎么重装系统? 679993
Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明 562673
我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比 512621
Elasticsearch教程(四) elasticsearch head 插件安装和使用 484794
Jackson 美化输出JSON,优雅的输出JSON数据,格式化输出JSON数据... ... 302947
Java 信任所有SSL证书,HTTPS请求抛错,忽略证书请求完美解决 247433
Elasticsearch教程(一),全程直播(小白级别) 233097
谈谈斐讯路由器劫持,你用斐讯路由器,你需要知道的事情 228329
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...