数据结构化与保存
Posted 202帅哥天团
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构化与保存相关的知识,希望对你有一定的参考价值。
任务如下:
1. 将新闻的正文内容保存到文本文件。
2. 将新闻数据结构化为字典的列表:
- 单条新闻的详情-->字典news
- 一个列表页所有单条新闻汇总-->列表newsls.append(news)
- 所有列表页的所有新闻汇总列表newstotal.extend(newsls)
3. 安装pandas,用pandas.DataFrame(newstotal),创建一个DataFrame对象df.
4. 通过df将提取的数据保存到csv或excel 文件。
5. 用pandas提供的函数和方法进行数据分析:
- 提取包含点击次数、标题、来源的前6行数据
- 提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。
- 提取‘国际学院‘和‘学生工作处‘发布的新闻。
1. 将新闻的正文内容保存到文本文件。
#定义一个content.txt的文本 f = open(“content.txt”, ‘a‘, encoding=‘utf-8‘) #content为文本正文 f.write(content) f.close()
2. 将新闻数据结构化为字典的列表:
- 单条新闻的详情-->字典news
#全局变量 news ={}
-
# 读取新闻细节 def getNewDetail(detail,title,description): resDescript = requests.get(detail,headers) resDescript.encoding = "utf-8" soupDescript = BeautifulSoup(resDescript.text, ‘html.parser‘) news[‘title‘]=soupDescript.select(‘.show-title‘)[0].text content = soupDescript.select(".show-content")[0].text # 正文 info = soupDescript.select(".show-info")[0].text # info相关内容 # 第一种方法 分离 message = info.split() # 第二种方法 用正则表达式 print(‘标题‘ + ‘: ‘ + title) print(‘概要‘ + ‘: ‘ + description) print(‘链接‘ + ‘: ‘ + detail) print(‘正文‘ + ‘ :‘ + content) if(re.search("发布时间:(.*) \xa0\xa0 \xa0\xa0作者:", info) !="Null" ): time = re.search("发布时间:(.*) \xa0\xa0 \xa0\xa0作者:", info).group(1) news[‘time‘]=time else:news[‘time‘]="null" if (re.search("作者:(.*)\xa0\xa0审核:", info) !="Null"): author = re.search("作者:(.*)\xa0\xa0审核:", info).group(1) news[‘author‘]=author print("作者:" + author) else:news[‘author‘]="null" if (re.search("审核:(.*)\xa0\xa0来源:", info) !="Null"): right = re.search("审核:(.*)\xa0\xa0来源:", info).group(1) news[‘right‘]=right else:news[‘right‘]="null" if (re.search(‘来源:(.*)\xa0\xa0\xa0\xa0摄影:‘, info) != "null"): resource = re.search(‘来源:(.*)\xa0\xa0\xa0\xa0摄影:‘, info) news[‘resource‘] = resource else:news[‘resource‘]="null" if (re.search("摄影:(.*)\xa0\xa0\xa0\xa0点击:", info)!="Null"): video = re.search("摄影:(.*)\xa0\xa0\xa0\xa0点击:", info) news[‘video‘]=video else:news[‘video‘]="null" count = getNewsId(detail) news[‘count‘]=content dateTime = datetime.strptime(time, ‘%Y-%m-%d %H:%M:%S‘) news[‘dataTime‘]=dateTime
- 一个列表页所有单条新闻汇总-->列表newsls.append(news)
-
#直接在上面那一条后面加一个这个即可整合 page_news.append(news)
- 所有列表页的所有新闻汇总列表newstotal.extend(newsls)
#第一次执行,为了获取页数信息 getListPage(listPageUrl,0) #整合一页所有新闻 all_news.extend(page_news) #print(page) page是我第一次获取信息时得到的页数信息 for n in range(1,page): PageUrl = listPageUrl + str(n) + ".html" getListPage(PageUrl,n) #整合所有页面的所有信息 all_news.extend(page_news)
3. 安装pandas,用pandas.DataFrame(newstotal),创建一个DataFrame对象df.
#集合所有新闻信息之后 df = pandas.DataFrame(all_news)
4. 通过df将提取的数据保存到csv或excel 文件。
df.to_excel(‘news.xlsx‘)
5. 用pandas提供的函数和方法进行数据分析:
- 提取包含点击次数、标题、来源的前6行数据
-
df[[‘clicks‘, ‘title‘, ‘source‘]].head(6)
- 提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。
-
df[(df[‘clicks‘] > 3000) & (df[‘source‘] == ‘学校综合办‘)]
- 提取‘国际学院‘和‘学生工作处‘发布的新闻。
-
news_info = [‘国际学院‘, ‘学生工作处‘] df[df[‘source‘].isin(news_info)]
以上是关于数据结构化与保存的主要内容,如果未能解决你的问题,请参考以下文章