在这场数据交换中,网络浏览器从哪里开始参与的?完全没有参与。其实,在互联网的历史中,浏览器是一个比较年轻的发明,始于 1990 年的 Nexus 浏览器。
我们的 Python 程序没有返回并向服务器请求多个文件的逻辑,它只能读取我们已经请求的单个 HTML 文件。
urllib的python文档:https://docs.python.org/3/library/urllib.html
网络数据采集最痛苦的遭遇之一,就是爬虫运行的时候你洗洗睡了,梦想着明天一早数据就都会采集好放在数据库里, 结果第二天醒来,你看到的却是一个因某种数据格式异常导致运行错误的爬虫, 在前一天当你不再盯着屏幕去睡觉之后,没过一会儿爬虫就不再运行了。那个时候,你可能想骂发明互联网(以及那些奇葩的网络数据格式)的人,但是你真正应该斥责的人是你自己,为什么一开始不估计可能会出现的异常!
所以,加个捕捉异常、None值检测吧
def getTitle(url):
try: html = urlopen(url)
except HTTPError as e: return None
try:
bsObj = BeautifulSoup(html, features="html5lib")
title = bsObj.body.h1
except AttributeError as e: return None
return title
在写爬虫的时候, 思考代码的总体格局,让代码既可以捕捉异常又容易阅读,这是很重要的。如果你还希望能够很大程度地重用代码, 那么拥有像 getSiteHTML 和 getTitle 这样的通用函数,具有周密的异常处理功能会让快速稳定地网络数据采集变得简单易行。