网络爬虫是一个抓取网页的程序。网络爬虫(蜘蛛)是通过网页的链接地址来寻找网页,从网站某一个页面开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络爬虫(蜘蛛)就可以用这个原理把互联网上所有的网页都抓取下来。
网络爬虫是一个非常有用的工具。用功能强大的Python写爬虫程序,对于自己来说是一个很好的练习题目。
写一个爬虫程序,首先需要给程序输入一个入口地址,可以使用Python的urllib模块来下载网页并读取网页中的内容。然后通过文件操作将网页内容以.htm格式保存至本地。urllib模块可以使我们像读取本地文件一样读取www和ftp上的数据。
import urllib
url = "http://www.baidu.com"
filename = "baidu.htm"
f = urllib.urlopen(url)
s = f.read()
fp = file(filename,'w')
fp.write(s)
fp.close()
下一步我们需要分析获取到的字符串s中的内容,来获得入口网页中所指向的所有下一级链接地址。通常从html代码中获得超链接的方式有很多种,归根结底是字符串中对超链接标签的提取。在此简单介绍一种通过正则表达式获取超链接的方法。
import re
urls = []
url = re.findall(r'''<a(\s*)(.*?)(\s*)href(\s*)=(\s*)([\"\s]*)([^\"\')+?)([\"\s]+)(.*?)>''',s,re.S|re.I)
for u in url:
urls.append(u[6])
利用上边两个方法,我们便可以通过入口链接获得下一级链接,然后一直爬取下去,将所有爬取到的网页存储在本地。一个简单的爬虫功能的程序便可以用Python实现了。
下一节我们简单讨论如何加入多线程的使用来提高性能写网络爬虫学python(二)