《python爬虫实战》:爬取贴吧上的帖子
经过前面两篇例子的练习,自己也对爬虫有了一定的经验。
由于目前还没有利用BeautifulSoup库,因此关于爬虫的难点还是正则表达式的书写。
但是,当写几个正则表达式之后,发现还是有一定的规则可循的,只要我们的目的明确,想得到网页的什么,我们就直接在该网页上,找到我们想要的内容在html代码中出现的格式是怎么样的。
例如,我们想获取贴吧上帖子的标题。
解决方法为:在相应的网页的html代码中找到title出现的地方。然后提取正则表达式。
根据上面的截图:提取的正则表达式如下:
pattern=re.compile(r'<h3 class="core_title_txt pull-left text-overflow .*?>(.*?)</h3>',re.S)
因此,得到帖子的标题的代码可以这么写。
#得到帖子的标题
def getPageTitle(self,pageNum):
content=self.getPageContent(pageNum)#得到网页的html代码
pattern=re.compile(r'<h3 class="core_title_txt pull-left text-overflow .*?>(.*?)</h3>',re.S)
title=re.search(pattern,content)
if title:
#print title.group(1).strip() 测试输出
return title.group(1).strip()
else:
print None
同样的道理,我们可以得到获取帖子作者的代码如下:
#得到帖子的作者
def getPageAuthor(self,pageNum):
content=self.getPageContent(pageNum)
# <div class="louzhubiaoshi j_louzhubiaoshi" author="懂球君">
pattern=re.compile(r'<div class="louzhubiaoshi j_louzhubiaoshi" author="(.*?)">',re.S)
author=re.search(pattern,content)
if author:
print author.group(1).strip()#测试输出
return author.group(1).strip()
else :
print None
同样的道理,可以得到任何我们想要的内容。比例:帖子的回复总数等。
下面是完整代码:
#encoding=utf-8
#功能:抓取百度贴吧中帖子的内容
import urllib2
import urllib
import re
#定义一个工具类来处理内容中的标签
class