导读:
最近越来越意识到数据的重要了,于是开始学习爬虫。
在网上买了两本爬虫类的书籍——《Python网络爬虫 从入门到实践》(唐松、陈智铨编著)和《Python3网络爬虫开发实战》(廖雪峰著)。
因为后者太厚了,所以先看唐松和陈智铨的那本。不用担心,两本书上的代码都可以在Python3.6版本中运行通过。
当然,由于爬虫的目标网站改版,所以唐松在知乎和他的个人博客更新了部分章节,在网上搜他的名字就能搜到了。
最后在网上找到了一个网站,觉得这个网站上有些内容不错,而且还是静态的,正好可以练练手。
关于对此站的爬取,一共分两篇写完:
在本篇中爬取此站的一个栏目,而且是用单线程,爬取的数据存储在txt文件中。
在下一篇中,我用多线程来爬取全站的内容,然后用其他格式存储数据(看情况)。
正文:
运行环境:Windows10,Python3.6,浏览器用Chrome。
过程分三步:
分析源码并爬取所有文章链接
用BeautifulSoup解析数据得到文章内容
将文章内容存储于同一目录下的txt文件中
1.分析源码并爬取所有文章链接
打开Chrome浏览器,输入网址进入“新成博客”,然后点击”好文“分类,这一栏目下的文章就是我这次要爬取的目标。
(1)分析源码
右击鼠标点击“检查”,点击右侧的“Elements”,然后就能看到源代码了。
我们可以看到文章在一对对的“article”标签中,“article”标签里有“h4”标签,“h4”标签里有个“a”标签,提取出“a”标签的“href”属性的值,那就是单个的文章链接了。
不过这不是完整的链接。
按住“Ctrl”键的同时鼠标点击这个链接,可以看到完整的链接:
http://zhanxincheng.com/180703213131.html
所以,我们只要从页面中提取出所有这样的href属性的值,然后再在前面加上"http://zhanxincheng.com"就是完整的文章的链接了。
以下是得到本页所有完整的文章链接的代码,我把它放到一个函数当中:
(2)得到所有文章链接
我们发现“好文”栏目下的文章共4页,55篇。
点击第2页,链接是http://zhanxincheng.com/list-5-2.html
点击第3页,链接是http://zhanxincheng.com/list-5-3.html
如此可知,'http://zhanxincheng.com/list-5-'后面加上1、2、3、4这几个数字和'.html'就能得到四个页面了。
写一个函数,用于得到4个页面的所有文章链接:
用BeautifulSoup解析数据找到文章内容
我们从all_link中选中一个链接,分析其源码,得到内容,最后以文章标题为文件名保存它们。
如这个链接:
http://zhanxincheng.com/160727191742.html
找到class值为“post-content”的div,在这个div中有一对对的p标签,标签中的内容就是文章内容。
提取数据并存储于同一目录下的txt文件中
每个p标签中的内容不带换行,所以要给它加上换行符再写入文档。
代码如下:
这个函数接收一个文章链接,然后把文章内容写入一个txt文件,文件名就是标题。
最后再写一个main()函数,其内容如下:
最后,为了让程序在遇到意外的时候还能继续运行,要加上try...except。不要加在main()函数里,而是加在main之外的其他函数当中。
领取专属 10元无门槛券
私享最新 技术干货