依然是参考教程 Python爬虫实战一之爬取百度贴吧帖子。作者崔庆才写了很多关于Python爬虫的文章,大家有兴趣的话可以去他的个人博客静觅学习。
源代码还是在我的GitHub主页上。
这次将爬取的数据写入了文本文件中,并用到了re模块中其他的匹配方式。
由于页面中包含了图片、超链接等一些我们不需要的信息,我们利用一个方法将这些信息剔除掉。
class Tool:
removeImg = re.compile('<img.*?>')
removeAddr = re.compile('<a.*?>|</a>')
replaceBR = re.compile('<br>')
removeExtraTag = re.compile('<.*?>')
def replace(self, x):
x = re.sub(self.removeImg,"",x)
x = re.sub(self.removeAddr,"",x)
x = re.sub(self.replaceBR,"\n",x)
x = re.sub(self.removeExtraTag,"",x)
return x.strip()
re.sub(pattern, repl, string)
将字符串string中符合正则表达式pattern的部分替换为repl。
def getTitle(self, page):
pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
result = re.search(pattern, page)
if result:
return result.group(1).strip()
else:
return None
re.search()
方法会返回一个MatchObject的实例,该实例有一个group属性,group(0)返回整个匹配的字符串,group(1)返回第一个子串,group(2)返回第二个子串,以此类推。以下是Python2.7官方文档中的例子:
m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
m.group(0) = 'Isaac Newton'
m.group(1) = 'Isaac'
m.group(2) = 'Newton'
utf-8是unicode的实现方式之一。字符串在Python内部的表示是unicode编码。pageCode = response.read().decode('utf-8')
中decode('utf-8')
代表将utf-8编码的字符串转换成unicode编码,然后在Python中进行处理。contents.append(content.encode('utf-8'))
表示将unicode编码转换成utf-8编码的字符串,然后才能写入txt文件。self.file = open(title + ".txt", "w+")
中的w+参数表示打开一个文件用于读写,如果该文件已存在则将其覆盖,如果该文件不存在,创建新文件。
以前每次在百度贴吧上看帖子想要只看楼主都要登录,这次以后知道只要在网址后面加上?see_lz=1就可以直接看了。