一个完整的大作业:80电影天堂网站

 

1.选一个自己感兴趣的主题。

2.网络上爬取相关的数据。

3.进行文本分析,生成词云。

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

5.写一篇完整的博客,附上源代码、数据爬取及分析结果,形成一个可展示的成果。

网站:80电影天堂网站(http://www.80dyy.cc/80kehuan/index.html)

我预期是首先完成的爬取所有科幻片的演员的名字,然后分析出哪些演员的频率高,得知他在该网站的电影中的热门程度

分析网站,看的电影的标题和连接放在

  • 标签里面的
    标签里,主要看代码部分的解释

    一个完整的大作业:80电影天堂网站_第1张图片

    爬取内容保存到数据库代码import requests

    由于

    标签里 的连接只是后面那部分,所以使用了一条循环,补全链接

    for names in soup.select('dl'):      
            name = names.select('a')[0]['href']
            addname = "http://www.80dyy.cc{}".format(name)        

    提取内容到数据库的代码:

     

    import re
    from bs4 import BeautifulSoup
    from datetime import datetime
    import pandas
    import sqlite3
    
    def getdetail(url):
        resd = requests.get(url)
        resd.encoding='gbk'   
        soupd=BeautifulSoup(resd.text,'html.parser')
        namels={}
        #print(url)
        for names in soupd.select('.mtext'):
            namels['标题'] = names.select('li')[0].contents[0].text
            namels['链接']= url
            action= names.select('li')[1].text
            action = action.replace('\xa0',' ')
            namels["演员"] = action[3:len(action)+1]
        return(namels)
    
    def onepage(pageurl):
        res = requests.get(pageurl)
        res.encoding = 'gbk'
        soup = BeautifulSoup(res.text,'html.parser')
        namels = []
        for names in soup.select('dl'):      
            name = names.select('a')[0]['href']
            #print(name)
            addname = "http://www.80dyy.cc{}".format(name)
            namels.append(getdetail(addname)) 
            #break  #这个用来停止循环,等一页的所有信息都完成后删去即可
        return namels
    
    newst= []
    zurl = 'http://www.80dyy.cc/80kehuan/'
    resd = requests.get(zurl)
    resd.encoding='gbk'   
    soup=BeautifulSoup(resd.text,'html.parser')
    newst.extend(onepage(zurl))
    
    for i in range(2,4):
        listurl='http://www.80dyy.cc/80kehuan/index{}.html'.format(i)
        newst.extend(onepage(listurl))
        
    #print(newst)
        
    df = pandas.DataFrame(newst)
    with sqlite3.connect("dyactiondb10.sqlite") as db: df.to_sql('dyactiondb108',con = db)

     

     保存成功

     保存到本地excel并查看excel表格:

    df = pandas.DataFrame(newst)
    df.to_excel('dyaction.xlsx')

     

    一个完整的大作业:80电影天堂网站_第2张图片

     

     一个完整的大作业:80电影天堂网站_第3张图片

     

     

     

     

    由上面得到的列表newst。接下来把列表的演员全部输出,并保存到text文件里。

    df = pandas.DataFrame(newst)
    print(df["演员"])

     

    由于文件内容过多,我选择先完成2个页面的输出:

    一个完整的大作业:80电影天堂网站_第4张图片

    处理成字符型数据:

    df = pandas.DataFrame(newst)
    #print(df["演员"])
    straction = " ".join(df["演员"])
    print(straction)

    输出的结果:

    一个完整的大作业:80电影天堂网站_第5张图片

     

     接下来,做词云统计。

    把保存到text的文件先统计出现的次数,看有没有不相干的词语。

    import jieba
    
    txt = open("ac1.txt","r",encoding='utf-8').read()
    
    ls = []
    words = jieba.lcut(txt)
    counts = {}
    for word in words:
        ls.append(word)
        if len(word) == 1:
            continue
        else:
            counts[word] = counts.get(word,0)+1
            
        
    items = list(counts.items())
    items.sort(key = lambda x:x[1], reverse = True)
    for i in range(50):
        word , count = items[i]
        print ("{:<10}{:>5}".format(word,count))

    结果:

    一个完整的大作业:80电影天堂网站_第6张图片

     

    接下来完成词云部分:

     

     

    import jieba
    import WordCloud
    import matplotlib.pyplot as plt
    
    txt = open("ac1.txt","r",encoding='utf-8').read()
    
    wordlist = jieba.cut(text,cut_all=True)
    wl_split = "/".join(wordlist)
    
    mywc = WordCloud().generate(text)
    plt.imshow(mywc)
    plt.axis("off")
    plt.show()

    一个完整的大作业:80电影天堂网站_第7张图片

    分析出迈克尔、克里斯、约翰、威廉等词出现的次数最多。

     

  • 转载于:https://www.cnblogs.com/ruijin-chen/p/7718896.html

    你可能感兴趣的:(一个完整的大作业:80电影天堂网站)