BeautifulSoup+pandas 爬取新浪国内新闻

2023-05-16

(1)使用技术

python 3.5.2、sqlite3、pandas、requests、jupyter notebook

(2)详细代码

新浪国内新闻首页:http://news.sina.com.cn/china/

1、爬取的内容为最新消息里面每个新闻详细页面的标题、发布时间、编辑、内容、评论数以及评论内容

 

2、编写思路

  • 使用requests将发送请求,并且将返回的数据接收回来。
  • 对接接收回来的数据进行处理,使用pandas进行处理,并且保存到sqlite3里面

3、具体的代码模块讲解

 

获取分页的url,国内新闻采取分页的形式来分割不同的新闻,因此我们首先获取新闻分页的数据,并且从分页的数据中获取到各个新闻详情页的url。getPageUrl用来获取分页的url(pageUrl 是在开发者工具使用NetWork查找到的,一般的请求在doc、js、xhr中)

def getPageUrl(begin,end):
    pageUrls = []
    pageUrl = "http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw\
    &cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1\
    &show_num=22&tag=1&format=json&page={}"
    for i in range(begin,end):
        newUrl = pageUrl.format(i)
        pageUrls.append(newUrl)
    return pageUrls

根据获取到的分页的数据,再获取详情页面的URL,其中getNewsUrl中的begin,end是分页的开始和结束。由于新闻量的数据量太大,此处做了限制。

def getNewsUrl(begin,end):
    newsUrl = []
    pageUrls = getPageUrl(begin,end);
    for url in pageUrls:
        res = requests.get(url)
        res.encoding = "utf-8"
        urlJson = json.loads(res.text)
        for i in urlJson["result"]["data"]:
            newsUrl.append(i["url"])
    return newsUrl;

获取到了具体的新闻页面url以后,可以根据url去爬取新闻页面具体的信息。

import requests;
from bs4 import BeautifulSoup;
from datetime import datetime;
import re;
import json;

def getNewDetails(newsUrl):
    results = {};
    contentsList = [];
    res = requests.get(newsUrl);
    res.encoding = "utf-8";
    soup = BeautifulSoup(res.text,"html.parser");
    mainTitle = soup.select(".main-title")[0].text.strip();
    results["mainTitle"] = mainTitle
    originTime = soup.select(".date-source span")[0].text.strip();
    publishTime = datetime.strptime(originTime,"%Y年%m月%d日 %H:%M");
    strTime = datetime.strftime(publishTime,"%Y-%m-%d");
    results["publishTime"] = publishTime
    if(len(soup.select(".date-source a")) > 0):
        originSource = soup.select(".date-source a")[0].text.strip();
    else:
        originSource = "";
    results["originSource"] = originSource
    contents = " ".join([p.text.strip() for p in soup.select(".article p")[:-1]]);
    results["contents"] = contents
    editor = soup.select(".article p")[-1].text.strip();
    results["editor"] = editor
    m = re.search("doc-i(.*).shtml",newsUrl)
    comments = requests.get("http://comment5.news.sina.com.cn/page/info?version=1\
    &format=json&channel=gn&newsid=comos-" + m.group(1) + "&group=undefined&compress=0\
    &ie=utf-8&oe=utf-8&page=1&page_size=3&t_size=3&h_size=3&thread=1");
    comments.encoding = "utf-8";
    commentsJson = json.loads(comments.text.strip());
    results["total"] = commentsJson["result"]["count"]["total"]
    for com in commentsJson["result"]["cmntlist"]:
        contentsList.append(com["time"] + " " + com["nick"] + ":" + com["content"])
    results["contents"] = ' '.join(contentsList)
    return results

用getNewData来做一个获取具体页面url以及爬取数据的一个连接

def getNewData():
    newsData = []
    newsUrl = getNewsUrl(1,3)
    for url in newsUrl:
        newsData.append(getNewDetails(url))
    return newsData

  • 使用pandas来处理返回来的数据,可以保存成csv,xlsx

import pandas;
df = pandas.DataFrame(getNewData())
df.to_excel("news.xlsx")

使用pandas来处理返回来的数据,可以保存数据库中

import sqlite3 
cnx = sqlite3.connect('news.sqlite')
type(cnx)
df.to_sql('data',cnx ,schema=None, if_exists='replace', index=True, index_label=None, chunksize=None, dtype=None)

读取数据库中的数据

import sqlite3;

pandas.read_sql('select * from data;',con = db)

 

本文根据自己的学习所总结的一些内容,如有不足之处,请多多指教。

版权声明: 原创文章,如需转载,请注明出处! https://blog.csdn.net/lwx356481/article/details/81216490

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BeautifulSoup+pandas 爬取新浪国内新闻 的相关文章

  • 获取当前view所在页面的viewController

    一般来说 xff0c 我们可以知道一个viewController所在的view self view xff0c 或者它的子视图 self subViews 然而 xff0c 怎样知道一个view所在页面的viewController呢 x
  • [iOS] Get all UIView subviews with all property values

    转自StackOverFlow span class com style margin 0px padding 0px border 0px color rgb 128 128 128 background transparent span
  • Upgrading the delete confirmation button

    本文转载自andy heydon个人博客 ANDY HEYDON ARCHIVES ABOUT Upgrading the delete confirmation button by Andy iOS has a nice pattern
  • Linux系统的GPIO设置(以UpBoard为例)

    GPIO往往是通过sys文件系统进行操作的 xff0c 当我们需要验证一个GPIO口置1还是置0的话 xff0c 可以通过操作sys文件来完成 UpBoard官方所提供的linux系统已经安装了支持UP Board的RPi GPIO和相应的
  • ubuntu远程桌面

    xff08 一 xff09 可视化界面远程访问Linux服务器 这里以Ubuntu为例 xff0c 最常见的是通过xrdp和vnc这两种远程桌面协议来进行可视化远程操作 1 关于xrdp协议和vnc协议之间区别 参考自 xff1a http
  • 针对Linux 错误make: *** No rule to make target ` ‘, needed by xxx. Stop. (webots调试出现这个错误,原因相同)

    导致出现make No rule to make target 96 needed by xxx Stop 的主要原因就是因为Makefile出现问题 xff0c 编写Makefile的时候多加了空格 括号等原因导致报这个错误 具体的参考实
  • eigen库的安装与基本使用教程

    Eigen是可以用来进行线性代数 矩阵 向量操作等运算的C 43 43 库 xff0c 它里面包含了很多算法 在用C 43 43 写运动控制算法 xff08 例如MPC控制算法 xff09 的时候 由于算法包括矩阵运算 xff0c c 43
  • CMakeLists.txt的简单学习教程汇总

    最近因为要编辑一个T265的例程 xff0c 但是里面的CMakeLists中的含义自己不明白 xff0c 在网上搜集了一些资料 xff0c 对自己学习进行一下总结也是让需要的人更加明白清楚 学习这个的最好的方式是自己理解了以后 xff0c
  • LEGION联想Y7000P Ubuntu18.04的无线网卡驱动安装

    安装无线网卡的驱动的第一步大家应该弄清楚自己的无线网卡型号 建议最好的方式是在Windows下面确定类型 xff0c 在设备管理器中查看对应的无线适配器型号 xff0c 在下载对应的驱动 在Ubuntu下面也可以通过指令进行查看但是看不到具
  • 向量点乘(即内积)和叉乘(即外积、向量积)区别与意义分析

    向量之间的叉乘和点乘 xff0c 概念易混淆 xff0c 分别不清楚 xff0c 因此本文专门对这个概念进行了详细分析介绍 首先 xff0c 介绍一下向量 xff08 Vector xff09 xff0c 在几乎所有的几何问题中 xff0c
  • MATLAB图中加入阴影

    在绘制MATLAB 图时 xff0c 想表示不同的阶段 xff0c 所以将其中一部分用阴影颜色强调出来 xff0c 因此进行了一下绘制图像的知识补充 其中想要的效果是类似于下面这张 xff1a 具体如何实现呢 xff0c 有两种方式 xff
  • Matlab调整子图位置及大小

    为了绘制多个子图的MATLAB图 xff0c 但是使用导出设置时无法将子图全屏铺满整个屏幕 xff0c 因此本文对设置MATLAB子图位置进行了研究 xff0c 达到如下的效果 1 首先 xff0c 明确其中每个变量的含义 xff0c 从M
  • excel计算出均方根值(RMS)+ 均方根误差(RMSE)+标准差(Standard Deviation)

    首先弄明白这几者的区别 xff0c 方差 标准差和均方根误差的区别总结 均方根值 xff08 RMS xff09 43 均方根误差 xff08 RMSE xff09 43 标准差 xff08 Standard Deviation xff09
  • Matlab画图和点标记

    从csv中导出数据 xff0c 然后需要在MATLAB图中进行标记个别点 xff0c 但是利用MTALB自身标记的比较丑 xff0c 因此搜了一下别的方法 xff0c 具体效果如下 xff0c 其中的 可以改成O或者其他的自定义的符号 xf
  • word因导入mathtype不能使用复制粘贴快捷键的解决方法

    经查阅有两种解决方式 xff1a 1 直接删除你安装的原office中的MathType Commands 2016 dotm这个文件 2 是更换为mathtype里面的文件 xff0c 具体过程如下两个参考 xff1a 官网给出的解决办法
  • 强力推荐90个优秀外国英文网站

    一 大陆可访问的优秀英文信息源 1 英国 经济学家 http www economist com 2 美联社 http wire ap org GoToAP cgi 3 英国BBC http news bbc co uk 4 纽约时报 ht
  • 学习笔记(01):MFC上位机与STM32下位机通讯精讲-STM32串口实战1之串口发送1(串口初始化实践)...

    立即学习 https edu csdn net course play 6375 122556 1 GPIO PinAFConfig 函数复用功能 xff0c 将GPIO和USART连接起来
  • 单片机模拟输出PPM信号

    PPM信号就是将多个PWM信号放在一起传输 xff0c 一个PPM的周期为20ms 其中一个通道信号的范围为1 2ms 所以一个PPM信号 xff0c 最多可以传输10个通道的PWM信号 PPM信号以0 5ms的低电平信号代表一个通道的起始
  • linux在线模拟器

    我们项目部在开发过程中运用了自动化发布系统 xff0c 而且发布过程比较严格和规范 xff0c 写完代码只需要提交svn xff0c 填写发布文档 xff0c 测试通过之后有运维组发布到线上 这就导致很少有接触linux系统的机会 xff0
  • ROS订阅者程序

    include lt ros ros h gt include lt turtlesim Pose h gt include lt iomanip gt void poseMessageReceived const turtlesim Po

随机推荐

  • 吴恩达 ML作业提交:Grader sent no response

    目录 文章目录 目录前言正文解决方案 前言 最近在补习吴恩达machinelearning 的课程 xff0c 上完了课 xff0c 肯定是要做作业的 xff0c 做作业没有问题 xff0c 但在提交作业时遇到了问题 xff0c 记录如下
  • Docker容器通过独立IP暴露给局域网的方法

    Docker容器非常轻量 xff0c 系统开销非常少 xff0c 比VMware或者VirtualBox用起来方便 xff0c 部署起来也非常容易 官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用 一
  • CCS v6.1下完成TI-RTOS配置

    TI RTOS 是实时操作系统的TI微控制器 TI RTOS实现更快的发展不再需要开发人员编写和维护的系统软件 xff0c 如调度程序 xff0c 协议栈和驱动程序 它结合了实时多任务内核与其他中间件组件 xff0c 包括TCP IP和US
  • 【USRPx310系列(NI USRP2940-2955)+ srsRAN】环境搭建与应用

    x1f4e3 x1f973 x1f973 x1f973 x1f4e3 Hello 如果这篇 文章 对你有帮助 x1f604 xff0c 希望可以给博主点个赞 x1f44d 鼓励一下 x1f618 x1f4e3 x1f973 x1f973 x
  • 单相全桥逆变原理及仿真实验

    前言 一 单相全桥逆变器组成原理 1 全桥逆变电路拓扑结构 2 单相逆变器的SPWM调制方式 二 单相全桥逆变器仿真 1 SPWM调制波仿真 2 全桥逆变仿真 三 SPWM单片机程序实现 1 CubeMX配置 2 SPWM正弦表数据生成 3
  • STM32系列(HAL库)——使用ESP8266-01S物联网模块连接Onenet云平台上报DHT11温湿度

    前言 本篇主要讲解如何使用ESP8266 01S物联网模块连接Onenet云平台 xff0c 并上报DHT11模块的温湿度数据 本文单片机主控采用STM32F405RGT6 xff0c 使用其他主控的话基本要求有2个串口 xff0c 一个串
  • 使用cmake混编c和c++

    由于项目的需求 xff0c 需要将c和c 43 43 混编 xff0c 项目采用cmake 直接上代码 xff1a project main CXX C 这里可以不写CXX和C xff0c 但不能只写一个 xff0c 否则只会编译指定语言
  • 关于Hyper-V设置了本地桥接网络后 宿主机网络变慢的问题

    本机系统 xff1a WIN10专业版 1903 启用了Hyper V虚拟机 由于要玩docker xff0c 就在虚拟机里装了个Center OS7 设置了一个外部网络 这时候宿主机就和这个CenterOS 是同一IP段了 这时候看下面的
  • 记录 docker 安装mssql 2017

    系统环境 xff1a 阿里云 CentOS 7 4G内存 参考 xff1a https docs microsoft com zh cn sql linux quickstart install connect docker view 61
  • docker mysql 5.7 -v挂载目录 笔记

    本文记录两个环境中docker 安装mysql xff0c 主是要记录挂载目录遇到的问题 注意 xff1a mysql 5 7这个版本目录挂载有问题 xff0c 要用mysql 5 7 16以上版本 xff0c 5 7版本在windows
  • win10 升级到21H1 后Thinkpad X系列本本 音频驱动 没有声音

    前景 1 重装了几次系统 xff0c win10 64位系统 xff0c 装的过程中 xff0c 设置语言之类的界面时 xff0c 有声音 xff0c xff0c xff0c 进入系统后无声音 2 安装联想驱动管理 驱动 都装好了 xff0
  • Java Steam.filter() 过滤 通过Predicate<T>实现 多条件动态 or and 过滤

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • mysql 判断字段否存在,如果存在就修改字段

    先建一个存储过程 xff0c 再执行存储过程 xff0c 然后删掉存储过程 DROP PROCEDURE IF EXISTS proc tempPro CREATE PROCEDURE proc tempPro BEGIN SELECT c
  • mysql 常用脚本整理

    MySQL 来自各种资源 及部分自己实践 添加字段 ALTER TABLE 表名 ADD COLUMN 列名 类型 comment 39 说明 39 ALTER TABLE User ADD COLUMN shorName varchar
  • Docker Center OS7笔记--删除镜像(httpd)

    删除镜像 xff08 httpd xff09 1 docker stop docker ps a q 停止所有容器 2 docker ps a 查看容器 3 docker rm 容器ID 删除容器 删除后 xff0c 就没有容器了 4 do
  • SqlServer 2008R2 10.50.1600.1 升级到 SqlServer 2016

    要从sql server 2008 R2 企业版 直接升级到 2016 企业版 要先把R2升级到SP3这个版本 xff08 注意 xff1a 不是sp1 sp2 sp3的安全更新 坑 xff09 然后去下载2016 去itellyou下载
  • C#委托与事件

    1 什么是委托 委托是C 中的一个引用类型 它允许捕捉对方法的引用 xff0c 并像传递其他对象那样传递该引用 xff0c 也可以像调用其他方法一样调用被捕捉的方法 声明委托需要使用delegate关键字 xff1a span class
  • 数据分发服务 (DDS)及Fast DDS环境搭建

    1 数据分发服务 DDS 数据分发服务 DDS 是一种以 数据为中心的通信协议 xff0c 用于分布式软件应用程序通信 它描述了支持数据提供者和数据消费者之间通信的通信应用程序编程接口 API 和通信语义 由于它是一个以数据为中心的发布订阅
  • Docker管理工具Web UI:DockerUI & Shipyard /portainer

    docker针对于系统工程师或者开发人员来说操作比较简单 一般我们习惯了对着黑黑的屏幕敲命令 xff0c docker pull xff0c docker push xff0c docker run xff0c docker logs xf
  • BeautifulSoup+pandas 爬取新浪国内新闻

    xff08 1 xff09 使用技术 python 3 5 2 sqlite3 pandas requests jupyter notebook xff08 2 xff09 详细代码 新浪国内新闻首页 xff1a http news sin