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

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

有问题可以联系我443144476

博客首页http://blog.csdn.net/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

要使用Python爬取谷歌地图的国外街景照片,可以借助Google Street View Image API。以下是实现的大致步骤: 1. 首先,你需要在Google Cloud Platform上创建一个项目,并启用Street View Image API服务。 2. 在API管理页面的凭据部分,创建一个API密钥。 3. 在Python中安装requests库,可使用pip工具执行以下命令:`pip install requests`。 4. 通过发送HTTP请求,使用API密钥和所需的参数来获取国外街景照片的URL。可指定街道地址或经纬度坐标。 5. 解析返回的JSON数据,并提取照片的URL。 6. 使用Python的requests库下载街景照片。可将照片保存到指定的文件夹中,命名方式可以根据需求自定义。 示例代码如下: ```python import requests import json def download_street_view_image(api_key, location): url = f"https://maps.googleapis.com/maps/api/streetview" parameters = { "location": location, "size": "640x480", "key": api_key } response = requests.get(url, params=parameters) data = json.loads(response.text) if data["status"] == "OK": photo_url = data["image"] # 下载街景照片 r = requests.get(photo_url) filename = "street_view_image.jpg" # 自定义文件名 with open(filename, "wb") as file: file.write(r.content) print("照片下载完成!") else: print("无法下载照片。") # 使用API密钥和地点调用函数 api_key = "YOUR_API_KEY" # 替换为你的API密钥 location = "Paris, France" # 可替换为其他国外地点 download_street_view_image(api_key, location) ``` 以上就是使用Python爬取谷歌地图国外街景照片的简单方法。根据具体需求,你可以根据文档进一步了解API方法及其参数,并进行适当的更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值