python爬取新闻网站内容_python爬虫案例:抓取网易新闻

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

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

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

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

1460000016494364?w=1168&h=457

可以看到这些接口的地址都有一定的规律:“cm_guonei_03.js”、 “cm_guonei_04.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

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

1460000016494365?w=1005&h=574

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

1460000016494366

既然现在已经获取到了内容页的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

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

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

1460000016494367

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何查看QQ和微信查看授权过那些应用?

平时生活中,要登录一些网站或者app时,为了省事儿,都用第三方登录,登录是简单快捷了一些 时间长了,授权过的那些应用都不知道了,甚至一些应用你没用去授权权限也一直开放给别人网站的 所以为了自己帐号的安全还是有必…

C# ASP.NET MVC 图片上传的多种方式(存储至服务器文件夹,阿里云oss)

图片上传时我们进场用到的一个功能今天将他整理了一下写了个demo希望对大家有用 该demo分为如下 1.上传至至服务器文件夹 2.上传至阿里云oss 3.百度webupload上传图片 效果图如下: 首先讲解一下后台代码 (1)上传至服务器存储 using System; using System.Collections; u…

java变量命名规则_浅谈JAVA开发规范与开发细节(上)

开发团队在开发过程中,由于每个人的开发习惯,以及对于技术的理解深浅程度不一,往往一个项目在开发过程中,代码的质量,代码的风格都不尽相似,所以有一份适合团队的代码规范是非常有必要的,而一个…

Charles

安装 https://www.jianshu.com/p/cb744a4c0344 https://blog.csdn.net/qq_28831197/article/details/81196571 使用说明: 来源:https://www.jianshu.com/p/73b134559c76 过滤网络请求 通常情况下,我们需要对网络请求进行过滤,只监…

.NET Core Docker使用初入篇

本篇内容如何在CentOS上安装Docker服务器与工具准备安装Docker更新系统安装Docker源设置Docker开机启动启动Docker使用Docker运行一个.NET Core 例子.net core 例子拉取.net core 例子停止.net core 例子启用其他如何在CentOS上安装Docker 服务器与工具准备 首先我们需要一个…

如何延长作用域链_第4部分2:作用域(链)和 闭包

知识列表作用域/作用域链 闭包(涉及JS垃圾回收机制 )https://zhuanlan.zhihu.com/p/27110726 【 js 基础 】【读书笔记】作用域和闭包https://juejin.im/post/5afb0ae56fb9a07aa2138425 深入理解闭包之前置知识→作用域与词法作用域(一&#…

C# T4模板在项目中的使用

1.什么是t4模版 T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit。 T4(Text Template Transformation Toolkit)是微软官方在VisualStudio 2008中开始使用的代码生成引擎。在 Visual Studio 中,“T4 文本模板”是由一些文…

Docker中安装Jenkins实时发布.net core 项目(一)

Docker中安装Jenkins实时发布.net core 项目安装docker懒人篇手动安装dockerfile安装jenkins常规安装jenkinsjenkins的安装搜索jenkins拉取jenkins容器jenkins的启动jenkins密码其他安装docker 使用curl安装最新版 curl -fsSL https://get.docker.com/ | sh重启Docker systemc…

Docker中安装Jenkins实时发布.net core 项目(二)

Docker中安装Jenkins实时发布.net core 项目防坑点升级dockerjenkins运行运行命令jenkins拉取git并构建项目其他查看发布文件防坑点 升级docker 首先我们要确认我们在liunx安装的不是1.31.1的docker容器不然在后面的运行中会报错 can not open /etc/sysconfig/docker如果你是…

Jenkins构建 netcore5.0 项目时出现NU3028/NU3037错误的解决方案

我在使用Jenkins自动化部署项目的时候,出现了如下的错误 error NU3028: Package System.IO.Compression 4.3.0 from source https://api.nuget.org/v3/index.json: The repository primary signatures timestamp found a chain building issue: UntrustedRoot: self…

2019长安大学ACM校赛网络同步赛 L XOR

题意 求区间内有多少数x满足x^4x^5x0 1≤l≤r≤1018. 题解 根据异或的性质可以推到 x^4x5x -->x^4xx4x 即x和4x每一位都不同&#xff0c;即x和(x<<2)每一位都不同&#xff0c;就是x中每一位都与他前前一位不同。 那么就很简单了&#xff0c;可以很容易写出数位DP状态f…

贝塞尔曲线 总结

Bzier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线。 曲线定义&#xff1a;起始点、终止点&#xff08;也称锚点&#xff09;、控制点。通过调整控制点&#xff0c;贝塞尔曲线的形状会发生变化。 1962年&#xff0c;法国数学家Pierre Bzier第一个研究了这种矢量绘制曲…

python变量标识符_简谈-Python的注释、变量类型、标识符及关键字

在Python程序中&#xff0c;要想支持中文输出&#xff0c;则要在代码前面添加标识符&#xff1a;开发人员在程序中自定义的一些符号和名称 标示符是自己定义的,如变量名 、函数名等 标识符的规则&#xff1a; 标示符由字目、下划线和数字组成&#xff0c;且数字不能开头 python…

win10使用docker desktop安装k8s一直starting解决方法

在docker中启动k8s一直卡在staring当中查了许多文档都写得不明不白的&#xff0c;研究了许久终于解决决定写个帖子来记录一下 1.首先查看本地docker中k8s的版本拉取源码 我们这里是1.19.7 然后我们进入到 k8s下载 去拉取k8s源码 git clone https://codechina.csdn.net/mirr…

Android菜单详解(三)——SubMenu和IconMenu

我们在上一篇介绍了如何在Android中创建和响应选项菜单&#xff0c;今天我们将探索子菜单和图标菜单。 子菜单Sub Menu 子菜单提供了一种自然的组织菜单项的方式&#xff0c;它被大量地运用在windows和其他OS的GUI设计中。Android同样支持子菜单&#xff0c;你可以通过addSubMe…

Liunx下使用Nginx负载均衡

我是centos8得主机 安装命令: yum install nginx 如果为Ubuntu主机 sudo apt-get install nginx 安装完成后&#xff0c;启用并启动Nginx服务&#xff1a; sudo systemctl enable nginxsudo systemctl start nginx 然后我们有2个服务&#xff1a; 一个地址为: http://xx…

如何给微软提反馈建议以及bug

1.相信各位在使用.net core的过程中多多少少遇到了bug和为解决的坑那么我们肿么联系微软反馈问题你 1.找到vs编辑器中的反馈按钮 2.点击进入网址 如果是vs的问题选择visual studio栏目,如果为编译问题或者其他问题请选择对应的栏目 然后写下你的问题和截图&#xff0c;尽量详…

windwos docker安装k8s一直staring的解决方法

今天遇到了一个很奇怪的问题 docker中启动k8s一直卡在starting 然后就不动了&#xff0c;找了很多解决方法终于得到解决这里把解决流程写在这里 1.配置镜像加速器 首先登录阿里云&#xff0c;阿里云有一个免费的镜像加速服务&#xff0c;可以加快拉取docker容器的速度这里一定…

对未标记为可安全执行的脚本_三、??XSS跨站脚本攻击

跨站脚本攻击(Cross Site Scripting)&#xff0c;缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被执行&#xff0c;从而达到恶意攻击用户的目的。理论上&#xff0c;所有可输入的地方没有对输入…

.net 使用阿里云RocketMQ

1.首先我们来讲解一下消息队列的作用 比如说我们的订单系统&#xff0c;再客户订单生成了以后&#xff0c;可能会有 快递系统&#xff0c;通知系统&#xff0c;和打印系统需要用到当前订单的详细内容 所以这个时候常规的操作是在A里面通过代码调用B&#xff0c;C &#xff…