@zhangyu756897669
2017-09-21T15:24:02.000000Z
字数 2603
阅读 766
python官方文档
由于计算机上的这么多工作涉及上网,如果您的程序可以上网,那将是很棒的。 Web抓取是使用程序从Web下载和处理内容的术语。例如,Google运行许多网络抓取程序来为搜索引擎索引网页。在本章中,您将了解可以轻松地在Python中浏览网页的几个模块。
* webbrowser.python附带的模块,并打开浏览器到特定的页面。
* Requests. 从Internet下载文件和网页。
* Beautiful Soup. 解析HTML,网页的格式。
* Selenium. 启动和控制Web浏览器。能够填写表单并在此浏览器中模拟鼠标点击。
webbrowser模块的open()函数可以将新的浏览器启动到指定的URL。
import webbrowser
webbrowser.open('http://inventwithpython.com/')
True
Web浏览器标签将打开到http://inventwithpython.com/的URL。这是关于webbrowser模块可以做的唯一的事情。即使如此,open()函数确实使一些有趣的事情成为可能。例如,将街道地址复制到剪贴板并在Google地图上显示地图是很麻烦的。您可以通过编写一个简单的脚本,使用剪贴板的内容在浏览器中自动启动地图,从而完成此任务。这样,您只需将地址复制到剪贴板并运行脚本,并将为您载入地图。
这是你的程序所做的:
* 从命令行参数或剪贴板获取街道地址。
* 打开网页浏览器到Google地图页面的地址。
这意味着您的代码将需要执行以下操作:
* 从sys.argv读取命令行参数。
* 阅读剪贴板内容。
* 调用webbrowser.open()函数打开Web浏览器。
打开一个新的文件编辑器窗口并保存为mapIt.py。
根据附录B中的说明,设置mapIt.py,以便当您从命令行运行它时,像...
C:> mapit 870 Valencia St, San Francisco, CA 94110
...脚本将使用命令行参数而不是剪贴板。如果没有命令行参数,则程序将知道使用剪贴板的内容。
首先,您需要找出用于给定街道地址的网址。当您在浏览器中加载http://maps.google.com/并搜索地址时,地址栏中的网址如下所示:https://www.google.com/maps/place/870 Valencia St/@37.7590311,-122.4215096,17z/data=!3m1!4b1!4m2!3m1!1s0x808f7e3dadc07a37:0xc86b0b2bb93b73d8。
地址在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是您要映射的地址)。
让你的代码看起来像这样:
# 在浏览器中使用地址启动地图
# 命令行或剪贴板。
import webbrowser, sys
if len(sys.argv) > 1:
# Get address from command line.
address = ' '.join(sys.argv[1:])
# TODO:从剪贴板获取地址。
您需要导入用于启动浏览器的web浏览器模块,并导入sys模块以读取潜在的命令行参数。 sys.argv变量存储程序的文件名和命令行参数的列表。如果该列表不仅仅包含其中的文件名,那么len(sys.argv)将计算为大于1的整数,这意味着确实提供了命令行参数。
命令行参数通常由空格分隔,但在这种情况下,您要将所有参数解释为单个字符串。由于sys.argv是字符串列表,您可以将其传递给join()方法,该方法返回单个字符串值。您不想在此字符串中的程序名称,因此,而不是sys.argv,您应该通过sys.argv [1:]来切断数组的第一个元素。该表达式求值的最后一个字符串存储在地址变量中。
如果你通过输入命令行来运行程序...
mapit 870 Valencia St, San Francisco, CA 94110
... sys.argv变量将包含此列表值:['mapIt.py', '870', 'Valencia', 'St, ', 'San', 'Francisco, ', 'CA', '94110']
地址变量将包含字符串 '870 Valencia St, San Francisco, CA 94110'.
使您的代码如下所示:
#在浏览器中使用地址启动地图
#命令行或剪贴板。
import webbrowser, sys, pyperclip
if len(sys.argv) > 1:
# Get address from command line.
address = ' '.join(sys.argv[1:])
else:
# 从剪贴板获取地址。
address = pyperclip.paste()
webbrowser.open('https://www.google.com/maps/place/' + address)
如果没有命令行参数,程序将假定地址存储在剪贴板上。您可以使用pyperclip.paste()获取剪贴板内容,并将其存储在名为address的变量中。最后,要启动具有Google Maps URL的Web浏览器,请调用webbrowser.open()。
虽然您编写的一些程序将执行巨大的任务,节省您的工作时间,但使用一个程序可以方便地在每次执行常见任务(例如获取地址的映射)时节省几秒钟。表11-1比较了使用和不使用mapIt.py来显示地图所需的步骤。
只要你有一个URL,webbrowser模块就可以让用户切断打开浏览器的步骤,并指导自己到一个网站。其他程序可以使用此功能执行以下操作:
* 在单独的浏览器选项卡中打开页面上的所有链接。
* 将浏览器打开到您当地天气的URL。
* 打开您定期检查的几个社交网站。