贴吧的老历史想存下来,强行python爬取一波
队友太强,躺好别动,偶尔做点副业
假装会python
基本流程:
1.爬取页面,获取页面的html源码
2.分析源码 通过正则表达式 匹配到想要的内容
3.去掉不需要的
python中 re模块 提供对正则表达式的支持
# -*- coding:utf-8 -*-
import urllib2
import urllib
import re
class Tool:
#去除img标签,7位长空格
removeImg = re.compile('<img.*?>| {7}|')
#删除超链接标签
removeAddr = re.compile('<a.*?>|</a>')
#把换行的标签换为\n
replaceLine = re.compile('<tr>|<div>|</div>|</p>')
#将表格制表<td>替换为\t
replaceTD= re.compile('<td>')
#把段落开头换为\n加空两格
replacePara = re.compile('<p.*?>')
#将换行符或双换行符替换为\n
replaceBR = re.compile('<br><br>|<br>')
#将其余标签剔除
removeExtraTag = re.compile('<.*?>')
def replace(self,x):
x = re.sub(self.removeImg,"",x)
x = re.sub(self.removeAddr,"",x)
x = re.sub(self.replaceLine,"\n",x)
x = re.sub(self.replaceTD,"\t",x)
x = re.sub(self.replacePara,"\n ",x)
x = re.sub(self.replaceBR,"\n",x)
x = re.sub(self.removeExtraTag,"",x)
#strip()将前后多余内容删除
return x.strip()
class BDTB: def __init__(self,baseUrl,seeLZ):
self.baseURL =baseUrl
self.seeLZ ='?see_lz'+str(seeLZ)
self.tool=Tool()
def getPage(self,pageNum):#抓取网页 第几页
try:
url=self.baseURL+self.seeLZ+'&pn='+str(pageNum)
request = urllib2.Request(url)
response =urllib2.urlopen(request)
#print response.read()
return response.read().decode('utf-8')
except urllib2.URLError,e:
if hasattr(e,"reason"):
print u"fail",e.reason
return None
def getTitle(self):#获取标题
page =self.getPage(1)
pattern = re.compile('<h3 class="core_title_txt.*?>(.*?)</h3>',re.S)
result =re.search(pattern,page)
#print result
if result:
print result.group(1)
return result.group(1).strip()
else :
return None
def getContent(self):#获取正文
page=self.getPage(1)
pattern =re.compile('<div id="post_content_.*?>(.*?)</div>',re.S)
items =re.findall(pattern,page)
for i in range(1,20):#前19个
print self.tool.replace(items[i]) baseURL = 'http://tieba.baidu.com/p/5285925491'#任意一个网页的url
bdtb=BDTB(baseURL,1)
#bdtb.getTitle()
bdtb.getContent()