首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的。
(1)打开浏览器,输入URL,打开源网页
(2)选取我们想要的内容,包括标题,作者,摘要,正文等信息
(3)存储到硬盘中
上面的三个过程,映射到技术层面上,其实就是:网络请求,抓取结构化数据,数据存储。
我们使用Python写一个简单的程序,实现上面的简单抓取功能。
#!/usr/bin/python #-*- coding: utf-8 -*- ''''' Created on 2014-03-16 @author: Kris ''' import urllib2, re, cookielib def httpCrawler(url): ''''' @summary: 网页抓取 ''' content = httpRequest(url) title = parseHtml(content) saveData(title) def httpRequest(url): ''''' @summary: 网络请求 ''' try: ret = None SockFile = None request = urllib2.Request(url) request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)') request.add_header('Pragma', 'no-cache') opener = urllib2.build_opener() SockFile = opener.open(request) ret = SockFile.read() finally: if SockFile: SockFile.close() return ret def parseHtml(html): ''''' @summary: 抓取结构化数据 ''' content = None pattern = '<title>([^<]*?)</title>' temp = re.findall(pattern, html) if temp: content = temp[0] return content def saveData(data): ''''' @summary: 数据存储 ''' f = open('test', 'wb') f.write(data) f.close() if __name__ == '__main__': url = 'http://www.baidu.com' httpCrawler(url)
看着很简单,是的,它就是一个爬虫入门的基础程序。当然,在实现一个采集过程,无非就是上面的几个基础步骤。但是实现一个强大的采集过程,你会遇到下面的问题:
(1)需要带着cookie信息访问,比如大多数的社交化软件,基本上都是需要用户登录之后,才能看到有价值的东西,其实很简单,我们可以使用Python提供的cookielib模块,实现每次访问都带着源网站给的cookie信息去访问,这样只要我们成功模拟了登录,爬虫处于登录状态,那么我们就可以采集到登录用户看到的一切信息了。下面是使用cookie对httpRequest()方法的修改:
ckjar = cookielib.MozillaCookieJar() cookies = urllib2.HTTPCookieProcessor(ckjar) #定义cookies对象 def httpRequest(url): ''''' @summary: 网络请求 ''' try: ret = None SockFile = None request = urllib2.Request(url) request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)') request.add_header('Pragma', 'no-cache') opener = urllib2.build_opener(cookies) #传递cookies对象 SockFile = opener.open(request) ret = SockFile.read() finally: if SockFile: SockFile.close() return ret
新闻热点
疑难解答