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

news2024/12/23 7:06:47

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 requests

url = '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 pandas

df = 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'] =tip
        result['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].text
    return text

# 调用接口进行验证
getNewsList(url)

导出的Excel文件内容如下:

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

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

相关文章

Visio新手安装及超全快捷指令合集

Microsoft Visio是一款专业的流程图和图表绘制软件,是微软旗下的一款图表和矢量图形应用程序,属于Microsoft 365系列的一部分。但Visio需要单独安装,安装完成之后可与Word联用。 一、Visio软件介绍 Visio 是一款用途多样的绘图工具&#xff…

全球氢钎焊市场规划预测:未来六年CAGR为3.4%

随着全球制造业的持续发展和消费者对高质量产品的需求增加,氢钎焊作为一种高效的焊接技术,正逐渐受到市场的广泛关注。本文旨在通过深度分析氢钎焊行业的各个维度,揭示行业发展趋势和潜在机会。 【市场趋势的演变】 1. 市场规模与增长&#…

【uniapp】集成第三方插件示例

文章目录 uniapp芯套Android壳app目录下/libs目录导入全部aar工程目录下导入rewriter文件夹 uniapp芯套Android壳 https://blog.csdn.net/xzzteach/article/details/140800350 app目录下/libs目录导入全部aar工程目录下导入rewriter文件夹 本地引入包内容 在 project 级别的…

解决com.alibaba.csp.sentinel.slots.block.flow.FlowException: null

springboot项目配置sentinel,能限流成功但是不能限流方法 原因 名字没对应上

token和embedding

1. token 2. embedding 1.token token:词元/令牌/词 tokenization:分词 tokenizer:分词器 token是最小语义单元,通常可以是,一个字母、一个词、一个数字、一个汉字或任何其他有意义的字符组合,取决于文本处…

免费【2024】springboot 大学生心理健康诊断专家系统设计与开发

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

R语言统计分析——点图

参考资料:R语言实战【第2版】 点图提供了一种在简单水平刻度上绘制大量有标签值得方法。我们可以使用dotchart()函数创建点图,格式为: dotchart(x,labels) 其中,x是一个数值向量,而labels则是由每个点的标签组成的向量…

【Linux系统编程】:进程地址空间1

1.引出进程地址空间 因为str指向的是字符串首字母的地址,首字母是字符常量“h”,地址存储在字符常量区,无法修改,故报错。 Linux进程地址空间与进程内存布局详解 - 知乎 (zhihu.com) 我们编写一段代码,来认识一下存储…

C++ const、constexpr与consteval作用与区别

C const、constexpr与consteval作用与区别 在C 常量表达式和编译时优化中,我们已经提到了常量、编译时常量与运行时常量的概念。为了加深理解,我们再重新明晰一下这三者的概念。 常量:初始化之后便不可修改的量。在c中使用const修饰的“变量”…

开源Spring Boot版本WebSSH:轻松在浏览器中管理SSH和FTP

介绍 WebSSH 是一个轻量级的开源ssh工具,只需安装在服务端,就可以通过浏览器访问SSH和FTP。它支持文件和日志高亮显示,Vim 和 Top 命令,实时查看日志,并且操作体验与标准的 Shell 基本相同。WebSSH 支持多会话、文件上…

“艺启创作 智绘未来”AI漫画创意大赛,燃动国漫新纪元!

8月2日,百度文库宣布携手玄机科技举办国内首个「AI漫画大赛」,用户可以直接尝试用AI创作漫画,并在未来为用户独家提供AI小说、AI漫画分镜等行业领先的跨模态AI创作能力。 跨界融合,创新无限 本次大赛,不仅是创意的碰撞…

深度学习 —— 个人学习笔记9(图像卷积、填充和步幅及多输入多输出通道)

声明 本文章为个人学习使用,版面观感若有不适请谅解,文中知识仅代表个人观点,若出现错误,欢迎各位批评指正。 十九、图像卷积 import torch from torch import nndevice torch.device("cuda:0" if torch.cuda.is_ava…

【Stable Diffusion】(基础篇八)—— 局部重绘

局部重绘 本系列博客笔记主要参考B站nenly同学的视频教程,传送门:B站第一套系统的AI绘画课!零基础学会Stable Diffusion,这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 我们使用SD生成一张整…

【Vulnhub系列】Vulnhub Noob 靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub Noob靶场渗透 原文转载已经过授权 原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io) 一、主机发现 二、端口扫描 有一个go.php的form表单接收文件 这里识别21端口存在未授权,55077 是ssh 的服务…

计算机网络学习:TCP握手挥手强制连接中断

之前系统学习过TCP协议&#xff0c;但很多地方并不是特别清晰&#xff0c;今天结合抓包情况&#xff0c;再拾一下拾一下>.< 首先看一下TCP数据包的标志位&#xff1a; SYN&#xff1a;简写为S&#xff0c;同步标志位&#xff0c;用于建立会话连接&#xff0c;同步序列号…

ubuntu20.4 微信的安装

一、背景 ubuntu作为常用系统了&#xff0c;微信少不了&#xff0c;但官方没有微信的linux版本 appImage类似于windows下免安装版本。 二、方法 1、下载appImage格式的开源微信版本 https://github.com/zydou/WeChat-AppImage/releases 2、改文件改属性 为什么使用ubuntu 作…

计算机技术基础 (bat 批处理)Note5

计算机技术基础 &#xff08;bat 批处理&#xff09;Note5 本节主要讲解 FOR 命令语句&#xff08;循环&#xff09;在 bat 批处理中的使用 (part 1) FOR 命令语句 在批处理中&#xff0c;for 是最为强大的命令语句&#xff0c;它的出现&#xff0c;使得解析文本内容、遍历文…

Python数值计算(18)——三次样条曲线概述

1. 概述 前面介绍到了多种插值方法&#xff0c;但是这些插值方法都无法避免龙格现象&#xff0c;即高阶多项式可能存在剧烈的振动&#xff0c;而且在区间的一个点处的微小扰动&#xff0c;都可能引起整个范围内的巨大振动&#xff0c;一种替代方式是使用类似线性插值的方式&am…

Python进阶 JSON数据,pyecharts制图

目录 json数据格式的转换 什么是json json本质 注意 pyecharts快速入门 画一个最简单的折线图 使用全局配置选项优化折线图 总结 json数据格式的转换 什么是json 一种轻量级的数据交换格式&#xff0c;可以按json指定的格式去组织和封装数据 json本质 带有特定格式的…

OpenSPG安装部署

文章目录 前言一、安装前准备安装docker安装docker compose 二、安装服务端下载 docker-compose.yml 文件启动服务端 三、安装客户端拉取镜像克隆OpenSPG源码 案例 前言 OpenSPG是以SPG框架为基础设计和实现的知识图谱开放引擎&#xff0c;它为领域图谱构建提供了明确的语义表…