爬取Google地图的商务、商户信息

本文介绍了如何爬取Google地图上的商户信息,包括利用非公开API接口进行搜索,设置参数如查询字符串、中心位置经纬度、搜索半径和页码。通过处理返回的JS代码中的JSON数据获取所需信息,并提供了处理大量数据的策略。代码示例中展示了如何按地图块进行爬取,并处理IP被封锁的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有问题可以联系我443144476

博客首页http://blog.youkuaiyun.com/dongmeng110

我们都知道目前在国内商户信息最全的莫过google了,具体多少数据量就不得而知了,前几天接到一个项目,好象是给移动弄商户数据,而且全部要带电话,收益很丰厚哦!可惜只要一个省的  要是要全国的  就发了

废话不多说 先介绍一下google的商户接口

声明一下,本文章涉及的所有接口都是从google web服务中截取出来的接口,非google开放的api接口

StringBuilder builder = new StringBuilder(

"http://ditu.google.cn/maps?output=js&q=");

builder.append(q);

builder.append("&sll=");

builder.append(lat_point);

builder.append(",");

builder.append(lng_point);

builder.append("&radius=");

builder.append(radius);

builder.append("&start=");

builder.append(start);

String url = builder.toString();

先介绍一个接口的url,前面不用说了地址   主要是参数  output指出我们需要js代码

q是要查询的字符,(推荐按照google的分类搜索里面的参数进行爬取,这样有利于以后整理分类,当然每个详细分类 还可以单独爬取 只需要每个商户的cid就好了)

sll指的是你要爬取的中心位置经纬度,google是根据一个中心位置加搜索半径来进行检索的

radius是半径   单位公里

start说的是页码,如果返回结果超过10个google会分页  也就是取完前10个之后需要继续取,但是有个事情要说明一下google只支持取前190条数据,一次搜索结果190条以后的是取不到的

那有人会问了,我们需要海量数据,如何办呢

其实也还算简单,只需要深入爬取就好了,举个简单算法(我就是这么用的),大家应该清楚google地图是分块的256×256的块,那我就按照块来爬取,如果一个块的返回结果超过190,我就把这个块放大了下一级的4个块,重新请求以此类推,就可以拿到所有的数据了

请求出来的结果就不贴了 一大段  js  里面有一个json串是包含的数据,不过比较复杂,处理起来比较麻烦,我也是弄了很久才弄好,都是把json转成了xml才容易  查看的,一会我直接 把代码贴上了  一般的网速大概一天 十万条数据没有问题  都带有经纬度,带电话的大概5分之一吧

特别说明的是 需要  频繁更换 ip,我的代码里面有  自动更换IP的接口,不过是  操作我本地路由的,如果有人真需要爬取的话,可以自己实现一个更换路由的方法,注意同步处理哦,如果google开始封锁IP多线程会几乎同时报错,所以要处理一下,只重启一次路由

下面是代码:

package com.mimo.proxy.gansu;

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URLEncoder;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import org.apache.commons.httpclient.methods.GetMethod;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.mimo.proxy.bdb.KeyDB;

import com.mimo.proxy.bdb.MapEnv;

import com.mimo.proxy.bean.BusinessBean;

import com.mimo.proxy.bean.HttpClientManager;

import com.mimo.proxy.dao.BusinessJdbc;

import com.mimo.proxy.google.GoogleMap;

public class Crawler implements Runnable {

private final Logger logger = LoggerFactory.getLogger(getClass());

private final KeyDB keyDB = MapEnv.getMapEnv().getKeyDB();

@Override

public void run() {

try {

Thread.sleep(2000);

handler(8, 194, 96);

handler(8, 194, 97);

handler(8, 195, 95);

handler(8, 195, 96);

handler(8, 195, 97

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值