| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 415 人关注过本帖
标题:怎样用VFP爬取全国40城5000地铁站点数据
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:887
专家分:3
注 册:2018-1-4
结帖率:97.5%
收藏
 问题点数:20 回复次数:10 
怎样用VFP爬取全国40城5000地铁站点数据
怎样用VFP爬取全国40城5000地铁站点数据,
生成Excel表格?具体字段有:站点名称  拼音名称 gd经度 gd纬度 路线名称 城市名称 行政区名称 bd经度 bd纬度
网页地址:http://map.
请高手赐教,万分感谢!!!
搜索更多相关主题的帖子: VFP 名称 点数 地址 http 
前天 10:14
foxfans
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:122
专家分:333
注 册:2021-10-23
收藏
得分:0 
你这是出题让人做吧,掌握之前别人教的,早就可以举一反三了。
前天 11:04
王咸美
Rank: 1
等 级:新手上路
帖 子:887
专家分:3
注 册:2018-1-4
收藏
得分:0 
以前看过别人用python爬取这个网站数据,觉得很有意思,可惜看不懂,不知vfp能否做到?没有其他意思。如有冒犯,敬请谅解!

[此贴子已经被作者于2025-11-29 11:20编辑过]

前天 11:15
foxfans
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:122
专家分:333
注 册:2021-10-23
收藏
得分:0 
回复 3楼 王咸美
就觉得很好奇,类似的问题,这么久了怎么还不会独立处理,未能用心理解别人花时间给你写的代码……
毫无头绪的问如同 抄代码 = 给人布置作业
图片附件: 游客没有浏览图片的权限,请 登录注册


前天 12:24
王咸美
Rank: 1
等 级:新手上路
帖 子:887
专家分:3
注 册:2018-1-4
收藏
得分:0 
兴趣所至,但水平有限,望见谅!
前天 12:32
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:383
专家分:937
注 册:2021-1-9
收藏
得分:0 
第一  你网址输入有误   正确应该是 http://map.
第二  如果今天能看到回复   试下下面的网址 一般来说是能搞定了
http://map.
http://map.
http://map.
前天 19:07
王咸美
Rank: 1
等 级:新手上路
帖 子:887
专家分:3
注 册:2018-1-4
收藏
得分:0 
不好意思!不小心输错一个字母。
正确网址为:http://map.

[此贴子已经被作者于2025-11-29 19:30编辑过]

前天 19:27
kangss
Rank: 8Rank: 8
等 级:贵宾
威 望:14
帖 子:387
专家分:897
注 册:2014-6-12
收藏
得分:0 
以下是引用王咸美在2025-11-29 19:27:59的发言:

不好意思!不小心输错一个字母。
正确网址为:http://map.

6楼那3个获取数据的网址是这么来的:浏览器控制台,也就是调试模式,按F12出来的。搞web、html时会用到
图片附件: 游客没有浏览图片的权限,请 登录注册
前天 20:06
hsfisher
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:187
专家分:131
注 册:2009-4-26
收藏
得分:0 
关注学习
3 小时前
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:327
专家分:2314
注 册:2023-6-29
收藏
得分:0 
写爬虫最强的就是python, 提供了很多很方便的库, 不过你如果用的xp那还是算了, 很多库xp不支持的,  下面是deepseek给出的代码, 测试没问题:
程序代码:
import requests
import json
from typing import Dict, List, Any

def get_chengdu_subway_data(url: str) -> Dict[str, Any]:
    """
    获取成都地铁数据
    
    Args:
        url: 数据接口URL
        
    Returns:
        解析后的JSON数据
    """
    try:
        # 设置请求头,模拟浏览器访问
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }
        
        # 发送GET请求
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()  # 如果请求失败会抛出异常
        
        # 解析JSON数据
        data = response.json()
        return data
        
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
        return {}
    except json.JSONDecodeError as e:
        print(f"JSON解析失败: {e}")
        return {}

def parse_subway_data(data: Dict[str, Any]) -> Dict[str, List[Dict]]:
    """
    解析地铁数据
    
    Args:
        data: 原始地铁数据
        
    Returns:
        结构化的地铁线路信息
    """
    if not data:
        return {}
    
    result = {
        'lines': [],
        'stations': []
    }
    
    # 提取基本信息
    city_name = data.get('s', '')
    city_code = data.get('i', '')
    
    print(f"城市: {city_name} (代码: {city_code})")
    print("=" * 50)
    
    # 解析线路信息
    lines = data.get('l', [])
    
    for line in lines:
        line_info = {
            'line_name': line.get('ln', ''),
            'line_name_en': line.get('kn', ''),
            'line_color': line.get('cl', ''),
            'line_status': line.get('su', ''),
            'stations': []
        }
        
        # 解析站点信息
        stations = line.get('st', [])
        for station in stations:
            station_info = {
                'station_id': station.get('si', ''),
                'station_name': station.get('n', ''),
                'station_name_en': station.get('sp', ''),
                'coordinates': station.get('sl', ''),
                'position': station.get('p', ''),
                'is_transfer': station.get('t', '0') == '1',  # 是否为换乘站
                'transfer_lines': station.get('r', '').split('|') if station.get('r') else [],
                'status': station.get('su', '')
            }
            line_info['stations'].append(station_info)
        
        result['lines'].append(line_info)
        
        # 打印线路信息
        print(f"线路: {line_info['line_name']} ({line_info['line_name_en']})")
        print(f"颜色: {line_info['line_color']}")
        print(f"站点数量: {len(line_info['stations'])}")
        print("站点列表:")
        for i, station in enumerate(line_info['stations'], 1):
            transfer_flag = " (换乘站)" if station['is_transfer'] else ""
            print(f"  {i:2d}. {station['station_name']}{transfer_flag}(经纬:{station['coordinates']})")
        print("-" * 30)
    
    return result

def get_station_transfer_info(data: Dict[str, Any]) -> Dict[str, List[str]]:
    """
    获取换乘站信息
    
    Args:
        data: 原始地铁数据
        
    Returns:
        换乘站及其对应的线路
    """
    transfer_stations = {}
    
    lines = data.get('l', [])
    
    for line in lines:
        line_name = line.get('ln', '')
        stations = line.get('st', [])
        
        for station in stations:
            if station.get('t', '0') == '1':  # 换乘站
                station_name = station.get('n', '')
                if station_name not in transfer_stations:
                    transfer_stations[station_name] = []
                if line_name not in transfer_stations[station_name]:
                    transfer_stations[station_name].append(line_name)
    
    return transfer_stations

def main():
    # 成都地铁数据URL
    url = "http://map./service/subway?_1764553326419&srhdata=5101_drw_chengdu.json"
    
    print("正在获取成都地铁数据...")
    
    # 获取数据
    data = get_chengdu_subway_data(url)
    
    if not data:
        print("未能获取到数据")
        return
    
    # 解析数据
    parsed_data = parse_subway_data(data)
    
    # 获取换乘站信息
    transfer_info = get_station_transfer_info(data)
    
    # 打印换乘站信息
    print("\n换乘站信息:")
    print("=" * 50)
    for station, lines in transfer_info.items():
        print(f"{station}: {', '.join(lines)}")
    
    # 保存解析后的数据到文件(可选)
    try:
        with open('chengdu_subway_data.json', 'w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=2)
        print(f"\n原始数据已保存到: chengdu_subway_data.json")
        
        with open('chengdu_subway_parsed.json', 'w', encoding='utf-8') as f:
            json.dump(parsed_data, f, ensure_ascii=False, indent=2)
        print(f"解析数据已保存到: chengdu_subway_parsed.json")
    except Exception as e:
        print(f"保存文件时出错: {e}")

if __name__ == "__main__":
    main()
核心代码都有了, 想怎么使用数据, 稍微改造即可
57 分钟前
快速回复:怎样用VFP爬取全国40城5000地铁站点数据
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.065333 second(s), 11 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved