一个完整的大作业

我选择的主题是小说网站的爬取

作业要求

 

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

网络上爬取相关的数据。

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

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

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

1、用2345加速浏览器打开"http://www.xs.la/46_46454/",在空白地方点击鼠标右键调出查看源代码选项。

 

 

可以通过网页源代码查看标题的代码,可以看出每条消息的标题与链接

 

2.直接获取本小说网站所有的内容

 

 

爬取到数据之后就对数据进行分析和统计,代码如下

from bs4 import BeautifulSoup
import requests

#获取小说各章节的网页地址
def get_urls():
    req = requests.get(url = aim)
    html = req.text
    div_bf = BeautifulSoup(html)
    div = div_bf.find_all(‘div‘, class_ = ‘listmain‘)
    a_bf = BeautifulSoup(str(div[0]))
    a = a_bf.find_all(‘a‘)
    nums = len(a[15:])                                      #删除开头重复章节
    for each in a[15:]:
        names.append(each.string)
        urls.append(main + each.get(‘href‘))
    return nums

#保存小说到本地
def writer(name, path, text):
    write_flag = True
    with open(path, ‘a‘, encoding=‘utf-8‘) as f:
        f.write(name + ‘\n‘)
        f.writelines(text)
        f.write(‘\n\n‘)

#获取小说内容
def get_contents(target):
    req = requests.get(url = target)
    html = req.text
    bf = BeautifulSoup(html)
    texts = bf.find_all(‘div‘, class_ = ‘showtxt‘)
    texts = texts[0].text.replace(‘\xa0‘*8,‘\n\n‘)
    return texts



main = ‘http://www.biqukan.com/‘
aim = ‘http://www.biqukan.com/30_30398/‘
names = []                                                   #章节名
urls = []                                                    #章节链接
nums = get_urls()                                            #章节数

print(‘小说开始下载:‘)
for i in range(nums):
    writer(names[i], ‘小说.txt‘, get_contents(urls[i]))
print(‘小说下载完成‘)

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

import re
import jieba
import matplotlib.pyplot as plt
from wordcloud import WordCloud
file=open(‘I:\\大四\\python\\大作业\\小说.txt‘,‘r‘,encoding=‘utf-8‘).readlines()
data=‘‘
for i in file:
    data+=‘ ‘.join(jieba.cut(i))+‘ ‘
my_wordcloud = WordCloud(font_path=‘I:\\大四\\python\\py5\\msyh.ttf‘).generate(data)
plt.imshow(my_wordcloud)
plt.axis("off")
plt.show()
my_wordcloud.to_file(path.join("小说.png"))

 

 

posted @ 2017-10-31 17:15  45hjq  阅读(338)  评论(0编辑  收藏  举报