解决: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)才是我们要的第一个也是唯一一个元素。

修改后,我们得到了正确的标题:


__EOF__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/7349201.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(4695)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示