zoukankan      html  css  js  c++  java
  • 数据结构化与保存

    1. 将新闻的正文内容保存到文本文件

    def writeNewsDetail(content):
        f=open('gzcc.txt','a',encoding='utf-8')
        f.write(content)
        f.close()

    2. 将新闻数据结构化为字典的列表:

    • 单条新闻的详情-->字典news
    • 一个列表页所有单条新闻汇总-->列表newsls.append(news)
    • 所有列表页的所有新闻汇总列表newstotal.extend(newsls)
    import requests
    from bs4 import BeautifulSoup
    from datetime import datetime
    import re
    
    
    def writeNewsDetail(content):
        f = open('gzccNews.txt', 'a',encoding='utf-8')
        f.write(content)
        f.close()
    
    
    def getClickCount(newsUrl):  #一篇新闻的点击次数
        newId = re.search('\_(.*).html', newsUrl).group(1).split('/')[1]
        clickUrl = "http://oa.gzcc.cn/api.php?op=count&id={}&modelid=80".format(newId)
        return (int(requests.get(clickUrl).text.split('.html')[-1].lstrip("('").rstrip("');")))
    
    
    def getNewsDetail(newsUrl):  #一篇新闻的全部信息
        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
        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()
        #writeNewsDetail(news['content'])
        news['click'] = getClickCount(newsUrl)
        news['newsUrl'] = newsUrl
        return(news)
    
    
    def getListPage(pageUrl):  #一个列表页的全部新闻
        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 = []
    firstPageUrl = 'http://news.gzcc.cn/html/xiaoyuanxinwen/'
    newsTotal.extend(getListPage(firstPageUrl))
    
    n = getPageN()
    for i in range(n, n+1):
        listPageUrl = 'http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html'.format(i)
        newsTotal.extend(getListPage(listPageUrl))
    
    print(newsTotal)

    3. 安装pandas,用pandas.DataFrame(newstotal),创建一个DataFrame对象df.

     df = pandas.DataFrame(newsTotal)

    4. 通过df将提取的数据保存到csv或excel 文件。

    df.to_excel("news.xlsx")

    5. 用pandas提供的函数和方法进行数据分析:

    • 提取包含点击次数、标题、来源的前6行数据
    • 提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。
    • 提取'国际学院'和'学生工作处'发布的新闻。
    df.head(6)
    df[['click','title','source']]
    df[(df['click']>3000) | (df['source']=='学校综合办')]
    list=['学生工作处','国际学院']
    
     print(df[df['sources'].isin(list)])
  • 相关阅读:
    赫尔维茨公式
    从解析几何的角度分析二次型
    Struts 1 Struts 2
    记一次服务器被入侵的调查取证
    契约式设计 契约式编程 Design by contract
    lsblk df
    Linux Find Out Last System Reboot Time and Date Command 登录安全 开关机 记录 帐号审计 历史记录命令条数
    Infrastructure for container projects.
    更新文档 版本控制 多版本并发控制
    Building Microservices: Using an API Gateway
  • 原文地址:https://www.cnblogs.com/126lc/p/8858103.html
Copyright © 2011-2022 走看看