专栏首页北京马哥教育小白用Python | Python scrapy抓取学院新闻报告

小白用Python | Python scrapy抓取学院新闻报告

任务

抓取四川大学公共管理学院官网(http://ggglxy.scu.edu.cn)所有的新闻咨询.

实验流程

1.确定抓取目标. 2.制定抓取规则. 3.'编写/调试'抓取规则. 4.获得抓取数据

1.确定抓取目标

我们这次需要抓取的目标为四川大学公共管理学院的所有新闻资讯.于是我们需要知道公管学院官网的布局结构.

这里我们发现想要抓到全部的新闻信息,不能直接在官网首页进行抓取,需要点击"more"进入到新闻总栏目里面.

我们看到了具体的新闻栏目,但是这显然不满足我们的抓取需求: 当前新闻动态网页只能抓取新闻的时间,标题和URL,但是并不能抓取新闻的内容.所以我们想要需要进入到新闻详情页抓取新闻的具体内容.

2.制定抓取规则

通过第一部分的分析,我们会想到,如果我们要抓取一篇新闻的具体信息,需要从新闻动态页面点击进入新闻详情页抓取到新闻的具体内容.我们点击一篇新闻尝试一下

们发现,我们能够直接在新闻详情页面抓取到我们需要的数据:标题,时间,内容.URL.

好,到现在我们清楚抓取一篇新闻的思路了.但是,如何抓取所有的新闻内容呢? 这显然难不到我们.

我们在新闻栏目的最下方能够看到页面跳转的按钮.那么我们可以通过"下一页"按钮实现抓取所有的新闻.

那么整理一下思路,我们能够想到一个显而易见的抓取规则: 通过抓取'新闻栏目下'所有的新闻链接,并且进入到新闻详情链接里面抓取所有的新闻内容.

3.'编写/调试'抓取规则

为了让调试爬虫的粒度尽量的小,我将编写和调试模块糅合在一起进行. 在爬虫中,我将实现以下几个功能点:

1.爬出一页新闻栏目下的所有新闻链接 2.通过爬到的一页新闻链接进入到新闻详情爬取所需要数据(主要是新闻内容) 3.通过循环爬取到所有的新闻.

分别对应的知识点为:

1.爬出一个页面下的基础数据. 2.通过爬到的数据进行二次爬取. 3.通过循环对网页进行所有数据的爬取.

话不多说,现在开干.

3.1爬出一页新闻栏目下的所有新闻链接

通过对新闻栏目的源代码分析,我们发现所抓数据的结构为

那么我们只需要将爬虫的选择器定位到(li:newsinfo_box_cf),再进行for循环抓取即可.

编写代码

测试,通过!

3.2通过爬到的一页新闻链接进入到新闻详情爬取所需要数据(主要是新闻内容)

现在我获得了一组URL,现在我需要进入到每一个URL中抓取我所需要的标题,时间和内容,代码实现也挺简单,只需要在原有代码抓到一个URL时进入该URL并且抓取相应的数据即可.所以,我只需要再写一个进入新闻详情页的抓取方法,并且使用scapy.request调用即可.

编写代码

整合进原有代码后,有:

测试,通过!

这时我们加一个循环:

加入到原本代码:

测试:

抓到的数量为191,但是我们看官网发现有193条新闻,少了两条. 为啥呢?我们注意到log的error有两条: 定位问题:原来发现,学院的新闻栏目还有两条隐藏的二级栏目: 比如:

对应的URL为

URL都长的不一样,难怪抓不到了! 那么我们还得为这两条二级栏目的URL设定专门的规则,只需要加入判断是否为二级栏目:

组装原函数:

测试:

4.获得抓取数据

http://www.cnblogs.com/jiaoyu121/p/6954104.html

本文分享自微信公众号 - 马哥Linux运维(magedu-Linux)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-06-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 想要自己搭建NAS服务器?看这篇文章,小白也能学会!(一)

    ? NAS即网络附加存储(Network Attached Storage),通过网络提供数据访问服务。 本人不推荐自攒NAS,稳定性差,迷你主板和家用机电源...

    小小科
  • 2016年度中国Oracle数据库使用现状分析报告

    云和恩墨旗下智能诊断平台Bethune今日发布了【2016年度中国Oracle数据库使用现状分析报告】,该报告采样2016年度国内18个大行业、485位用户(个...

    小小科
  • 只要十分钟,用Python实现自动化水军评论

    作者:gavinfish 来源: http://blog.csdn.net/u013291394/article/details/50527463 玩csdn博...

    小小科
  • 一文教你用 Neo4j 快速构建明星关系图谱

    本文将带你用 neo4j 快速实现一个明星关系图谱,因为拖延的缘故,正好赶上又一年的4月1日,于是将文中的几个例子顺势改成了“哥哥”张国荣。正所谓“巧妇难为无米...

    古柳_DesertsX
  • Java集合类操作优化经验总结

    本文首先针对 Java 集合接口进行了一些介绍,并对这些接口的实现类进行详细描述,包括 LinkedList、ArrayList、Vector、Stack、Ha...

    用户1667431
  • 集合类操作优化经验总结

    在实际的项目开发中会有很多的对象,如何高效、方便地管理对象,成为影响程序性能与可维护性的重要环节。Java 提供了集合框架来解决此类问题,线性表、链表、哈希表等...

    哲洛不闹
  • 使用commons-configuration2读取properties、yaml、xml配置文件,实现配置文件的热更新【享学Java】

    Apache Commons Configuration是apache commons组件中的又一实用工具。它的官网介绍如下:

    BAT的乌托邦
  • Python使用Scrapy框架爬虫(一)

    1.首先我们需要安装scrapy模块,pip install scrapy ,不过这种方式经常会遇到许多未知的bug

    黄林晴
  • 【文献】 新一代测序技术(NGS) 的十年之旅

    标题:Coming of age: ten years of next-generation sequencing technologies

    生信技能树
  • 使用docsify 写开源文档

    这将非常实用,如果只是需要快速的搭建一个小型的文档网站,或者不想因为生成的一堆 .html 文件“污染” commit 记录,只需要创建一个 index.htm...

    Jackson0714

扫码关注云+社区

领取腾讯云代金券