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

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

    def addcontent(content):
        f = open("newsContent.txt", "a")
        f.write('content)
        f.close()
    

      

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

    • 单条新闻的详情-->字典news
      def getNewDetail(newsUrl):
      
          news = {}
          res = requests.get(newsUrl)
          res.encoding = 'utf-8'
          soup = BeautifulSoup(res.text, 'html.parser')
      
          news['title' ]= soup.select(".show-title")[0].text
          news['content'] = soup.select("#content")[0].text
          info = soup.select(".show-info")[0].text
      
          news['dt'] = datetime.strptime(info.lstrip('发布时间:')[0:19], '%Y-%m-%d %H:%M:%S')
          if info.find('作者:') > 0:
              news['author'] = info[info.find('作者:'):].split()[0].lstrip('作者:')
          else:
              news['author'] = 'none'
          if info.find('审核:') > 0:
              news['auditing'] = info[info.find('审核:'):].split()[0].lstrip('审核:')
          else:
              news['auditing'] = 'none'
          if info.find('来源:') > 0:
              news['source'] = info[info.find('来源:'):].split()[0].lstrip('来源:')
          else:
              news['source'] = 'none'
          if info.find('摄影:') > 0:
              news['photo'] = info[info.find('摄影:'):].split()[0].lstrip('摄影:')
          else:
              news['photo'] = 'none'
      
          return news
      

        

    • 一个列表页所有单条新闻汇总-->列表newsls.append(news)
      def getListPage(pageUrl):
          newsList = []
          res = requests.get(pageUrl)
          res.encoding = 'utf-8'
          soup = BeautifulSoup(res.text, 'html.parser')
          for news in soup.select('li'):
              if len(news.select('.news-list-title')) > 0:
                  newsUrl = news.select('a')[0].attrs['href']  # URL
                  newsList.append(getNewDetail(newsUrl))
          return newsList
      

        

    • 所有列表页的所有新闻汇总列表newstotal.extend(newsls)
      for i in range(2,n+1):
          print(i)
          pageUrl='http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html'.format(i)
          newsTotal.extend(getListPage(pageUrl))
      

        

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

    df = pandas.DataFrame(newsTotal)
    print(df)
    

      

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

    df.to_excel("gzccNews.xlsx",encoding="utf-8")
    

      

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

    • 提取包含点击次数、标题、来源的前6行数据
      print(df[['click','title','source']].head(6))
      

        

    • 提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。
      print(df[(df['click']>3000)&(df['source']=='学校综合办')])
      

        

    • 提取'国际学院'和'学生工作处'发布的新闻。
      print(df[(df['source']=='国际学院')|(df['source']=='学生工作处')])

        

    • 进取2018年3月的新闻
      print(df1['2018-04-11'])
      

        

    6. 保存到sqlite3数据库

    import sqlite3
    with sqlite3.connect('gzccnewsdb.sqlite') as db:
    df3.to_sql('gzccnews05',con = db, if_exists='replace')
    

      

    7. 从sqlite3读数据

    with sqlite3.connect('gzccnewsdb.sqlite') as db:
    df2 = pandas.read_sql_query('SELECT * FROM gzccnews05',con=db)
    print(df2)
    

      

    8. df保存到mysql数据库

    安装SQLALchemy
    安装PyMySQL
    MySQL里创建数据库:create database gzccnews charset utf8;

    import pymysql
    from sqlalchemy import create_engine
    conn = create_engine('mysql+pymysql://root:root@localhost:3306/gzccnews?charset=utf8')
    pandas.io.sql.to_sql(df, 'gzccnews', con=conn, if_exists='replace')
    

      

    MySQL里查看已保存了数据。(通过MySQL Client或Navicate。)

  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/q1736699804/p/8876753.html
Copyright © 2011-2022 走看看