zoukankan      html  css  js  c++  java
  • 爬虫大作业--以importnew网站为例

    1.选一个自己感兴趣的主题或网站。(所有同学不能雷同)

    2.用python 编写爬虫程序,从网络上爬取相关主题的数据。

    import requests
    from bs4 import BeautifulSoup
    from datetime import datetime
    import re
    import pandas
    
    # 将文章的正文内容保存到文本文件。
    def writeNewsDetail(content):
        f = open('books.txt', 'a',encoding='utf-8')
        f.write(content)
        f.close()
    
    #一篇文章的全部信息
    def getBooksDetail(pageurl):
        resd = requests.get(pageurl)
        resd.encoding = 'utf-8'
        soupd = BeautifulSoup(resd.text, 'html.parser')
        books={}
        books['title'] = soupd.select('.entry-header')[0].text
        info = soupd.select('.entry-meta-hide-on-mobile')[0].text
        books['dt'] = datetime.strptime(info[0:11], '%Y/%m/%d ')
        if(info.find('分类:')):
            books['classify']=soupd.select('.entry-meta-hide-on-mobile a')[0].text
        else:
            books['classify']='none'
        if (info.find('标签:')):
            books['label'] = soupd.select('.entry-meta-hide-on-mobile a')[2].text
        else:
            books['label'] = 'none'
        books['comment']= soupd.select('.entry-meta-hide-on-mobile a')[1].text
        books['html']=soupd.select('.copyright-area')[0].text
        books['content'] = soupd.select('.entry p')[0].text
        books['url'] = pageurl
        writeNewsDetail(books['content'])
        return (books)
    
    # 文章列表页的总页数
    def getPageN():
        res = requests.get('http://www.importnew.com/all-posts')
        res.encoding = 'utf-8'
        soup = BeautifulSoup(res.text, 'html.parser')
        page = soup.select(".navigation a")[-2].text
        print(page)
    
    
    #一个列表页全部内容
    def getListPage(pageurl):
        res = requests.get(pageurl)
        res.encoding = 'utf-8'
        soup = BeautifulSoup(res.text, 'html.parser')
        newsList = []
        pageurls = soup.select(".read-more a")
        for i in range(int(len(pageurls))):
            pageurl = soup.select(".read-more a")[i].attrs['href']
            newsList.append(getBooksDetail(pageurl))
        return (newsList)
    
    newsTotal = []
    firstPageUrl = 'http://www.importnew.com/all-posts'
    newsTotal.extend(getListPage(firstPageUrl))
    n = getPageN()
    dt =pandas.DataFrame(newsTotal)
    dt.to_excel("books.xlsx")
    print(dt)

    3.对爬了的数据进行文本分析,生成词云。

    4.对文本分析结果进行解释说明。

    5.写一篇完整的博客,描述上述实现过程、遇到的问题及解决办法、数据分析思想及结论。

    6.最后提交爬取的全部数据、爬虫及数据分析源代码。

    import jieba.analyse
    from PIL import Image,ImageSequence
    import numpy as np
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud,ImageColorGenerator
    lyric= ''
    f=open('books.txt','r',encoding='utf-8')
    for i in f:
        lyric+=f.read()
    
    
    result=jieba.analyse.textrank(lyric,topK=50,withWeight=True)
    keywords = dict()
    for i in result:
        keywords[i[0]]=i[1]
    print(keywords)
    
    
    image= Image.open('tim.png')
    graph = np.array(image)
    wc = WordCloud(font_path='./fonts/simhei.ttf',background_color='White',max_words=50,mask=graph)
    wc.generate_from_frequencies(keywords)
    image_color = ImageColorGenerator(graph)
    plt.imshow(wc)
    plt.imshow(wc.recolor(color_func=image_color))
    plt.axis("off")
    plt.show()
    wc.to_file('dream.png')

     运行结果:

    总结:在写大作业时候,我首先是获取总的页面个数、获取首页页码链接和页面信息展示,在编写获得单个页面所有链接出了点问题,一直找不到准确的标签,所有爬取数据有偏差。

    然后就是进行词云生成,我参照了网上的案例,然后对自己爬取的数据进行词云分析、生成。这次爬取的是一个计算机文章方面的网站,将网站里面的标题、时间、发布者、内容等标签全部爬取,从而生成的词云。

    可以说这次作业遇到的问题很多,同时也学到了很多。

  • 相关阅读:
    spark 读取mongodb失败,报executor time out 和GC overhead limit exceeded 异常
    在zepplin 使用spark sql 查询mongodb的数据
    Unable to query from Mongodb from Zeppelin using spark
    spark 与zepplin 版本兼容
    kafka 新旧消费者的区别
    kafka 新生产者发送消息流程
    spark ui acl 不生效的问题分析
    python中if __name__ == '__main__': 的解析
    深入C++的new
    NSSplitView
  • 原文地址:https://www.cnblogs.com/god1924668503/p/8906791.html
Copyright © 2011-2022 走看看