ruijin-chen

 

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

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

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

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

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

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

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

分析网站,看的电影的标题和连接放在<li>标签里面的<dl>标签里,主要看代码部分的解释

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

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

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\')

 

 

 

 

 

 

 

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

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

 

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

处理成字符型数据:

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

输出的结果:

 

 接下来,做词云统计。

把保存到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))

结果:

 

接下来完成词云部分:

 

 

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

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

 

分类:

技术点:

相关文章:

  • 2022-02-04
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-19
  • 2022-12-23
相关资源
相似解决方案