今天寫爬蟲,爬取MM圖片頁面的標題時,遇到了一個問題,上圖:

看看我的代碼:
1 import urllib 2 import urllib2 3 import re 4 5 class JPMSG: 6 7 def __init__(self, baseUrl): 8 self.baseUrl = baseUrl 9 10 def getPage(self, viewNum): 11 try: 12 url = self.baseUrl + str(viewNum) + '.html' 13 request = urllib2.Request(url) 14 response = urllib2.urlopen(request) 15 #print response 16 return response 17 except urllib2.URLError, e: 18 if hasattr(e, "reason"): 19 print "爬取MM圖片失敗,失敗原因", e.reason 20 return None 21 22 def getTitle(self): 23 page = self.getPage(13235) 24 pattern = re.compile('<div class="bttitke"><h2>(.*?)</h2>', re.S) 25 result = re.search(pattern, page) 26 if result: 27 print result.group(0) 28 return result.group(0).strip() 29 else: 30 return None
哈哈,發現問題了嗎?原因是我的返回的response沒加read(),應該是return response.read()
好了,一波未平,一波又起。上圖:

為什么我的正則表達式匹配的標題連標簽都匹配下來了,我們要的僅僅是標題啊。
原因就出在print result.group(0)身上,group()的方法,當有多個參數時是以元組形式返回,編號0表示整個匹配的子串,而group(1)才是我們要的第一個也是唯一一個元素。
修改后,我們得到了正確的標題:

