Python爬虫抓取csdn博客
来源:互联网 发布:ug8.0编程中的如何补面 编辑:程序博客网 时间:2024/04/29 21:29
昨天晚上为了下载保存某位csdn大牛的全部博文,写了一个爬虫来自动抓取文章并保存到txt文本,当然也可以 保存到html网页中。这样就可以不用Ctrl+C 和Ctrl+V了,非常方便,抓取别的网站也是大同小异。
为了解析抓取的网页,用到了第三方模块,BeautifulSoup,这个模块对于解析html文件非常有用,当然也可以自己使用正则表达式去解析,但是比较麻烦。
由于csdn网站的robots.txt文件中显示禁止任何爬虫,所以必须把爬虫伪装成浏览器,而且不能频繁抓取,得sleep一会再抓,使用频繁会被封ip的,但可以使用代理ip。
#-*- encoding: utf-8 -*-'''Created on 2014-09-18 21:10:39@author: Mangoer@email: 2395528746@qq.com'''import urllib2import refrom bs4 import BeautifulSoupimport randomimport timeclass CSDN_Blog_Spider: def __init__(self,url): print '\n' print('已启动网络爬虫。。。') print '网页地址: ' + url user_agents = [ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11', 'Opera/9.25 (Windows NT 5.1; U; en)', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)', 'Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12', 'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9', "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7", "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 ", ] # use proxy ip # ips_list = ['60.220.204.2:63000','123.150.92.91:80','121.248.150.107:8080','61.185.21.175:8080','222.216.109.114:3128','118.144.54.190:8118', # '1.50.235.82:80','203.80.144.4:80'] # ip = random.choice(ips_list) # print '使用的代理ip地址: ' + ip # proxy_support = urllib2.ProxyHandler({'http':'http://'+ip}) # opener = urllib2.build_opener(proxy_support) # urllib2.install_opener(opener) agent = random.choice(user_agents) req = urllib2.Request(url) req.add_header('User-Agent',agent) req.add_header('Host','blog.csdn.net') req.add_header('Accept','*/*') req.add_header('Referer','http://blog.csdn.net/mangoer_ys?viewmode=list') req.add_header('GET',url) html = urllib2.urlopen(req) page = html.read().decode('gbk','ignore').encode('utf-8') self.page = page self.title = self.getTitle() self.content = self.getContent() self.saveFile() def printInfo(self): print('文章标题是: '+self.title + '\n') print('内容已经存储到out.txt文件中!') def getTitle(self): rex = re.compile('<title>(.*?)</title>',re.DOTALL) match = rex.search(self.page) if match: return match.group(1) return 'NO TITLE' def getContent(self): bs = BeautifulSoup(self.page) html_content_list = bs.findAll('div',{'id':'article_content','class':'article_content'}) html_content = str(html_content_list[0]) rex_p = re.compile(r'(?:.*?)>(.*?)<(?:.*?)',re.DOTALL) p_list = rex_p.findall(html_content) content = '' for p in p_list: if p.isspace() or p == '': continue content = content + p return content def saveFile(self): outfile = open('out.txt','a') outfile.write(self.content) def getNextArticle(self): bs2 = BeautifulSoup(self.page) html_nextArticle_list = bs2.findAll('li',{'class':'prev_article'}) # print str(html_nextArticle_list[0]) html_nextArticle = str(html_nextArticle_list[0]) # print html_nextArticle rex_link = re.compile(r'<a href=\"(.*?)\"',re.DOTALL) link = rex_link.search(html_nextArticle) # print link.group(1) if link: next_url = 'http://blog.csdn.net' + link.group(1) return next_url return Noneclass Scheduler: def __init__(self,url): self.start_url = url def start(self): spider = CSDN_Blog_Spider(self.start_url) spider.printInfo() while True: if spider.getNextArticle(): spider = CSDN_Blog_Spider(spider.getNextArticle()) spider.printInfo() elif spider.getNextArticle() == None: print 'All article haved been downloaded!' break time.sleep(10)#url = input('请输入CSDN博文地址:')url = "http://blog.csdn.net/mangoer_ys/article/details/38427979"Scheduler(url).start()
程序中有个问题一直不能解决:不能使用标题去命名文件,所以所有的文章全部放在一个out.txt中,说的编码的问题,希望大神可以解决这个问题。
4 0
- Python爬虫抓取csdn博客
- python爬虫之python2.7.8抓取csdn博客文章
- python爬虫CSDN文章抓取
- Hello Python!用python写一个抓取CSDN博客文章的简单爬虫
- Python爬虫实例- CSDN博客爬虫
- python抓取csdn博客文章信息
- python爬虫之csdn刷博客访问量
- python爬虫代码-CSDN博客下载
- python 爬虫 CSDN博客下载-改进版
- python爬虫爬取csdn博客专家所有博客内容
- python爬虫抓取图片
- Python爬虫抓取
- python 爬虫抓取奥数题
- python爬虫抓取-helloworld
- python 爬虫 基本抓取
- Python实现抓取CSDN博客首页文章列表
- csdn博客爬虫更新
- Python爬虫自动获取CSDN博客收藏文章
- iOS开发--跳转进入AppStore评论页面
- eclipse 使用CheckStyle实施编码标准
- 《登高》 杜甫
- 在微信公众平台前端网页上添加分享按钮
- CentOS6.0解决音乐乱码
- Python爬虫抓取csdn博客
- IPHONE6 近来1年不会开放NFC的API给开发者,也就是只能用来做支持了现在
- 欢迎使用主机宝
- 细谈Lucene(一):初识全文资源的检索框架lucene
- Netty5源码分析(三) -- Channel如何注册OP_ACCEPT, OP_READ, OP_WRITE
- zoj 2778 - Triangular N-Queens Problem
- 问题11:参数文件spfile丢失的情况下,如何恢复?
- Copy from chromium-dev!
- 快速求幂