爬虫数据网址:新闻中心滚动新闻_新浪网

最近想获取一些新闻数据来做一个NLP的分类模型所以爬取了新浪的一些新闻数据用于学习使用。

首先先查看网页源码:

发现url中id和类别中的s_id相等,经过尝试替换,发现该编号确实是类别所在标签。

有发现page这个参数和页数相同,其中num=50 ,和pageid=153这两个参数没有太大的影响,所以就可以通过修改这两个参数的值来获得不同标签下的url了。

然后通过这个url  放入谷歌浏览器中去抓取数据所在的json:

可以发现每个数据文件所在的json文档为:https://feed.mix.sina.com.cn/api/roll/get?&k=&num=50&lid=2510&pageid=153&page=5

其中传入的参数基本和原来的参数雷同,所以就解析这个json文档,就可以获得新闻的标题,新闻的类别,以及新闻的内容所在的url,而新闻的日期在url中。
但是在获取新闻文本内容的时候发现采用xpath索引不出我想要的东西,获取的内容基本上是对的,但是xpath读取数据还是出现错误,BeautifulSoup也尝试了一下,发现也是一样的结果。

不得已采用正则表达式,但是又出现不通网址之间标签不同的情况,所以这里采用了最笨的办法,判断正则里面有没有获取到东西。源码如下图所示:

for line in list1:
try:req = requests.get(line[0])req.encoding = "utf-8"req = req.textcontent = re.findall('<!-- 行情图end -->.*<!-- news_keyword_pub',req,re.S)if len(content)!=0:passelse:content = re.findall('<!-- 正文 start -->.*<!--', req, re.S)if len(content)!=0:passelse:content = re.findall('<!--新增众测推广文案-->.*?<!-- ', req, re.S)

但是这里又出现一个问题,日期数据在url中:https://finance.sina.com.cn/stock/usstock/c/2022-03-09/doc-imcwipih7460106.shtml

https://news.sina.com.cn/o/2022-03-11/doc-imcwipih7927286.shtml

用"/"进行切分的话又不确定索引在哪里,所以也采用最笨的办法进行if判断,尽可能得到长度为10的数据具体代码如下图所示:

print(content)
if len(line[0].split("/")[3])==10:out_date.append([line[0].split("/")[3], line[2], line[1], content, label])elif len(line[0].split("/")[4])==10:out_date.append([line[0].split("/")[4], line[2], line[1], content, label])elif len(line[0].split("/")[5])==10:out_date.append([line[0].split("/")[5], line[2], line[1], content, label])elif len(line[0].split("/")[6]) == 10:out_date.append([line[0].split("/")[6],line[2],line[1],content,label])

当然这里可以使用正则表达式,这里我看了一下效果还不错所以就没改了。

所有代码整体如下:

import pandas as pd
import requests
import json
import re
import numpy as npclass get_data():def __init__(self,dic,url):self.url = urlself.dic = dicdef get_url(self,lid,page,pageid=153):return self.url +"&lid="+str(lid)+"&pageid="+str(pageid)+"&page="+str(page)def get_json_url(self,url):out = []json_req = requests.get(url)user_dict = json.loads(json_req.text)print(url)for dic in user_dict["result"]["data"]:out.append([dic["url"],dic['intro'],dic['title']])return outdef getfind_data(self,list1,label):out_date = []for line in list1:try:req = requests.get(line[0])req.encoding = "utf-8"req = req.textcontent = re.findall('<!-- 行情图end -->.*<!-- news_keyword_pub',req,re.S)if len(content)!=0:passelse:content = re.findall('<!-- 正文 start -->.*<!--', req, re.S)if len(content)!=0:passelse:content = re.findall('<!--新增众测推广文案-->.*?<!-- ', req, re.S)print(content)if len(line[0].split("/")[3])==10:out_date.append([line[0].split("/")[3], line[2], line[1], content, label])elif len(line[0].split("/")[4])==10:out_date.append([line[0].split("/")[4], line[2], line[1], content, label])elif len(line[0].split("/")[5])==10:out_date.append([line[0].split("/")[5], line[2], line[1], content, label])elif len(line[0].split("/")[6]) == 10:out_date.append([line[0].split("/")[6],line[2],line[1],content,label])except:passreturn out_datedef main(self):out_data_list = []for label,lid in self.dic.items():for page in range(1,101):he_url = self.get_url(lid,page)json_url_list = self.get_json_url(he_url)output_data = self.getfind_data(json_url_list,label)out_data_list+=output_datadata = pd.DataFrame(np.array(out_data_list), columns=['时间', '标题', '摘要', '内容','类别'])data.to_csv("data.csv")if __name__ == "__main__":data_dic = {"国内":2510,"国际":2511,"社会":2669,"体育":2512,"娱乐":2513,"军事":2514,"科技":2515,"财经":2516,"股市":2517,"美股":2518}url = "https://feed.mix.sina.com.cn/api/roll/get?&k=&num=50"get = get_data(data_dic,url)get.main()

这样就获得到了我的新闻数据了。

然后对数据进行清洗,去掉data.csv中的一些无用的数据。

首先读取data.csv

然后采用正则表达式来获得在中文符号旁边的中文。

import re
def funtion1(x):res1 = ''.join(re.findall('[\u4e00-\u9fa5]*[",","。","!","”","%","“",":"]*',x[20:]))res1 = res1.replace("\"","")res1 = res1.replace("引文","")res1 = res1.replace("正文","")return res1

然后因为这里是进行一个url切分获得数据 所有删掉一些不是不是时间的数据。


# 因为对url进行切片可能获取到的不是时间数据所有使用如下函数删掉
def out_data(x):if "2022" in x or "2021" in x or "2020" in x:return Trueelse:return False
data = data[[out_data(i) for i in data["时间"].astype(str)]]
data.to_csv("pre_data.csv")

整体数据清洗的代码如下:

import pandas as pd
import re
data = pd.read_csv("data.csv",index_col=0)
def function_(x):if len(x)>2:return Trueelse:return False
def funtion1(x):res1 = ''.join(re.findall('[\u4e00-\u9fa5]*[",","。","!","”","%","“",":"]',x[20:]))res1 = res1.replace("\"","")res1 = res1.replace("引文","")res1 = res1.replace("正文","")return res1# 获取数据内容
data["内容"] = data["内容"].apply(funtion1)
# 数据去重
data = data.drop_duplicates()
# import numpy as np
# 因为对url进行切片可能获取到的不是时间数据所有使用如下函数删掉
def out_data(x):if "2022" in x or "2021" in x or "2020" in x:return Trueelse:return False
data = data[[out_data(i) for i in data["时间"].astype(str)]]
data.to_csv("pre_data.csv")
data[data["内容"].apply(function_)]["类别"].value_counts()

结果如下图所示

python爬取新闻数据相关推荐

  1. Python小姿势 - Python爬取网页数据

    Python爬取网页数据 爬取网页数据是一个比较常见的Python应用场景,有很多第三方库可以帮助我们完成这个任务.这里我们介绍一下urllib库中的一个常用方法:urllib.request.url ...

  2. 【实用工具系列之爬虫】python爬取资讯数据

    系列 1.[实用工具系列之爬虫]python实现爬取代理IP(防 '反爬虫') 2.[实用工具系列之爬虫]python爬取资讯数据 前言 在大数据架构中,数据收集与数据存储占据了极为重要的地位,可以说 ...

  3. python爬取网页公开数据_如何用Python爬取网页数据

    使用Python爬取网页数据的方法: 一.利用webbrowser.open()打开一个网站:>>> import webbrowser >>> webbrowse ...

  4. 编程python爬取网页数据教程_实例讲解Python爬取网页数据

    一.利用webbrowser.open()打开一个网站: >>> import webbrowser >>> webbrowser.open('http://i.f ...

  5. Python爬取天气数据及可视化分析!

    来源丨Python之王 Python爬取天气数据及可视化分析 说在前面 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本 ...

  6. Python爬取的数据存为json文件,并读取

    Python爬取的数据存为json文件,并读取 import requests import time from lxml import etree import jsondef json_data_ ...

  7. python爬虫教程:实例讲解Python爬取网页数据

    这篇文章给大家通过实例讲解了Python爬取网页数据的步骤以及操作过程,有兴趣的朋友跟着学习下吧. 一.利用webbrowser.open()打开一个网站: >>> import w ...

  8. python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件

    python爬取股票数据,以上证指数为例,可以爬取任何股票,保存为temp.csv文件 import requests import pandas as pd# market: 0:沪市 1:深市 # ...

  9. python爬取微博数据词云_用Python爬取微博数据生成词云图片

    原标题:用Python爬取微博数据生成词云图片 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数 ...

最新文章

  1. Magazine App Demo
  2. 如何使用Twitter Bootstrap获得中心内容?
  3. 有效括号 python_python 有效的括号的实现代码示例
  4. python getattr函数_[转]Python中的getattr()函数详解
  5. Redis笔记(六):Java中使用Redis
  6. linux 下安装nodejs,CentOS 6.5 系统
  7. 使用VS Code 开发.NET CORE 程序指南
  8. 李彦宏、王海峰等成为工程院院士候选人选
  9. 程序员为什么焦虑于编程语言和框架?
  10. 五年级计算机课程内容,五年级信息技术教学计划
  11. 日本人的幼儿教育,看一看还是有意…
  12. Android控件——TextView,EditText
  13. QuartusII下载程序报错,无法正常下载
  14. 音响发烧友---HiFi音频功放
  15. matlab画图形函数 semilogx semilogy和loglog
  16. android 投屏代码,android投屏技术:控制设备源码分析
  17. android游戏手柄怎么用,王者荣耀怎么用手柄玩?手柄游戏详细教程
  18. 基于simulink的六足机器人模型仿真
  19. python 计算list中平均值_python里的list求平均值
  20. Linux ps命令

热门文章

  1. linux内核分析 轮换,Linux 内核源代码情状分析 chap2 存储管理 (6) - 页面的定期换出...
  2. C++ Primer Plus第六版第六章编程练习 第4题, 加入Benevolent Order of Programmer后,在BOP大会上
  3. 在c语言中输出8进制数,16进制数
  4. ISCC——部分题wp
  5. 时间序列分析中统计模型statsmodels.tsa.arima_model
  6. 计算机老是重启进不了桌面,电脑开机反复重启怎么回事 电脑开机后进不去桌面界面全黑...
  7. 代码整洁之道-读书笔记之整洁的代码
  8. 小程序开发之【前端开发】【学习第二节】【一】
  9. 聚美优品正式退市:陈欧下一个将为谁代言?
  10. Ubuntu安装Samba 服务器