爬虫踪影
每时每刻,搜索引擎和网站都在采集大量的信息。而他们采用信息的程序就被叫做“爬虫”,这个名字十分形象,程序就像一个个小虫子,采集完数据进行处理。一般都是先“爬”到对应的网页上,在把需要的信息“铲”下来。而作为一个站长,掌握爬虫技术,就可以十分方便的管理自己网站的内容,或者是使自己更加安全的管理自己的网站。
创建爬虫
网络上遍布的信息,让我们垂涎欲滴,我们不能一位的去复制粘贴他,我们是人类,就必须学习这简化自己的工作,重复是机器才会去干的工作,而我们学会的就是控制机器。控制机器,我们就必须有机器语言,这里我们采用Python这门强大的爬虫语言来完成我们的采集工作。Python获取网络上的信息非常方便,这得益于它强大的库文件。
下面我们来看如何实现:
from urllib.request import urlopen html=urlopen("http://www.jrzj.com/1804119.html") print(html.read())
运行上述代码,我们就能从上面网址对应的网页上获取html信息。获取的信息还没有经过处理,非常杂乱,但是我们知道了如何获取。我们是利用urllib这个库来获取的。urllib这个库是一个非常强大实用的Python库。这个库的详细信息及说明文档详见urllib
细化程序
上面使我们获取全部的html信息,如果我们想要处理某一部分的信息怎么办呢?这时候我们需要一个叫BeautifulSoup的库,这个库可以提取某个节点的信息。
from urllib.request import urlopen from bs4 import BeautifulSoup article=urlopen("http://www.jrzj.com/180411.html") bsObj=BeautifulSoup(article.read()) print(bsObj.h1)
上面我们就将一片文章的标题提取出来了。当然这只是一个简单的演示,以后我们将会学习更加复杂的例子。
处理异常,优化程序
程序总是有异常的,尤其是与网络有关的程序。因为这涉及了网络是否通畅,网络权限,网络地址是否变更等一系列的不可预测因素。因此,为了完成更好的程序,我们必须学会处理异常,优化程序。
from urllib.request import urlopen from urllib.error import HTTPError,URLError try: html=urlopen("http://www.jrzj.com/1804119.html") except HTTPError as e: print(e) else: print(html.read())
异常处理完成,我们还要学会将重复使用的功能抽象成函数,比如获取文章的标题
from urllib.request import urlopen from urllib.error import HTTPError,URLError from bs4 import BeautifulSoup def getTitle(url): try: html=urlopen(url) except (HTTPError,URLError) as e: return None try: bsObj=BeautifulSoup(html.read()) title=bsObj.body.h1 except AttributeError as e: return None return title title=getTitle("http://www.jrzj.com/180411.html") if title==None: print('Title could not be found') else: print(title)
这就是一个简单的爬虫小程序,获取特定文章的标题。