文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第9单元 上网
根据WorldWideWebSize网站1的统计结果,能被索引的Web至少包含48.5亿网页2。其中部分网页可能是我们感兴趣的。urllib.request模块包含从Web下载数据的函数。可以手动下载单个数据集,将其保存到缓存目录中,再使用Python脚本进行分析,不过这种方法并不可取。另外,某些数据分析项目需要自动化迭代或递归下载。
2网页数量的统计结果是动态变化的,在翻译此处时所查到的最新数据是47.2亿。——译者注
无论要从Web上获取什么,第一步都是用urlopen(url)函数打开网址,以获得打开网址的句柄。一旦打开了网址,对应的网址句柄就类似于以只读方式打开的文件句柄:可以使用函数read()、readline()和readlines()来访问数据。
鉴于Web和互联网的动态特性,无法打开网址的概率要高于无法打开本地文件的概率。因此,务必将任何与Web相关的函数调用都包含在一个异常处理的语句中:
import urllib.request try: with urllib.request.urlopen("http://www.networksciencelab.com") as doc: html = doc.read() # 如果数据读取成功,连接就会自动关闭 except: print("Could not open %s" % doc, file=sys.err) # 不要假装已经读到了文件! # 一定要在这里执行错误处理程序
当数据集部署在需要身份验证的网站上时,就不能使用urlopen()函数了。此时,应使用提供安全套接层(SSL,例如OpenSSL)的模块。
urllib.parse模块提供了用于解析和构建网址的友好工具。函数urlparse()将网址分成六个元素的元组:协议(比如http)、网络地址、文件系统路径、参数、查询和片段:
import urllib.parse URL = "http://networksciencelab.com/index.html;param?foo=bar#content" urllib.parse.urlparse(URL) ➾ ParseResult(scheme='http', netloc='networksciencelab.com', ➾ path='/index.html', params='param', query='foo=bar', ➾ fragment='content')
函数urlunparse(parts)使用urlparse()的返回值parts构造有效的网址。如果在解析一个网址之后再将其重新构建,则结果可能与原始网址稍有不同,但功能上是完全等效的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论