python新浪博客爬虫(纯自己写)

落日映苍穹つ 2022-08-08 14:00 319阅读 0赞

python新浪博客爬虫(纯自己写)

一直在学习javaweb方面的知识,什么J2SE,ssh框架,tomcat,学的累了。突然想学习一门脚本语言,虽然js也会点,就是不怎么熟练。感觉Python挺有意思的,就花了两天学习了下,还知道可以比较方便的用来编写网络爬虫,觉得很有意思,所以就觉得自己编写一个,花了一晚上时间写了一个从新浪博客上爬韩寒文章的爬虫。自己编写的,洗的不好的地方,请指出,大家一起讨论。

直接贴出代码,每个函数上面都是注释,很容易看懂的。

Center

Center 1

  1. __auyhor__='sw'
  2. # -*- coding:utf-8 -*-
  3. import urllib2
  4. import urllib
  5. import tools
  6. import re
  7. import os
  8. import sys
  9. reload(sys)
  10. sys.setdefaultencoding('utf8')
  11. class Weibo:
  12. def __init__(self):
  13. self.tool = tools.Tool()
  14. #得到文章列表第一面的内容
  15. def getArticlePage(self,url):
  16. request = urllib2.Request(url)
  17. response = urllib2.urlopen(request)
  18. return response.read().decode('utf-8').encode('gbk').decode('gbk')
  19. #得到列表第一面中所有链接信息
  20. def getLink(self,url):
  21. page = self.getArticlePage(url);
  22. pattern = re.compile('<span.*?class="atc_title">.*?<a.*?href="(.*?)".*?>(.*?)</a>',re.S)
  23. items = re.findall(pattern,page)
  24. contents = []
  25. for item in items:
  26. contents.append([item[0],item[1]])
  27. return contents
  28. #通过URL得到文章内容
  29. def getArticleDetail(self,ArticleUrl):
  30. request = urllib2.Request(ArticleUrl)
  31. response = urllib2.urlopen(request)
  32. content = response.read()
  33. return content
  34. #通过内容筛选出文章并且保存起来
  35. def saveArticle(self,content,name,path):
  36. pattern = re.compile('<div id="sina_keyword_ad_area2" class="articalContent ">(.*?)</div>',re.S)
  37. result = re.search(pattern,content).group(1)
  38. result = self.tool.replace(result)
  39. fileName = path + "/" + name + ".txt"
  40. f = open(fileName,"w+")
  41. print u"正在下载文章",name
  42. f.write(result.encode('utf-8'))
  43. f.close()
  44. #从第一页中得到所有的列表页面链接
  45. def getPageLink(self,url):
  46. page = self.getArticlePage(url)
  47. pattern = re.compile('<li>.*?<a.*?href="(.*?)".*?>.*?</li>',re.S)
  48. result = re.findall(pattern,page)
  49. return result
  50. #创建新目录
  51. def mkdir(self,path):
  52. path = path.strip()
  53. isExits = os.path.exists(path)
  54. if not isExits:
  55. print u"创建了新的文件夹叫做",path
  56. os.makedirs(path)
  57. return True
  58. else:
  59. print u"名为",path,"的文件夹已经创建成功"
  60. return False
  61. #通过url下载文章
  62. def downloadByURL(self,url,i):
  63. contents = self.getLink(url)
  64. path = "第"+str(i)+"页"
  65. self.mkdir(path)
  66. for item in contents:
  67. content = self.getArticleDetail(item[0])
  68. self.saveArticle(content,item[1],path)
  69. def main(self):
  70. url = 'http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html'
  71. i = 1
  72. self.downloadByURL(url,i)
  73. pageUrl = self.getPageLink(url)
  74. for URL in pageUrl:
  75. i = i + 1
  76. self.downloadByURL(URL,i)
  77. print """
  78. ----------------------------------------------------------------------
  79. 时间:2015.5.21 星期四
  80. 作者:sw
  81. 版本:0.1
  82. python版本:2.7.3
  83. 功能:新浪博客爬虫,抓取韩寒博客里面所有的文章存到本地为.txt文档,用文章 的标题作为文档的名称,每一页存为一个文件夹
  84. 操作:直接运行即可
  85. -----------------------------------------------------------------------
  86. """
  87. weibo = Weibo()
  88. weibo.main()

还有一个工具类,主要是除去文章中多余的链接,换行之类的

  1. __author__='sw'
  2. # -*- coding:utf-8 -*-
  3. import re
  4. class Tool:
  5. removeImg = re.compile('<img.*?>| {1,7}| ')
  6. removeAddr = re.compile('<a.*?>|</a>')
  7. replaceLine = re.compile('<tr>|<div>|</div>|</p>')
  8. replaceBR = re.compile('<br><br>|<br>')
  9. removeExtraTag = re.compile('<.*?>')
  10. removeNoneLine = re.compile('\n+')
  11. def replace(self,x):
  12. x = re.sub(self.removeImg,"",x)
  13. x = re.sub(self.removeAddr,"",x)
  14. x = re.sub(self.replaceLine,"\n",x)
  15. x = re.sub(self.replaceBR,"\n",x)
  16. x = re.sub(self.removeExtraTag,"",x)
  17. x = re.sub(self.removeNoneLine,"\n",x)
  18. return x.strip()

事实上有的地方还是可以改进的,现在只是爬取韩寒博客的文章,下一个版本可以输入一个博客的网址,从输入的网址中爬取文章,有时间再改进改进吧。

发表评论

表情:
评论列表 (有 0 条评论,319人围观)

还没有评论,来说两句吧...

相关阅读