python爬虫案例:抓取网易新闻

此文属于入门级级别的爬虫,老司机们就不用看了。

本次主要是爬取网易新闻,包括新闻标题、作者、来源、发布时间、新闻正文。

首先我们打开163的网站,我们随意选择一个分类,这里我选的分类是国内新闻。然后鼠标右键点击查看源代码,发现源代码中并没有页面正中的新闻列表。这说明此网页采用的是异步的方式。也就是通过api接口获取的数据。

那么确认了之后可以使用F12打开谷歌浏览器的控制台,点击 Network,我们一直往下拉,发现右侧出现了:"… special/00804KVA/cm_guonei_03.js? … "之类的地址,点开Response发现正是我们要找的api接口。

可以看到这些接口的地址都有一定的规律:“cm_guonei_03.js”、“cm_guonei_04.js”,那么就很明显了:

http://temp.163.com/special/00804KVA/cm_guonei_0(*).js

上面的链接也就是我们本次抓取所要请求的地址。

接下来只需要用到的python的两个库:

1.requests

2.json

3.BeautifulSoup

requests库就是用来进行网络请求的,说白了就是模拟浏览器来获取资源。

由于我们采集的是api接口,它的格式为json,所以要用到json库来解析。BeautifulSoup是用来解析html文档的,可以很方便的帮我们获取指定div的内容。

下面开始编写我们爬虫:

第一步先导入以上三个包:


接着我们定义一个获取指定页码内数据的方法:


这样子就得到每个页码对应的内容列表:


之后通过分析数据可知下图圈出来的则是需要抓取的标题、发布时间以及新闻内容页面。

既然现在已经获取到了内容页的url,那么接下来开始抓取新闻正文。

在抓取正文之前要先分析一下正文的html页面,找到正文、作者、来源在html文档中的位置

我们看到文章来源在文档中的位置为:id = “ne_article_source” 的 a 标签。

作者位置为:class = “ep-editor” 的 span 标签。

正文位置为:class = “post_text” 的 div 标签。

下面采集这三个内容的代码:


到此为止我们所要抓取的所有数据都已经采集了。

那么接下来当然是把它们保存下来,为了方便我直接采取文本的形式来保存。下面是最终的结果:


格式为json字符串,“标题” : [ ‘日期’, ‘url’, ‘来源’, ‘作者’, ‘正文’ ]。

要注意的是目前实现的方式是完全同步的,线性的方式,存在的问题就是采集会非常慢。主要延迟是在网络IO上,下次可以升级为异步IO,异步采集,有兴趣的可以关注下次的文章。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,860评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,834评论 2 59
  • “发现美的眼睛”打卡已达成23天,在打卡小程序中点亮了一颗星星,但并不是非常的兴奋,因为自己很清楚这打卡23天是肯...
    莉言碎语阅读 133评论 0 0
  • 1.追热点时要避开的四个坑 急于表达,常被打脸 赚了流量,失了民心 追的太快,浪费推送 角度不对,不符定位 2.寻...
    lee_eternity阅读 566评论 0 0
  • Filter的基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理的前...
    禅与发现的乐趣阅读 816评论 0 1