• 数据结构化与保存


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

    def writeNewsDetail(content):
        f=open('gzccnews.txt','a',encoding='utf-8')
        f.write(content)
        f.close()
      content=soupd.select('.show-content')[0].text.strip()
        writeNewsDetail(content)

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

    • 单条新闻的详情-->字典news
    • 一个列表页所有单条新闻汇总-->列表newsls.append(news)
    • 所有列表页的所有新闻汇总列表newstotal.extend(newsls)

    单条新闻的详情-->字典news

    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['ti']=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['click']=getClickCount(newsUrl)
        news['newsUrl']=newsUrl
        # content=soupd.select('.show-content')[0].text.strip()
        # writeNewsDetail(content)
        print(news)
        return (news)

    一个列表页所有单条新闻汇总-->列表newsls.append(news)

    def getListPage(pageUrl):  # 9. 取出一个新闻列表页的全部新闻 包装成函数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:
                g = news.select('a')[0].attrs['href']
                # print(g)
                newslist.append(getNewsDetail(g))
                print(newslist)
        return (newslist)

    所有列表页的所有新闻汇总列表newstotal.extend(newsls)

    newstotal=[]
    pageUrl='http://news.gzcc.cn/html/xiaoyuanxinwen/'
    n=getPageN()
    for i in range(n-1,n):
        # print(i)
        listPageUrl='http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html'.format(i)
        # print(listPageUrl)
        newstotal.extend(getListPage(listPageUrl))
    
    #
    print(newstotal)

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

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

    df=pandas.DataFrame(newstotal)
    df.to_excel('gzccs.xlsx',encoding='utf-8')
    print(df)

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

    • 提取包含点击次数、标题、来源的前6行数据
    • 提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。
    • 提取'国际学院'和'学生工作处'发布的新闻。
    • 进取2018年3月的新闻

    提取包含点击次数、标题、来源的前6行数据

    提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。

    print(df[df['click']>3000])

    提取'国际学院'和'学生工作处'发布的新闻。

    sou=['国际学院','学生处']
    print(df[df['source'].isin(sou)])

    进取2018年3月的新闻

    df1=df.set_index('ti')
    d=df1['2018-03']

    6. 保存到sqlite3数据库

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

    df1=df.set_index('ti')
    re=df1['2018-03-30 10:19:23 ':'2018-03-29 08:20:39 ']
    import sqlite3
    with sqlite3.connect('gzccnewsdb.sqlite') as db:
      re.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)

    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。)

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

  • 相关阅读:
    oracle 数据库服务名怎么查
    vmware vsphere 6.5
    vSphere虚拟化之ESXi的安装及部署
    ArcMap中无法添加ArcGIS Online底图的诊断方法
    ArcGIS中字段计算器(高级计算VBScript、Python)
    Bad habits : Putting NOLOCK everywhere
    Understanding the Impact of NOLOCK and WITH NOLOCK Table Hints in SQL Server
    with(nolock) or (nolock)
    What is “with (nolock)” in SQL Server?
    Changing SQL Server Collation After Installation
  • 原文地址:https://www.cnblogs.com/cgz123/p/8869734.html
Copyright © 2020-2023  润新知