鱼C论坛

 找回密码
 立即注册
查看: 2454|回复: 10

[已解决]打开地图的问题

[复制链接]
发表于 2021-7-7 10:33:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import webbrowser, sys, pyperclip
if len(sys.argv) > 1:
    address = ' '.join(sys.argv[1:])
else:
    address = pyperclip.paste()

webbrowser.open('map.baidu.com/search/' + address)


这个程序,是想从百度地图上打开“北京市东城区天坛东里甲1号”这个地址。
命令行运行截图也一起发上来了。
如果命令行参数里的地址长度大于1,证明里边有地址。直接打开。
反之,从剪贴板里复制地址并打开。

运行结果只是打开了百度地图,并没有进行搜索。
这是什么原因呢?
最佳答案
2021-7-18 12:05:56
江湖散人 发表于 2021-7-18 09:24
不好意思啊,我自学的python时间不长,很多东西都没接触到,确实没看懂。
searchurl和head我都看不懂, ...

还没学多少就开始整这有难度的啊

sys.argv   是一个字符串数组,在python里就是str的list   字符串列表

它的第一个( sys.argv[0] ) 就是你当前运行的文件
假设 你有个 python文件叫  test.py  里面的内容为
print(sys.argv[0])
那么他打印出的就是 test.py 这个文件的绝对路径
所以说  sys.argv[0] 是固定的  当前文件的绝对路径
接受的参数 一般是从第2个开始,空格分割每个参数
1.png

先说head,打开你的chrome(没有的话,安装一下)
F12开发者模式     然后随便进个网页
后面的步骤都在图片里
2.png
3.png
截图1.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-7 11:36:24 | 显示全部楼层
百度地图的搜索没那么简单,再仔细分析下提交的表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-7 16:47:59 | 显示全部楼层
yuxijian2020 发表于 2021-7-7 11:36
百度地图的搜索没那么简单,再仔细分析下提交的表

确实没有那么简单。即使我把命令行参数搞定了,也还是打不开。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-7 17:09:29 | 显示全部楼层
不知道你分析出来没
我这给你一个解决方法
首先
用下面的网址 + 你要搜索的地址
https://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd={这里是你要搜索的地址}

先获取到这个网页的内容,然后使用json解析,找到内容中包含的 point 键值对
拿到 x 和 y

然后再用浏览器打开下面的网址

https://map.baidu.com/search/{你要搜索的地址}/@{上面获取到的 x }, {上面获取到的 y }

搞定收工

1.png

2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-17 22:30:29 | 显示全部楼层
yuxijian2020 发表于 2021-7-7 17:09
不知道你分析出来没
我这给你一个解决方法
首先

谢谢你啊,花费这么多时间考虑,不过你这不是我想要的结果,我想要的是直接通过程序打开搜索页,不在需要我再用浏览器去打开。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 01:38:11 | 显示全部楼层
江湖散人 发表于 2021-7-17 22:30
谢谢你啊,花费这么多时间考虑,不过你这不是我想要的结果,我想要的是直接通过程序打开搜索页,不在需要 ...

我晕  我都说这么明白了  你还没懂吗?

webbrowser.open(https://map.baidu.com/search/{你要搜索的地址}/@{上面获取到的 x }, {上面获取到的 y })

非得把代码拍你脸上吗?
import requests         # 用于获取 x y 坐标
import webbrowser       # 用于最后使用默认浏览器打开网页
import sys              # 用于获取参数,退出程序

if __name__ == '__main__':
    # 判断参数
    if len(sys.argv) < 2:
        sys.exit(0)
    # 拼接URL
    searchUrl = 'https://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd='
    searchUrl += sys.argv[1]
    # 拼接请求头
    head = {
        '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'
    }
    # 请求网页数据
    response = requests.get(searchUrl, headers=head)
    response.encoding = 'utf-8'
    # print(response.text)
    # 转为json
    content = response.json()
    # 找到藏在json中的坐标
    x = content['content']['ext']['detail_info']['point']['x']
    y = content['content']['ext']['detail_info']['point']['y']
    # 重新拼接url访问百度地图
    url = 'https://map.baidu.com/search/' + sys.argv[1] + '/@' + str(x) + ',' + str(y)
    # 使用默认浏览器打开网页
    webbrowser.open(url)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-18 09:24:07 | 显示全部楼层
yuxijian2020 发表于 2021-7-18 01:38
我晕  我都说这么明白了  你还没懂吗?

webbrowser.open(https://map.baidu.com/search/{你要搜索的地 ...

不好意思啊,我自学的python时间不长,很多东西都没接触到,确实没看懂。
searchurl和head我都看不懂,这两个是怎么来的?
还有你这坐标是怎么找出来的,当我第一眼看到你的图片的时候,就懵圈了,根本不知道怎么下手。能讲讲你的思路吗?
还有就是我一直搞不明白的就是sys.argv这个命令行参数,他是怎么回事?如何设置这里边的参数?
我觉得你理解问题应该比较透彻,所以还请你帮我答疑解惑一下。谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 12:05:56 | 显示全部楼层    本楼为最佳答案   
江湖散人 发表于 2021-7-18 09:24
不好意思啊,我自学的python时间不长,很多东西都没接触到,确实没看懂。
searchurl和head我都看不懂, ...

还没学多少就开始整这有难度的啊

sys.argv   是一个字符串数组,在python里就是str的list   字符串列表

它的第一个( sys.argv[0] ) 就是你当前运行的文件
假设 你有个 python文件叫  test.py  里面的内容为
print(sys.argv[0])
那么他打印出的就是 test.py 这个文件的绝对路径
所以说  sys.argv[0] 是固定的  当前文件的绝对路径
接受的参数 一般是从第2个开始,空格分割每个参数
1.png

先说head,打开你的chrome(没有的话,安装一下)
F12开发者模式     然后随便进个网页
后面的步骤都在图片里
2.png
3.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-18 16:43:26 | 显示全部楼层
yuxijian2020 发表于 2021-7-18 12:05
还没学多少就开始整这有难度的啊

sys.argv   是一个字符串数组,在python里就是str的list   ...

谢谢你这么耐心对待一个新手。确实需要快点学习,要不然真的看不懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-18 18:38:59 | 显示全部楼层
江湖散人 发表于 2021-7-18 16:43
谢谢你这么耐心对待一个新手。确实需要快点学习,要不然真的看不懂。

searchURL 没说,这个就是靠自己分析
我也是猜的   瞎搞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-19 09:06:54 | 显示全部楼层
yuxijian2020 发表于 2021-7-18 18:38
searchURL 没说,这个就是靠自己分析
我也是猜的   瞎搞

有一定的功底才能猜测,不然都无从猜起。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 01:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表