来看看咱们这个实例使用到的网址,你们能够先打开看看:http://blog.jobbole.com/all-posts/
python
咱们要作的第一步就是从这个网页中获取最新文章的标题和网址。能够看到,网页上每一页显示20篇文章,并且通过我几天的观察,天天更新的文章也就三四篇,这就意味着,若是咱们每次获取20篇文章的话,确定会有大部分是重复的,然而事实上咱们只须要获取天天最新发布的文章,好在,每篇文章上都写有发布日期,并且在源码中也很容易找获得,就像这样,全部发布的文章都是按照这个形式在源码中进行编写的,这段代码咱们后面的分析中也会常常用到app
<!-- BEGIN .post-meta --> <div class="post-meta"> <p> <a class="archive-title" target="_blank" href="http://blog.jobbole.com/97162/" title="这样的谷歌街景,你确定没见过">这样的谷歌街景,你确定没见过</a><br /> 2016/01/14 · <a href="http://blog.jobbole.com/category/geeks/" title="查看 极客 中的所有文章" rel="category tag">极客</a> · <a href="http://blog.jobbole.com/97162/#comments" title="《这样的谷歌街景,你确定没见过》上的评论">2 条评论</a> </p> <span class="excerpt"><p>在德国港口城市汉堡有个历史悠久的城区叫库房区,其中有一个著名的旅游景点:微缩仙境。它是世界上最大的铁路微缩模型系统,因此也被称之为「微缩火车乐园」。你可能在现场参观,但你绝对从这个特别的视角来欣赏。</p> </span> <p class="align-right"><span class="read-more"><a target="_blank" href="http://blog.jobbole.com/97162/">阅读全文 »</a></span></p> </div> <!-- END .post-meta -->
那么,应该怎么从上面那段代码中获取咱们想要的文章网址,标题,和发布时间呢post
到如今为止,咱们一共学习了两种获取网页信息的方法,BS4和RE,可是,究竟使用哪种方法比较好学习
首先来讲说RE,根据对网页源码的分析,很容易将RE写出来url
re.compile(r'class="archive-title".*?href="(.*?)".*?title="(.*?)">.*?<br />(.*?)<a.*?',re.S)
结果是这样的:spa
好吧,虽然格式上有一些不尽如人意可是总算将咱们须要的东西获取出来了,如今来看看BS4实现的代码是怎样的code
经过对网页源码的分析咱们知道文章的网址和标题是在tag的属性里面的,日期是tag外面的文本blog
<a class="archive-title" target="_blank" href="http://blog.jobbole.com/97162/" title="这样的谷歌街景,你确定没见过">这样的谷歌街景,你确定没见过</a><br /> 2016/01/14 ·
也就是说,咱们的BS4须要同时获取标签内的属性和标签外的文本,这好像在前面的学习中没有遇到过,我通过了不少次尝试也没能只使用BS4同时将这三个信息获取出来,因此选了一个择中的方法,先分别获取全部的信息再一次性输出出来get
date_list = [] url_list = [] title_list = [] # get the date and add to a list for item in soup.find_all(attrs = {"class":"post-meta"}): date = re.findall(r'\d{4}/\d{2}/\d{2}',item.get_text()) if date: date_list.append(date) # get href ,title and add to list for mess in soup.find_all(attrs = {"class":"archive-title"}): url = mess.get('href') url_list.append(url) title = mess.get('title') title_list.append(title) # printout the message for i in range(len(date_list)): print date_list[i], url_list[i], title_list[i]
结果以下:源码
这里暂时先使用RE,因而可知BS4也不是全能的,咱们再来看看怎么将时间处理到咱们想要的格式,从前面的结果看咱们获取的时间是这样一种格式的:
2016/01/14 ·
可是这并非我想要的结果,它带有的空格和乱七八糟的字符真的是影响个人视线,我想要的是"2016/01/14"这样的日期,因此为了实现个人想法,还须要对时间这部分进行处理