爬虫(纯自己写)"/>
python新浪博客爬虫(纯自己写)
python新浪博客爬虫(纯自己写)
一直在学习javaweb方面的知识,什么J2SE,ssh框架,tomcat,学的累了。突然想学习一门脚本语言,虽然js也会点,就是不怎么熟练。感觉Python挺有意思的,就花了两天学习了下,还知道可以比较方便的用来编写网络爬虫,觉得很有意思,所以就觉得自己编写一个,花了一晚上时间写了一个从新浪博客上爬韩寒文章的爬虫。自己编写的,洗的不好的地方,请指出,大家一起讨论。 直接贴出代码,每个函数上面都是注释,很容易看懂的。 __auyhor__='sw' # -*- coding:utf-8 -*-import urllib2import urllibimport toolsimport reimport osimport sysreload(sys)sys.setdefaultencoding('utf8')class Weibo:def __init__(self):self.tool = tools.Tool()#得到文章列表第一面的内容def getArticlePage(self,url):request = urllib2.Request(url)response = urllib2.urlopen(request)return response.read().decode('utf-8').encode('gbk').decode('gbk')#得到列表第一面中所有链接信息def getLink(self,url):page = self.getArticlePage(url);pattern = repile('<span.*?class="atc_title">.*?<a.*?href="(.*?)".*?>(.*?)</a>',re.S)items = re.findall(pattern,page)contents = []for item in items:contents.append([item[0],item[1]])return contents#通过URL得到文章内容def getArticleDetail(self,ArticleUrl):request = urllib2.Request(ArticleUrl)response = urllib2.urlopen(request)content = response.read()return content#通过内容筛选出文章并且保存起来def saveArticle(self,content,name,path):pattern = repile('<div id="sina_keyword_ad_area2" class="articalContent ">(.*?)</div>',re.S)result = re.search(pattern,content).group(1)result = self.tool.replace(result)fileName = path + "/" + name + ".txt"f = open(fileName,"w+")print u"正在下载文章",namef.write(result.encode('utf-8'))f.close()#从第一页中得到所有的列表页面链接def getPageLink(self,url):page = self.getArticlePage(url)pattern = repile('<li>.*?<a.*?href="(.*?)".*?>.*?</li>',re.S)result = re.findall(pattern,page)return result#创建新目录def mkdir(self,path):path = path.strip()isExits = os.path.exists(path)if not isExits:print u"创建了新的文件夹叫做",pathos.makedirs(path)return Trueelse:print u"名为",path,"的文件夹已经创建成功"return False#通过url下载文章def downloadByURL(self,url,i):contents = self.getLink(url)path = "第"+str(i)+"页"self.mkdir(path)for item in contents:content = self.getArticleDetail(item[0])self.saveArticle(content,item[1],path)def main(self):url = '.html'i = 1self.downloadByURL(url,i)pageUrl = self.getPageLink(url)for URL in pageUrl:i = i + 1self.downloadByURL(URL,i)print """----------------------------------------------------------------------时间:2015.5.21 星期四作者:sw版本:0.1python版本:2.7.3功能:新浪博客爬虫,抓取韩寒博客里面所有的文章存到本地为.txt文档,用文章 的标题作为文档的名称,每一页存为一个文件夹操作:直接运行即可-----------------------------------------------------------------------"""weibo = Weibo()weibo.main()
还有一个工具类,主要是除去文章中多余的链接,换行之类的
__author__='sw' # -*- coding:utf-8 -*-import reclass Tool:removeImg = repile('<img.*?>| {1,7}| ')removeAddr = repile('<a.*?>|</a>')replaceLine = repile('<tr>|<div>|</div>|</p>')replaceBR = repile('<br><br>|<br>')removeExtraTag = repile('<.*?>')removeNoneLine = repile('\n+')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.replaceBR,"\n",x)x = re.sub(self.removeExtraTag,"",x)x = re.sub(self.removeNoneLine,"\n",x)return x.strip()
事实上有的地方还是可以改进的,现在只是爬取韩寒博客的文章,下一个版本可以输入一个博客的网址,从输入的网址中爬取文章,有时间再改进改进吧。
更多推荐
python新浪博客爬虫(纯自己写)
发布评论