足不出户,用Python抓取豆瓣最流行的的电影,宅男有福啦

用Python抓取豆瓣最流行的的电影,有福啦,直接上代码:

import requests

from bs4 import BeautifulSoup

url_a='https://movie.douban.com/top250'

def download_page(url):

data=requests.get(url).content

return data

def parse_html(html):

soup=BeautifulSoup(html)

movie_name_list=[]

movie_list_soup=soup.find('ol',attrs={'class':"grid_view"})

for movie_li in movie_list_soup.find_all('li'):

detail=movie_li.find('div',attrs={'class':'hd'})

movie_name=(detail.find('span',attrs={'class':'title'}).getText()).encode("utf8")

movie_name_list.append(movie_name)

print(movie_name)

next_page=soup.find('span',attrs={'class':'next'}).find('a')

if next_page:

print('ok'+' '+url_a+next_page['href'])

return movie_name_list,url_a+next_page['href']

return movie_name_list,None

def main():

url_t=url_a

while(url_t):

html = (download_page(url_t))

movies,url_t=parse_html(html)

print(movies)

#print(parse_html(html))

if __name__=='__main__':

main()

效果:

下面分享数据清洗的知识:

二、数据清洗

为了方便进行数据进行清洗,我们将列表中的数据放在一个字符串数组中,代码如下:

comments = ''

for k in range(len(eachCommentList)):

comments = comments + (str(eachCommentList[k])).strip()

使用print(comments)进行查看,如下图所示:

可以看到所有的评论已经变成一个字符串了,但是我们发现评论中还有不少的标点符号等。这些符号对我们进行词频统计时根本没有用,因此要将它们清除。所用的方法是正则表达式。python中正则表达式是通过re模块来实现的。代码如下:

import re

pattern = re.compile(r'[\u4e00-\u9fa5]+')

filterdata = re.findall(pattern, comments)

cleaned_comments = ''.join(filterdata)

继续使用print(cleaned_comments)语句进行查看,如下图所示:

我们可以看到此时评论数据中已经没有那些标点符号了,数据变得“干净”了很多。

因此要进行词频统计,所以先要进行中文分词操作。在这里我使用的是结巴分词。如果没有安装结巴分词,可以在控制台使用pip install jieba进行安装。(注:可以使用pip list查看是否安装了这些库)。代码如下所示:

import jieba #分词包

import pandas as pd

segment = jieba.lcut(cleaned_comments)

words_df=pd.DataFrame({'segment':segment})

因为结巴分词要用到pandas,所以我们这里加载了pandas包。可以使用words_df.head()查看分词之后的结果,如下图所示:

从上图可以看到我们的数据中有“看”、“太”、“的”等虚词(停用词),而这些词在任何场景中都是高频时,并且没有实际的含义,所以我们要他们进行清除。

我把停用词放在一个stopwords.txt文件中,将我们的数据与停用词进行比对即可(注:只要在百度中输入stopwords.txt,就可以下载到该文件)。去停用词代码如下代码如下:

stopwords=pd.read_csv("stopwords.txt",index_col=False,quoting=3,sep="\t",names=['stopword'], encoding='utf-8')#quoting=3全不引用

words_df=words_df[~words_df.segment.isin(stopwords.stopword)]

继续使用words_df.head()语句来查看结果,如下图所示,停用词已经被出去了。

接下来就要进行词频统计了,代码如下:

import numpy #numpy计算包

words_stat=words_df.groupby(by=['segment'])['segment'].agg({"计数":numpy.size})

words_stat=words_stat.reset_index().sort_values(by=["计数"],ascending=False)

用words_stat.head()进行查看,结果如下:

由于我们前面只是爬取了第一页的评论,所以数据有点少,在最后给出的完整代码中,我爬取了10页的评论,所数据还是有参考价值。

三、用词云进行显示

代码如下:

import matplotlib.pyplot as plt

%matplotlib inline

import matplotlib

matplotlib.rcParams['figure.figsize'] = (10.0, 5.0)

from wordcloud import WordCloud#词云包

wordcloud=WordCloud(font_path="simhei.ttf",background_color="white",max_font_size=80) #指定字体类型、字体大小和字体颜色

word_frequence =

word_frequence_list = []

for key in word_frequence:

temp = (key,word_frequence[key])

word_frequence_list.append(temp)

wordcloud=wordcloud.fit_words(word_frequence_list)

plt.imshow(wordcloud)

其中simhei.ttf使用来指定字体的,可以在百度上输入simhei.ttf进行下载后,放入程序的根目录即可。显示的图像如下:

到此为止,整个项目的介绍就结束了。欢迎跟大家一起多交流!

好了,今天的知识就分享到这里,欢迎关注爱编程的南风,私信关键词:学习资料,获取更多学习资源,如果文章对你有有帮助,请收藏关注,在今后与你分享更多学习python的文章。同时欢迎在下面评论区留言如何学习python。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180502A10KQ700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券