• 数据结构化与保存


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

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

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

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

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

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

      • 提取包含点击次数、标题、来源的前6行数据
      • 提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。
      • 提取'国际学院'和'学生工作处'发布的新闻。
        复制代码
        import requests
        from bs4 import BeautifulSoup
        from datetime import datetime
        import re
        import pandas
        
        #获取点击次数
        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)
            clickStr = requests.get(clickUrl).text
            count = re.search("hits').html('(.*)');", clickStr).group(1)
            return count
        
        #获取新闻详情
        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
            # news['newsurl']=newsurl
            info=soupd.select('.show-info')[0].text
            news['dt']=datetime.strptime(info.lstrip('发布时间:')[0:19],'%Y-%m-%d %H:%M:%S')
            news['click'] = int(getClickCount(newsurl))
            if info.find('来源')>0:
                news['source'] =info[info.find('来源:'):].split()[0].lstrip('来源:')
            else:
                news['source']='none'
            if info.find('作者:') > 0:
                news['author'] = info[info.find('作者:'):].split()[0].lstrip('作者:')
            else:
                news['author'] = 'none'
            # news['content']=soupd.select('.show-content')[0].text.strip()
        
            #获取文章内容并写入到文件中
            content=soupd.select('.show-content')[0].text.strip()
            writeNewsContent(content)
        
            return news
        
        def getListPage(listPageUrl):
            res=requests.get(listPageUrl)
            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:
                    a=news.select('a')[0].attrs['href']
                    newsList.append(getNewsDetail(a))
            return (newsList)
        
        #数据写入文件
        def writeNewsContent(content):
            f=open('gzccNews.txt','a',encoding='utf-8')
            f.write(content)
            f.close()
        
        def getPageNumber():
            ListPageUrl="http://news.gzcc.cn/html/xiaoyuanxinwen/"
            res=requests.get(ListPageUrl)
            res.encoding='utf-8'
            soup=BeautifulSoup(res.text,'html.parser')
            n = int(soup.select('.a1')[0].text.rstrip('条'))//10+1
            return n
        
        
        newsTotal=[]
        firstPage='http://news.gzcc.cn/html/xiaoyuanxinwen/'
        newsTotal.extend(getListPage(firstPage))
        
        n=getPageNumber()
        for i in range(n,n+1):
            listUrl= 'http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html'.format(i)
            newsTotal.extend(getListPage(listUrl))
        
        df=pandas.DataFrame(newsTotal)
        # df.to_excel("news.xlsx")
        
        # print(df.head(6))
        # print(df[['author','click','source']])
        # print(df[df['click']>3000])
        
        sou=['国际学院','学生工作处']
        print(df[df['source'].isin(sou)])
        复制代码

        截图:
        数据保存到Excel文件:

        提取前六行数据:

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

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

  • 相关阅读:
    IMail不能发送邮件的解决方法
    asp.net防止刷新重新提交触发后台事件的方法
    你的网站被“白名单”了吗?
    网站权限引起的504错误的问题
    asp.net Web Service请求因 HTTP 状态 400 失败: Bad Request的原因
    对现有数据库的表做分区的方法
    测试 Cookie在不同浏览器内容长度限制的测试
    Thinkphp框架中使用memcache缓存的方法
    替换手机号中间数字为*号或隐藏IP最后位
    linux mysql 操作命令
  • 原文地址:https://www.cnblogs.com/zhu573514187/p/8810405.html
Copyright © 2020-2023  润新知