首先,我們先來看看,如果是人正常的行為,是如何獲取網頁內容的。
(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
|
新聞熱點
疑難解答