Python 爬取经纬度

爬取GPSspg查询网

import requests, re
from urllib import parse
def query(region):
    header = {'User-Agent': 'Opera/8.0 (Windows NT 5.1; U; en)'}
    url = 'http://apis.map.qq.com/jsapi?'
    data = {
        'qt': 'poi',
        'wd': region,
        'pn': 0,
        'rn': 10,
        'rich_source': 'qipao',
        'rich': 'web',
        'nj': 0,
        'c': 1,
        'key': 'FBOBZ-VODWU-C7SVF-B2BDI-UK3JE-YBFUS',
        'output': 'jsonp',
        'pf': 'jsapi',
        'ref': 'jsapi',
        'cb': 'qq.maps._svcb3.search_service_0'}
    coordinate_url = url + parse.urlencode(data)
    r = requests.get(coordinate_url, headers=header)
    longitude = re.findall('"pointx":\s*"(.+?)"', r.text)[0]
    latitude = re.findall('"pointy":\s*"(.+?)"', r.text)[0]
    print([region, longitude, latitude])
query('佛山南海')
打印结果
[‘佛山南海’, ‘113.142780’, ‘23.028820’]

爬取百度地图拾取坐标系统

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re, pandas as pd
def coordinate(site):
    # 创建浏览器驱动对象
    driver = webdriver.Firefox()
    driver.get('http://api.map.baidu.com/lbsapi/getpoint/index.html')
    # 显式等待,设置timeout
    wait = WebDriverWait(driver, 9)
    # 判断输入框是否加载
    input = wait.until(
        EC.presence_of_element_located(
            (By.CSS_SELECTOR, '#localvalue')))
    # 判断搜索按钮是否加载
    submit = wait.until(
        EC.element_to_be_clickable(
            (By.CSS_SELECTOR, '#localsearch')))
    # 输入搜索词,点击搜索按钮
    input.clear()
    input.send_keys(site)
    submit.click()
    # 等待坐标
    wait.until(
        EC.presence_of_element_located(
            (By.CSS_SELECTOR, '#no_0')))
    # 获取网页文本,提取经纬度
    source = driver.page_source
    xy = re.findall('坐标:([\d.]+),([\d.]+)', source)
    # 转浮点数,取中位数
    df = pd.DataFrame(xy, columns=['longitude', 'latitude'])
    df['longitude'] = pd.to_numeric(df['longitude'])
    df['latitude'] = pd.to_numeric(df['latitude'])
    longitude = df['longitude'].median()
    latitude = df['latitude'].median()
    # 关闭浏览器驱动
    driver.close()
    return [longitude, latitude]
print(coordinate('南海桂城地铁站'))
打印结果
[113.1611575, 23.044811000000003]
### 使用Python爬虫从链家网获取二手房地理坐标 为了实现这一目标,可以采用如下方法: #### 1. 爬虫准备阶段 在开始之前,确保安装了必要的库。通常情况下,`requests` 和 `BeautifulSoup` 是用来发送HTTP请求并解析HTML页面的好帮手;而处理JavaScript渲染的内容,则可能需要用到Selenium这样的工具。 对于链家这类现代网站,很多数据可能是通过AJAX动态加载的,因此直接查看网页源码中的静态内容未必能找到所需的数据。此时应该考虑使用浏览器开发者工具来跟踪网络请求,找到实际返回房源详情(包括经纬度)的API接口[^1]。 ```bash pip install requests beautifulsoup4 selenium ``` #### 2. 获取登录态与反爬机制应对 一些房产平台会对频繁访问做出限制措施,比如验证码验证、IP封禁等。针对这种情况,在编写爬虫前要研究其防爬策略,并采取相应对策,如设置合理的延时、模拟正常用户的浏览行为模式或是利用代理池轮换IP地址。 另外值得注意的是,如果涉及个人信息保护或商业机密的信息采集活动,请务必遵循法律法规的要求,尊重隐私权和版权规定。 #### 3. 数据提取逻辑设计 一旦确定了能够稳定获取到包含经纬度信息的目标URL之后,就可以着手构建具体的解析流程了。下面给出一段简单的伪代码作为参考: ```python import json from bs4 import BeautifulSoup as soup import requests def get_house_data(url, headers): response = requests.get(url=url, headers=headers) if response.status_code != 200: raise Exception('Failed to load page {}'.format(response.status_code)) data = json.loads(response.text) house_listings = [] for item in data['data']['list']: listing = { "title": item["title"], "latitude": float(item["lat"]), "longitude": float(item["lng"]) } house_listings.append(listing) return house_listings ``` 这段代码假设已经找到了一个可以直接获得JSON格式响应体内的房屋列表及其对应的经纬度字段的API端点。请注意替换其中的具体参数以匹配实际情况下的调用需求。 #### 4. 结合第三方地图服务增强功能 考虑到某些时候原始抓取回来的位置描述不够精确或者想要进一步加工这些地理信息的话,还可以借助像高德地图这样的在线地图服务商提供的开放API来进行二次开发。例如,可以通过输入地址字符串查询得到更详细的定位结果,甚至完成不同坐标系之间的相互转换操作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值