解決:return _compile(pattern, flags).search(string) TypeError: expected string or buffer


今天寫爬蟲,爬取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)才是我們要的第一個也是唯一一個元素。

修改后,我們得到了正確的標題:

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM