最近开始学习Python的爬虫,本来想着从基本的各种语法开始学习的但是在逛知乎的过程中发现了一个帖子是就是关于如何入门Python爬虫,里面有一个回答,https://www.zhihu.com/question/20899988/answer/24923424 这里面说的就是““入门”是良好的动机,但是可能作用缓慢。如果你手里或者脑子里有一个项目,那么实践起来你会被目标驱动,而不会像学习模块一样慢慢学习”,所以我决定了不从基础模块一个一个慢慢学习,直接从Python爬虫的一个一个小程序学习,若有不懂的地方就往前面基础部分翻。我慢慢发现其实很多内容都是相互联系的,而且在学习基础部分的时候不会在意这个东西究竟有什么作用而只是知道有这个一个东西存在。但是如果是自己实践起来,就能更深刻理解。
话不多说,我第一个爬虫程序参考了很多资料,目标是把一个人的新浪博客里的所有文章都保存下来。网络上面有教育机构的视频也是这么说的,但是我看了视频之后才发现视频的标题只是一个噱头,只是保存了博客所有文章的html网址在一个文件夹,而我希望是可编辑的文本格式。然而这本来就是难度等级不同的(起码对于刚接触Python语言的我而言)所以我决定自己参考资料写一个。
我以韩寒博客为例子。
思路是首先成功抓取一篇文章的内容(包括标题和正文内容),然后是抓取博客目录第一页一整页的文章,这里涉及一个问题是要先获得每篇文章的url然后再抓取文章,最后是观察不同页码的博客目录,找出共同点写一个函数对每一页都进行抓取,最后就大功告成。
def getText(self,url):
text=urlopen(url).read().decode('utf-8')
start=text.find(u"<!-- 正文开始 -->")
print start
end=text.find(u"<!-- 正文结束 -->")
print end
text=text[start:end]
text = re.sub(re.compile('<p.*?>'),"\n ",text)
text = re.sub(re.compile('<p>'),"\n ",text)
text=re.sub(r'<(S*?)[^>]*>.*?|<.*? /> ','',text)
text=re.sub(r'&[^>]*?\;',' ',text)
return text.encode('utf-8')
这个函数就是获取一篇文章的内容
def getUrl(self,page):
pattern =re.compile('<span class="atc_title">.*?<a.*?href="(.*?)">.*?</a>.*?</span>',re.S)
items = re.findall(pattern,page)
urls = []
for item in items: