当前位置: 首页 > news >正文

【Python】爬取网易新闻今日热点列表数据并导出

1. 需求

从网易新闻的科技模块爬取今日热点的列表数据,其中包括标题、图片、标签、发表时间、路径、详细文本内容,最后导出这些列表数据到Excel中。

网易科技新闻网址:https://tech.163.com

2. 解决步骤

2.1 前期准备

爬虫脚本中需要引用的Python库:

  • requests:一个HTTP客户端库,‌专门用于发送HTTP请求;
  • BeautifulSoup:可以从HTML或XML文件中提取数据;
  • pandas:用于数据分析的一个强大库,这里主要用于整理数据、导出Excel。
  • json:python的一个内置库,用于处理JSON格式的数据。

注意:

在执行Python爬虫脚本之前需要引入库,如:

pip install BeautifulSoup

否则会报错(Couldn‘t find ....... you requested: XXX库.)。

2.2 爬取列表基础信息

(1)通过简单脚本爬取页面信息:先爬取网易新闻(https://tech.163.com)的页面信息,看是否有今日热点列表数据。

import requestsurl = 'http://tech.163.com/'
response = requests.get(url)    # 发送HTTP GET请求  
print(response.text)            # 打印网页内容

可以在控制台看到打印的页面信息。(该打印信息在步骤(3)中会使用到)

(2)查看列表所在的模块位置:在网易科技新闻页面,键盘按【F12】弹出开发者工具,通过开发者工具左上角的小箭头在页面定位今日热点列表的位置,根据操作可知列表所在div元素的class属性为 “ndi_main” 。

(3)通过打印的页面信息,查看其中是否能获取列表数据:复制div元素的class属性的值 “ndi_main” 到之前打印的页面信息中查看位置。从图中可知今日热点列表的数据是动态加载的。

(4)从资源文件获取今日热点列表数据链接地址:从开发者工具的【Source --> Page】加载的文件中查找到今日热点列表的数据是从这个JSON文件获取的。

选择该JSON文件地址,鼠标右键,点击【Copy link address】复制链接地址。

(5)整理获取列表脚本:

import requests
import json# 今日热点的JSON数据链接地址
url = "https://tech.163.com/special/00097UHL/tech_datalist.js?callback=data_callback"# 发送HTTP GET请求
response = requests.get(url) 
# 处理字符串成JSON格式的字符串
str = response.text.replace(')', '').replace('data_callback(', '')
# 将JSON格式的字符串转换为Python对象
json_data = json.loads(str)for i in json_data:title = i["title"]docurl = i["docurl"]imgurl = i["imgurl"]time = i["time"]label = i["label"]tip = ''for j in i["keywords"]:tip += j["keyname"] + ', 'print("标题:" + title)print("发表时间:" + time)print("类型:" + label)print("标识:" + tip)print("路径:" + docurl)print("图片地址:" + imgurl)print("----------------------------------------")

打印结果:

2.3 爬取详情信息

根据第一条新闻路径获取详情信息

import requests
import json
from bs4 import BeautifulSoup# 详情地址
detailUrl = 'https://www.163.com/dy/article/J8K51SIR0519QIKK.html'# headers可取固定值,访问所有详情页均可用
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"}
# 发送HTTP GET请求页面信息。注意这里不带请求头无权限获取详情数据信息。
response = requests.get(url=detailUrl, headers=headers)
# 从HTML文件中提取数据
soup = BeautifulSoup(response.text, 'html.parser')
# 获取class为“post_body”元素内部的文字内容(无图)
text = soup.select('.post_body')[0].text
print(text)

打印结果:

需要注意以下几点:

(1)HTTP请求不带请求头,则无权限访问。

headers的值可从任一请求的请求头中获取即可。

(2)代码中倒数第二行的 “.post_body” 是通过开发者工具左上角的小标签去快速定位详情内容的位置中获取。

2.4 导出数据到Excel中  

导出的时候需要使用到pandas库

import pandasdf = pandas.DataFrame(list_res)
df.head(5)
df.to_excel("tech163.xlsx")
print("导出成功")

3. 爬虫脚本整理

根据解决步骤,最终整理的爬取网页新闻的脚本如下:

import requests
import json
from bs4 import BeautifulSoup
import pandas# 网易科技新闻地址
url = "https://tech.163.com/special/00097UHL/tech_datalist.js?callback=data_callback"# 获取今日热点列表信息
def getNewsList(url):list_res = []response = requests.get(url)str = response.text.replace(')', '').replace('data_callback(', '')json_data = json.loads(str)for i in json_data:result = {}tip = ''for j in i["keywords"]:tip += j["keyname"] + ', 'result['title']=i["title"]result['time']= i["time"]result['label'] = i["label"]result['tip'] =tipresult['imgurl'] =i["imgurl"]result['detail']= getNewsDetail(i["docurl"])list_res.append(result)df = pandas.DataFrame(list_res)df.head(5)df.to_excel("tech163.xlsx")print("导出成功")# 获取详情信息
def getNewsDetail(detailUrl):headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"}response = requests.get(url=detailUrl, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')text = soup.select('.post_body')[0].textreturn text# 调用接口进行验证
getNewsList(url)

导出的Excel文件内容如下:

相关文章:

【Python】爬取网易新闻今日热点列表数据并导出

1. 需求 从网易新闻的科技模块爬取今日热点的列表数据,其中包括标题、图片、标签、发表时间、路径、详细文本内容,最后导出这些列表数据到Excel中。 网易科技新闻网址:https://tech.163.com 2. 解决步骤 2.1 前期准备 爬虫脚本中需要引用…...

软件设计之HTML5

软件设计之HTML5 【狂神说Java】HTML5完整教学通俗易懂 学习内容: 软件开发技能点参照:软件开发,小白变大佬,这套学习路线让你少走弯路是认真的,欢迎讨论 软件开发技能点参照:Java学习完整路线&#xff…...

CnosDB 元数据集群 – 分布式时序数据库的大脑

CnosDB 是一个分布式时序数据库系统,其中元数据集群是核心组件之一,负责管理整个集群的元数据信息。 1. 概述 CnosDB 是一个分布式时序数据库系统,其中元数据集群是核心组件之一,负责管理整个集群的元数据信息。元数据包括数据库…...

白骑士的Matlab教学进阶篇 2.5 Simulink

Simulink是MATLAB的扩展工具,提供了一个图形化的建模和仿真环境。它广泛应用于系统设计、仿真、自动控制、信号处理等领域。本文将详细介绍Simulink的简介与基本使用、建立与仿真模型、控制系统设计与仿真、与MATLAB的集成。 Simulink简介与基本使用 什么是Simuli…...

linux安装anaconda

参考 如何在Linux服务器上安装Anaconda(超详细)_linux安装anconda-CSDN博客 官网 Index of / 安装网站 https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Lin…...

python装饰器作用和使用场景

当谈到装饰器时,很多初学者很迷糊,有一个经典的例子可以帮助理解它们的作用。装饰器允许你在不修改函数代码的情况下,动态地改变函数的行为。 一、用法 假设我们有一个简单的函数,用来输出一条简单的问候语: 复制代码…...

Apache Tomcat 7下载、安装、环境变量配置 详细教程

Apache Tomcat 7下载、安装、环境变量配置 详细教程 Apache Tomcat 7下载Apache Tomcat 7 安装Apache Tomcat 7 环境变量配置启动 Apache Tomcat 7测试Tomcat7是否启动成功 Apache Tomcat 7下载 1、下载地址,找到Archives 链接: 官网下载地址 2、找到Tomcat 7&…...

SQL注入实例(sqli-labs/less-20)

0、初始页面 1、确定闭合字符 2、爆库名 3、爆表名 4、爆列名 5、查询最终目标...

Linux Shell面试题大全及参考答案(3万字长文)

目录 解释Shell脚本是什么以及它的主要用途 主要用途 Shell脚本中的注释如何编写? 如何在Shell脚本中定义和使用变量? Shell支持哪些数据类型? 什么是Shell的命令替换?请举例说明。 管道(pipe)和重定向(redirection)有什么区别? 如何在Shell脚本中使用条件语句…...

速盾:cdn优化静态资源加载速度机制

CDN(Content Delivery Network)是一种优化静态资源加载速度的机制。它通过在全球多个地点部署服务器,将静态资源缓存到离用户最近的服务器上,从而提高资源加载速度。 在传统的网络架构中,当用户访问一个网站时&#x…...

04.C++类和对象(中)

1.类的默认成员函数 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重…...

【代码随想录训练营第42期 Day23打卡 回溯Part2 - LeetCode 39. 组合总和 40.组合总和II 131.分割回文串

目录 一、做题心得 二、题目与题解 题目一:39. 组合总和 题目链接 题解:回溯 题目二:40.组合总和II 题目链接 题解:回溯 题目三:131.分割回文串 题目链接 题解:回溯 三、小结 一、做题心得 今天是代码随想录…...

书生.浦江大模型实战训练营——(三)Git基本操作与分支管理

最近在学习书生.浦江大模型实战训练营,所有课程都免费,以关卡的形式学习,也比较有意思,提供免费的算力实战,真的很不错(无广)!欢迎大家一起学习,打开LLM探索大门&#xf…...

数据可视化Axure大屏原型制作分享

数据可视化大屏通过清晰、直观且易于理解的方式呈现大量复杂数据,已成为各行各业中不可或缺的工具。Axure作为一款功能强大的原型设计工具,为数据可视化大屏的制作提供了强大的支持和丰富的资源。 Axure RP 是一款强大的原型设计工具,非常适…...

Python3安装

更新镜像: yum -y install epel-release.noarch 1.安装Python3 [root18 ~]# yum -y install python3 2.查看版本: [root18 ~]# python3 --version Python 3.6.8 3.执行镜像包: pip3 install -i https://pypi.tuna.tsinghua.edu.cn/sim…...

基于Python的数据科学系列(4):函数

引言 在前几篇文章中,我们探讨了Python中的基本数据类型、列表、元组和字典。在本文中,我们将深入研究Python中的函数。函数是编程中非常重要的概念,它允许我们将代码组织成模块化、可重用的组件。通过学习如何定义和使用函数,我们…...

高频焊接设备配电系统无源滤波系统的设计

1、高频焊机系统谐波状况简介 变压器容量:S11-M-1600/10KVA(105%)/0.4KV 短路阻抗:3.9% 谐波负载情况:一台600KW高频焊接设备 型号:GGP600-0.3-HC 输入电压:380V 输出电压:0…...

模拟退火的

题目链接 体验乱调参数而看天意的奇特体验 #include<bits/stdc.h> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<ll,ll> pii; const int inf0x3f3f3f3f; const int N1e510; const int mod1e97; //#define int long…...

为什么有的地方笔记本经常连不上wifi,而手机可以?

mm&#xff1a;程程&#xff0c;为什么我的笔记本在图书馆&#xff0c;老是连不上wifi&#xff1f;经常要手工连好几次&#xff0c;我的手机却没有这样的问题。 我&#xff1a;你先用手机热点连一下&#xff0c;我给你远程看一下吧。 mm&#xff1a;好了&#xff0c;我的远程代…...

组件化开发

iOS的组件化开发是一种将大型应用拆分成多个独立、可复用的组件的开发模式。每个组件负责完成特定的功能&#xff0c;并通过明确定义的接口与其他组件进行交互。这种开发模式有助于提高代码的可维护性、可读性和可扩展性&#xff0c;同时降低模块之间的耦合度。 组件化开发的概…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...