- 内容提要
- 作者简介
- 技术评审者简介
- 致谢
- 译者序 会编程的人不一样
- 前言
- 本书的读者对象
- 编码规范
- 什么是编程
- 本书简介
- 下载和安装 Python
- 启动 IDLE
- 如何寻求帮助
- 聪明地提出编程问题
- 小结
- 第一部分 Python 编程基础
- 第1章 Python 基础
- 第2章 控制流
- 第3章 函数
- 第4章 列表
- 第5章 字典和结构化数据
- 第6章 字符串操作
- 第二部分 自动化任务
- 第7章 模式匹配与正则表达式
- 第8章 读写文件
- 第9章 组织文件
- 第10章 调试
- 第11章 从 Web 抓取信息
- 第12章 处理 Excel 电子表格
- 第13章 处理 PDF 和 Word 文档
- 第14章 处理 CSV 文件和 JSON 数据
- 第15章 保持时间、计划任务和启动程序
- 第16章 发送电子邮件和短信
- 第17章 操作图像
- 第18章 用 GUI 自动化控制键盘和鼠标
- 附录A 安装第三方模块
- 附录B 运行程序
- 附录C 习题答案
11.1 项目:利用 webbrowser 模块的 mapIt.py
webbrowser模块的open()函数可以启动一个新浏览器,打开指定的URL。在交互式环境中输入以下代码:
>>> import webbrowser >>> webbrowser.open('http://inventwithpython.com/')
Web浏览器的选项卡将打开URL http://inventwithpython.com/。这大概就是webbrowser模块能做的唯一的事情。既使如此,open()函数确实让一些有趣的事情成为可能。例如,将一条街道的地址拷贝到剪贴板,并在Google地图上打开它的地图,这是很繁琐的事。你可以让这个任务减少几步,写一个简单的脚本,利用剪贴板中的内容在浏览器中自动加载地图。这样,你只要将地址拷贝到剪贴板,运行该脚本,地图就会加载。
你的程序需要做到:
· 从命令行参数或剪贴板中取得街道地址。
· 打开Web浏览器,指向该地址的Google地图页面。
这意味着代码需要做下列事情:
· 从sys.argv读取命令行参数。
· 读取剪贴板内容。
· 调用webbrowser.open()函数打开外部浏览器。
打开一个新的文件编辑器窗口,将它保存为mapIt.py。
第1步:弄清楚URL
根据附录B中的指导,建立mapIt.py,这样当你从命令行运行它时,例如
C:\> mapit 870 Valencia St, San Francisco, CA 94110
该脚本将使用命令行参数,而不是剪贴板。如果没有命令行参数,程序就知道要使用剪贴板的内容。
首先你需要弄清楚,对于指定的街道地址,要使用怎样的URL。你在浏览器中打开http://maps.google.com/并查找一个地址时,地址栏中的URL看起来就像这样:https:// www.google.com/maps/place/870+Valencia+St/@37.7590311,-122.4215096, 17z/data=
!3m1!4b1!4m2!3m1!1s0x808f7e3dadc07a37:0xc86b0b2bb93b73d8.
地址就在URL中,但其中还有许多附加的文本。网站常常在URL中添加额外的数据,帮助追踪访问者或定制网站。但如果你尝试使用https://www.google. com/maps/place/870+Valencia+St+San+Francisco+CA/,会发现仍然可以到达正确的页面。所以你的程序可以设置为打开一个浏览器,访问'https://www.google.com/ maps/place/your_address_string'(其中your_address_string是想查看地图的地址)。
第2步:处理命令行参数
让你的代码看起来像这样:
#! python3 # mapIt.py - Launches a map in the browser using an address from the # command line or clipboard. import webbrowser, sys if len(sys.argv) > 1: # Get address from command line. address = ' '.join(sys.argv[1:]) # TODO: Get address from clipboard.
在程序的#!行之后,需要导入webbrowser模块,用于加载浏览器;导入sys模块,用于读入可能的命令行参数。sys.argv变量保存了程序的文件名和命令行参数的列表。如果这个列表中不只有文件名,那么len(sys.argv)的返回值就会大于1,这意味着确实提供了命令行参数。
命令行参数通常用空格分隔,但在这个例子中,你希望将所有参数解释为一个字符串。因为sys.argv是字符串的列表,所以你可以将它传递给join()方法,这将返回一个字符串。你不希望程序的名称出现在这个字符串中,所以不是使用sys.argv,而是使用sys.argv[1:],砍掉这个数组的第一个元素。这个表达式求值得到的字符串,保存在address变量中。
如果运行程序时在命令行中输入以下内容:
mapit 870 Valencia St, San Francisco, CA 94110
…sys.argv变量将包含这样的列表值:
['mapIt.py', '870', 'Valencia', 'St, ', 'San', 'Francisco, ', 'CA', '94110']
address变量将包含字符串'870 Valencia St, San Francisco, CA 94110'。
第3步:处理剪贴板内容,加载浏览器
让你的代码看起来像这样:
#! python3 # mapIt.py - Launches a map in the browser using an address from the # command line or clipboard. import webbrowser, sys, pyperclip if len(sys.argv) > 1: # Get address from command line. address = ' '.join(sys.argv[1:]) else: # Get address from clipboard. address = pyperclip.paste() webbrowser.open('https://www.google.com/maps/place/' + address)
如果没有命令行参数,程序将假定地址保存在剪贴板中。可以用pyperclip.paste()取得剪贴板的内容,并将它保存在名为address的变量中。最后,启动外部浏览器访问Google地图的URL,调用webbrowser.open()。
虽然你写的某些程序将完成大型任务,为你节省数小时的时间,但使用一个程序,在每次执行一个常用任务时节省几秒钟时间,比如取得一个地址的地图,这同样令人满意。表11-1比较了有mapIt.py和没有它时,显示地图所需的步骤。
表11-1 不用和利用mapIt.py取得地图
手工取得地图
利用mapIt.py
高亮标记地址
高亮标记地址
拷贝地址
拷贝地址
打开Web浏览器
运行mapIt.py
打开http://maps.google.com/
点击地址文本字段
拷贝地址
按回车
看到程序让这个任务变得不那么繁琐了吗?
第4步:类似程序的想法
只要你有一个URL,webbrowser模块就让用户不必打开浏览器,而直接加载一个网站。其他程序可以利用这项功能完成以下任务:
· 在独立的浏览器标签中,打开一个页面中的所有链接。
· 用浏览器打开本地天气的URL。
· 打开你经常查看的几个社交网站。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论