1. 将新闻的正文内容保存到文本文件。
1 2 3 4 | def writeNewsDatail(content): f = open ( 'gzccnews1.txt' , 'a' ,encoding = 'utf-8' ) f.write(content) f.close() |
2. 将新闻数据结构化为字典的列表:
- 单条新闻的详情-->字典news
- 一个列表页所有单条新闻汇总-->列表newsls.append(news)
- 所有列表页的所有新闻汇总列表newstotal.extend(newsls)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
import
pandas
import
requests
import
re
from
bs4
import
BeautifulSoup
from
datetime
import
datetime
def
writeNewsDatail(content):
f
=
open
(
'gzccnews1.txt'
,
'a'
,encoding
=
'utf-8'
)
f.write(content)
f.close()
#dui
# 获取新闻点击次数
def
getNewsId(url):
#dui
newsId
=
re.findall(r
'\_(.*).html'
, url)[
0
][
-
4
:]
clickUrl
=
'http://oa.gzcc.cn/api.php?op=count&id={}&modelid=80'
.
format
(newsId)
clickRes
=
requests.get(clickUrl)
# 利用正则表达式获取新闻点击次数
clickCount
=
int
(re.search(
"hits'\).html\('(.*)'\);"
, clickRes.text).group(
1
))
return
clickCount
def
getNewsDetail(newsUrl):
#dui
# 读取新闻细节
resd
=
requests.get(newsUrl)
resd.encoding
=
"utf-8"
soupd
=
BeautifulSoup(resd.text,
'html.parser'
)
#打开详情页并解析
news
=
{}
news[
'title'
]
=
soupd.select(
'.show-title'
)[
0
].text
info
=
soupd.select(
".show-info"
)[
0
].text
# info相关内容
news[
'dt'
]
=
datetime.strptime(info.lstrip(
'发布时间:'
)[
0
:
19
],
'%Y-%m-%d %H:%M:%S'
)
if
info.find(
'来源:'
)>
0
:
#作者:审核:来源:摄影:一样处理
news[
'source'
]
=
info[info.find(
'来源:'
):].split()[
0
].lstrip(
'来源:'
)
else
:
news[
'source'
]
=
'none'
news[
'content'
]
=
soupd.select(
".show-content"
)[
0
].text.strip()
# 正文
news[
'count'
]
=
getNewsId(newsUrl)
news[
'newsUrl'
]
=
newsUrl
return
(news)
def
getListPage(pageUrl):
#dui
res
=
requests.get(pageUrl)
res.encoding
=
'utf-8'
soup
=
BeautifulSoup(res.text,
'html.parser'
)
newsList
=
[]
for
news
in
soup.select(
'li'
):
if
len
(news.select(
'.news-list-title'
)) >
0
:
newsUrl
=
news.select(
'a'
)[
0
].attrs[
'href'
]
# 链接
newsList.append(getNewsDetail(newsUrl))
#把详情的字典插进列表(一个新闻是字典 多个新闻是列表)
return
newsList
def
getPageN():
#新闻列表页的总页数
res
=
requests.get(
'http://news.gzcc.cn/html/xiaoyuanxinwen/'
)
res.encoding
=
'utf-8'
soup
=
BeautifulSoup(res.text,
'html.parser'
)
n
=
int
(soup.select(
'.a1'
)[
0
].text.rstrip(
'条'
))
return
(n
/
/
10
+
1
)
newsTotal
=
[]
n
=
getPageN()
p
=
[
2
, n]
for
i
in
p:
listPageUrl
=
"http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html"
.
format
(i)
print
(listPageUrl)
newsTotal.extend(getListPage(listPageUrl))
for
news
in
newsTotal:
print
(news)
3. 安装pandas,用pandas.DataFrame(newstotal),创建一个DataFrame对象df.
12import
pandas
df
=
pandas.DataFrame(newsTotal)
4. 通过df将提取的数据保存到csv或excel 文件。
1df.to_excel(
"0416.xlsx"
)
5. 用pandas提供的函数和方法进行数据分析:
- 提取包含点击次数、标题、来源的前6行数据
- 提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。
- 提取'国际学院'和'学生工作处'发布的新闻。
123
print
(df[[
'count'
,
'title'
,
'source'
]][
0
:
6
])
print
(df[(df[
'count'
]>
3000
)&(df[
'source'
]
=
=
'学校综合办'
)])
print
(df[(df[
'source'
]
=
=
'国际学院'
)|(df[
'source'
]
=
=
'学生处'
)])
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥