投稿    登录
  《Python3网络爬虫开发实战》赠书活动正在进行中!详情请戳赠书活动!欢迎参与!非常感谢!

Python爬虫实战一之爬取糗事百科段子

Python 崔庆才 484030浏览 105评论

大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧。那么这次为大家带来,Python爬取糗事百科的小段子的例子。

首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来。

友情提示

糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的情况,是因为正则表达式没有匹配到的缘故。

现在,博主已经对程序进行了重新修改,代码亲测可用,包括截图和说明,之前一直在忙所以没有及时更新,望大家海涵!

更新时间:2015/8/2

糗事百科又又又又改版了,博主已经没心再去一次次匹配它了,如果大家遇到长时间运行不出结果也不报错的情况,请大家参考最新的评论,热心小伙伴提供的正则来修改下吧~

更新时间:2016/3/27

本篇目标

1.抓取糗事百科热门段子

2.过滤带有图片的段子

3.实现每按一次回车显示一个段子的发布时间,发布人,段子内容,点赞数。

糗事百科是不需要登录的,所以也没必要用到Cookie,另外糗事百科有的段子是附图的,我们把图抓下来图片不便于显示,那么我们就尝试过滤掉有图的段子吧。

好,现在我们尝试抓取一下糗事百科的热门段子吧,每按下一次回车我们显示一个段子。

1.确定URL并抓取页面代码

首先我们确定好页面的URL是 http://www.qiushibaike.com/hot/page/1,其中最后一个数字1代表页数,我们可以传入不同的值来获得某一页的段子内容。

我们初步构建如下的代码来打印页面代码内容试试看,先构造最基本的页面抓取方式,看看会不会成功

运行程序,哦不,它竟然报错了,真是时运不济,命途多舛啊

好吧,应该是headers验证的问题,我们加上一个headers验证试试看吧,将代码修改如下

嘿嘿,这次运行终于正常了,打印出了第一页的HTML代码,大家可以运行下代码试试看。在这里运行结果太长就不贴了。

2.提取某一页的所有段子

好,获取了HTML代码之后,我们开始分析怎样获取某一页的所有段子。

首先我们审查元素看一下,按浏览器的F12,截图如下

20150802154147

 

我们可以看到,每一个段子都是<div class=”article block untagged mb15″ id=”…”>…</div>包裹的内容。

现在我们想获取发布人,发布日期,段子内容,以及点赞的个数。不过另外注意的是,段子有些是带图片的,如果我们想在控制台显示图片是不现实的,所以我们直接把带有图片的段子给它剔除掉,只保存仅含文本的段子。

所以我们加入如下正则表达式来匹配一下,用到的方法是 re.findall 是找寻所有匹配的内容。方法的用法详情可以看前面说的正则表达式的介绍。

好,我们的正则表达式匹配语句书写如下,在原来的基础上追加如下代码

现在正则表达式在这里稍作说明

1).*? 是一个固定的搭配,.和*代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配,也就是我们会尽可能短地做匹配,以后我们还会大量用到 .*? 的搭配。

2)(.*?)代表一个分组,在这个正则表达式中我们匹配了五个分组,在后面的遍历item中,item[0]就代表第一个(.*?)所指代的内容,item[1]就代表第二个(.*?)所指代的内容,以此类推。

3)re.S 标志代表在匹配时为点任意匹配模式,点 . 也可以代表换行符。

这样我们就获取了发布人,发布时间,发布内容,附加图片以及点赞数。

在这里注意一下,我们要获取的内容如果是带有图片,直接输出出来比较繁琐,所以这里我们只获取不带图片的段子就好了。

所以,在这里我们就需要对带图片的段子进行过滤。

我们可以发现,带有图片的段子会带有类似下面的代码,而不带图片的则没有,所以,我们的正则表达式的item[3]就是获取了下面的内容,如果不带图片,item[3]获取的内容便是空。

所以我们只需要判断item[3]中是否含有img标签就可以了。

好,我们再把上述代码中的for循环改为下面的样子

现在,整体的代码如下

运行一下看下效果

20150802154832

恩,带有图片的段子已经被剔除啦。是不是很开森?

3.完善交互,设计面向对象模式

好啦,现在最核心的部分我们已经完成啦,剩下的就是修一下边边角角的东西,我们想达到的目的是:

按下回车,读取一个段子,显示出段子的发布人,发布日期,内容以及点赞个数。

另外我们需要设计面向对象模式,引入类和方法,将代码做一下优化和封装,最后,我们的代码如下所示

好啦,大家来测试一下吧,点一下回车会输出一个段子,包括发布人,发布时间,段子内容以及点赞数,是不是感觉爽爆了!

我们第一个爬虫实战项目介绍到这里,欢迎大家继续关注,小伙伴们加油!

转载请注明:静觅 » Python爬虫实战一之爬取糗事百科段子

喜欢 (1441)or分享 (0)

我的个人微信公众号,联系我请直接在公众号留言即可~

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

想结交更多的朋友吗?

来进击的Coder瞧瞧吧

进击的Coder

QQ群号 99350970 立即加入

进击的Coder灌水太多?

这里是纯粹的技术领地

激进的Coder

QQ群号 627725766 立即加入

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(105)个小伙伴在吐槽
  1. Below youll discover the link to some web sites that we consider you must visit.
    Google2018-11-17 20:51 (11小时前)回复
  2. Heya i am for the first time here. I found this board and I find It really useful & it helped me out much. I hope to offer something back and aid others like you aided me.
    free tik tok followers hack tool2018-11-16 22:51 (1天前)回复
  3. Free Musically Followers Generator 2018 Get from this: TikTok Hack Tool 2019 Web Blog Tiktok LIKES HACK 2018 TikTok Free Heart Hacks GET FREE Tiktok FOLLOWERS WITHOUT DOWNLOADING APPS OR SURVEY OR HUMAN VERIFICATION 2019 Tiktok LIKES HACK NEW UPDATE
    DegiLow2018-11-05 05:25 回复
  4. >FREE Musical.ly Hack 2019 Get from this: TikTok Hack Tool 2019 Web Blog HOW TO GET FREE Tiktok FOLLOWERS WITHOUT DOWNLOADING APPS 2019 Tik Tok Free Followers 2018 FREE Tik Tok FOLLOWERS NO VERIFICATION 2019 FREE Tiktok FOLLOWERS WITHOUT DOWNLOADING ANY APPS 2019
    DegiLow2018-11-05 01:39 回复
  5. I was recommended this web site by my cousin. I am not sure whether this post is written by him as nobody else know such detailed about my difficulty. You're wonderful! Thanks!
    web page2018-11-02 03:11 回复
  6. 美丽世界sf搭建_乱勇OLsf搭建_倚天2sf搭建_完美世界sf搭建_征服sf搭建热血江湖开服一条龙制作48ea.comQQ49333685 [url=http://www.49ic.com/]劲舞团开服一条龙制作49ic.comQQ1207542352[/url]
  7. http://ahhulinjuan.blog.163.com/blog/static/2199411632017112934554331/ 参照楼主用python3做的,能用
    静觅网友2017-12-29 17:04 回复
  8. http://ahhulinjuan.blog.163.com/blog/static/2199411632017112934554331/ 参照楼主用python3做的,能用
    静觅网友2017-12-29 17:04 回复
  9. http://ahhulinjuan.blog.163.com/blog/static/2199411632017112934554331/ 用python3做的,有用
    静觅网友2017-12-29 17:03 回复
  10. content和number之后加双引号
    静觅网友2017-12-06 20:54 回复
  11. 'h2&gt;(.*?)&lt;/h2.*?content.*?span&gt;(.*?)&lt;/.*?!--.*?--&gt;(.*?)&lt;/.*?number&gt;(.*?)&lt;/i&gt;' 发布人,发布内容,图片信息,点赞数
    静觅网友2017-12-06 20:52 回复
  12. 我用3.5写了一遍遇到点问题,可以的话加qq1281538933想讨论一下
    静觅网友2017-11-12 14:19 回复
  13. Tunnel connection failed: 407 Proxy Authentication Required 提示这种错误,怎么办
    静觅网友2017-10-25 10:17 回复
  14. 今天刚根据作者的代码试了一下,发现即使加上headers也会出现BadStatusLine异常,查了半天也没发现是什么原因,有知道的吗?
    静觅网友2017-10-09 23:25 回复
  15. r'&lt;div class=article.*?&lt;h2&gt;(.*?)&lt;/h2&gt;.*?&lt;span&gt;(.*?)&lt;/span&gt;.*?&lt;span class=stats-vote&gt;&lt;i class=number&gt;(.*?)&lt;/i&gt;' 发布人,发布内容,点赞数
    匿名2017-09-29 16:34 回复
1 5 6 7