抓取网页新闻(此文属于入门级级别的爬虫,老司机们就不用看了)
优采云 发布时间: 2021-11-02 02:05抓取网页新闻(此文属于入门级级别的爬虫,老司机们就不用看了)
本文属于入门级爬虫,老司机无需阅读。
这次主要是抓取网易新闻,包括新闻标题、作者、来源、发布时间、新闻正文。
首先我们打开163的网站,我们随意选择一个分类,这里我选择的分类是国内新闻。然后右键查看源码,发现源码中页面中间没有新闻列表。这说明这个页面是异步的。即通过api接口获取的数据。
然后确定后就可以用F12打开谷歌浏览器的控制台,点击Network,我们一直往下拉,发现右侧出现:“... special/00804KVA/cm_guonei_03.js? ...”等地址,点击Response发现就是我们要找的api接口。
可以看到这些接口的地址有一定的规律:“cm_guonei_03.js”、“cm_guonei_04.js”,那么就很明显了:
(*).js
上面的链接是我们这次抓取请求的地址。
接下来只需要两个python库:
1.请求
2.json
3.美汤
requests 库用于发出网络请求。说白了就是模拟浏览器获取资源。
由于我们的采集是一个api接口,它的格式是json,所以我们需要使用json库来解析。BeautifulSoup用于解析html文档,可以方便的帮助我们获取指定div的内容。
让我们开始编写我们的爬虫:
第一步是导入以上三个包:
然后我们定义一个方法来获取指定页码中的数据:
这样就得到了每个页码对应的内容列表:
对数据进行分析后,我们可以看到下图中圈出了需要爬取的标题、发布时间、新闻内容页面。
既然已经获取到内容页面的url,那么就开始爬取新闻正文。
在抓取文本之前,分析文本的html页面,找到文本、作者、来源在html文档中的位置。
我们看到文章的source在文档中的位置是:id = "ne_article_source"的标签。
作者的立场是:span标签,class="ep-editor"。
正文位置是:带有 class = "post_text" 的 div 标签。
下面采集这三个内容的代码:
到目前为止,我们要抓取的数据都是采集。
然后,当然,保存它们。为了方便起见,我直接以文本的形式保存它们。这是最终结果:
格式为json字符串,"title": ['date','url','source','author','body']。
需要说明的是,目前的实现方式是完全同步和线性的。问题是 采集 会很慢。主要延迟在网络IO,下次可以升级为异步IO,异步采集,有兴趣的可以关注下文章。