摘要:本次主要是爬取网易新闻,包括新闻标题作者来源发布时间新闻正文。既然现在已经获取到了内容页的,那么接下来开始抓取新闻正文。
此文属于入门级级别的爬虫,老司机们就不用看了。
本次主要是爬取网易新闻,包括新闻标题、作者、来源、发布时间、新闻正文。
首先我们打开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/0...*).js
上面的连接也就是我们本次抓取所要请求的地址。
接下来只需要用到的python的两个库:
requests
json
BeautifulSoup
requests库就是用来进行网络请求的,说白了就是模拟浏览器来获取资源。
由于我们采集的是api接口,它的格式为json,所以要用到json库来解析。BeautifulSoup是用来解析html文档的,可以很方便的帮我们获取指定div的内容。
下面开始编写我们爬虫:
第一步先导入以上三个包:
import json import requests from bs4 import BeautifulSoup
接着我们定义一个获取指定页码内数据的方法:
def get_page(page): url_temp = "http://temp.163.com/special/00804KVA/cm_guonei_0{}.js" return_list = [] for i in range(page): url = url_temp.format(i) response = requests.get(url) if response.status_code != 200: continue content = response.text # 获取响应正文 _content = formatContent(content) # 格式化json字符串 result = json.loads(_content) return_list.append(result) return return_list
这样子就得到每个页码对应的内容列表:
之后通过分析数据可知下图圈出来的则是需要抓取的标题、发布时间以及新闻内容页面。
既然现在已经获取到了内容页的url,那么接下来开始抓取新闻正文。
在抓取正文之前要先分析一下正文的html页面,找到正文、作者、来源在html文档中的位置。
我们看到文章来源在文档中的位置为:id = "ne_article_source" 的 a 标签。
作者位置为:class = "ep-editor" 的 span 标签。
正文位置为:class = "post_text" 的 div 标签。
下面试采集这三个内容的代码:
def get_content(url): source = "" author = "" body = "" resp = requests.get(url) if resp.status_code == 200: body = resp.text bs4 = BeautifulSoup(body) source = bs4.find("a", id="ne_article_source").get_text() author = bs4.find("span", class_="ep-editor").get_text() body = bs4.find("div", class_="post_text").get_text() return source, author, body
到此为止我们所要抓取的所有数据都已经采集了。
那么接下来当然是把它们保存下来,为了方便我直接采取文本的形式来保存。下面是最终的结果:
格式为json字符串,“标题” : [ ‘日期’, ‘url’, ‘来源’, ‘作者’, ‘正文’ ]。
要注意的是目前实现的方式是完全同步的,线性的方式,存在的问题就是采集会非常慢。主要延迟是在网络IO上,下次可以升级为异步IO,异步采集,有兴趣的可以关注下次的文章。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/42498.html
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
摘要:前言开发爬虫是一件有趣的事情。的可配置爬虫是基于的,因此天生是支持并发的。遵守协议这个默认是开启的。的可配置爬虫降低了爬虫的开发时间,增加了爬虫开发效率,完善了工程化水平,将爬虫工程师从日常的繁琐配置工作中解放出来。 前言 开发爬虫是一件有趣的事情。写一个程序,对感兴趣的目标网站发起HTTP请求,获取HTML,解析HTML,提取数据,将数据保存到数据库或者存为CSV、JSON等格式,再...
摘要:前言开发爬虫是一件有趣的事情。的可配置爬虫是基于的,因此天生是支持并发的。的可配置爬虫降低了爬虫的开发时间,增加了爬虫开发效率,完善了工程化水平,将爬虫工程师从日常的繁琐配置工作中解放出来。前言 开发爬虫是一件有趣的事情。写一个程序,对感兴趣的目标网站发起HTTP请求,获取HTML,解析HTML,提取数据,将数据保存到数据库或者存为CSV、JSON等格式,再用自己熟悉的语言例如Python对...
摘要:学习网络爬虫主要分个大的版块抓取,分析,存储另外,比较常用的爬虫框架,这里最后也详细介绍一下。网络爬虫要做的,简单来说,就是实现浏览器的功能。 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下。 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫,当我们在浏览器中输入...
摘要:开始,加入了新的语法,和这两个关键字,也成了标准库,这对于我们写异步的程序来说就是如虎添翼,让我们轻而易举的实现一个定向抓取新闻的异步爬虫。网址池异步爬虫的所有流程不能单单用一个循环来完成,它是多个循环至少两个相互作用共同完成的。 showImg(https://segmentfault.com/img/bVbsjjR?w=742&h=487); Python写爬虫是非常方便的,爬取的...
阅读 3527·2021-11-22 15:11
阅读 4576·2021-11-18 13:15
阅读 2673·2019-08-29 14:08
阅读 3521·2019-08-26 13:49
阅读 3055·2019-08-26 12:17
阅读 3255·2019-08-26 11:54
阅读 3087·2019-08-26 10:58
阅读 1993·2019-08-26 10:21