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

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

        f = open(“content.txt”, 'a', encoding='utf-8')
        f.write(content)
        f.close()

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

    • 单条新闻的详情-->字典news
    # 获取新闻详情
    def getNewDetail(url):
        resd = requests.get(url)
        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
        t = soupd.select('.show-info')[0].text[0:24].lstrip('发布时间:')
        news['dt'] = datetime.strptime(t, '%Y-%m-%d %H:%M:%S')
    
        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()
        writeNewsDetail(news['content'])
    
        news['click'] = getClickCount(url)
        news['url'] = url
        return (news)
    • 一个列表页所有单条新闻汇总-->列表newsls.append(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:
                # 获取每条新闻链接
                a = news.select('a')[0].attrs['href']
                # 调用函数获取新闻详情页的内容
                #一个列表页所有单条新闻汇总
                newsList.append(getNewDetail(a))
        print(newsList)
        return (newsList)
    • 所有列表页的所有新闻汇总列表newstotal.extend(newsls)      
    newsTotal = []
    
    fristPage = 'http://news.gzcc.cn/html/xiaoyuanxinwen/'
    #第一页新闻汇总列表
    newsTotal.extend(getListPage(fristPage))
    
    #获取每页新闻的链接
    n = getPageN()
    for i in range(2,n):
        pageUrl = 'http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html'.format(i)
        #所有列表页的所有新闻汇总列表
        newsTotal.extend(getListPage(pageUrl))

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

    import pandas
    df = pandas.DataFrame(newsTotal)

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

    df.to_excel('gzccnews.xlsx')

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

    • 提取包含点击次数、标题、来源的前6行数据
    print(df[['clicks', 'title', 'source']].head(6))
    • 提取‘学校综合办’发布的,‘点击次数’超过3000的新闻。
    print(df[(df['clicks'] > 3000) & (df['source'] == '学校综合办')])
    • 提取'国际学院'和'学生工作处'发布的新闻。
    info = ['国际学院','学生工作处']
    print(df[df['source'].isin(info)])
  • 相关阅读:
    【LeetCode OJ】Remove Element
    【LeetCode OJ】Remove Duplicates from Sorted Array
    【LeetCode OJ】Swap Nodes in Pairs
    【LeetCode OJ】Merge Two Sorted Lists
    【LeetCode OJ】Remove Nth Node From End of List
    【LeetCode OJ】Two Sum
    【LeetCode OJ】Majority Element
    最长公共子序列问题
    php fopen与file_get_contents的区别
    PHP 技巧集合
  • 原文地址:https://www.cnblogs.com/wumeiying/p/8807276.html
Copyright © 2011-2022 走看看