进行数据分析。我们需要使用功能模块BeautifulSoup将充满尖括号的html数据更改为更有用的格式。frombs4importBeautifulSoup意思是从(from)bs4功能模块导入BeautifulSoup,是的,因为bs4包含多个模块,而BeautifulSoup只是其中之一。soup=BeautifulSoup(html.text,'html.parser')的代码是利用html解析器(parser)对我们请求得到的html文本内容进行解析,soup就是我们解析的结果。ForLoop豆瓣页面有25部电影,我们需要抓取每部电影的片名、导演、年份等信息。也就是说,我们要循环25次,对每一部电影进行操作。foriteminsoup.find_all('div',"info"):就是这个意思。首先,我们在豆瓣电影页面的任意电影片名上【右键】(比如《肖申克的救赎》)打开Elements元素查看器。find_all('div',"info"),find就是找,find_all就是找全部,找什么?查找标签名为div,class属性为info的所有元素,即得到25个这样的元素的集合。foritemincollection:表示对于集合中的每一个元素,循环冒号:后面的代码,也就是说对每一个电影元素(暂称item)执行下面几行代码。获取电影title中的itemtitle=item.div.a.span.string代表上图中整个div元素(class='info'),那么就是下一层(sublayer)div再下一个a层然后下层span(ofclass='title')中的文字“Shawshank'sRedemption”是我们需要的电影的标题,所以是.div.a.span然后取content.string注意也就是说逐层往下点击的方法只适用于获取每一层的第一个元素,比如我们知道上图中其实有3个span,另外两个英文名,还有其他的翻译名,但是我们只得到第一个。获取年份段落yearline=item.find('div','bd').p.contents[2].string这句话结合了find_all和.p这两个方法,得到item下的第二个div(class='bd')。.contents[2]是获取这一行的第三个文本段,wordcontent表示内容,mark将p标记的全部内容分成三段(第0段,第1段,第2段)。br将content内容分为三个部分。因此,yearline=item.find('div','bd').p.contents[2].string这句话得到的是1994/America/CrimePlot这一行,但实际它还包含大量的空格和回车和换行符。所以我们用两个replace来代替空格和回车。replace表示替换,数据中的n表示换行和回车。yearline=yearline.replace('','')#去掉这一行的空格yearline=yearline.replace('\n','')#去掉这一行的回车换行得到年号之后通过以上处理,我们得到了一个干净的1994/美国/犯罪情节,我们只需要截取前4个数字,即从第0个字符到第4个字符之前(0,1,2,3),我们用year=yearline[0:4]可以实现。输出并复制到excelprint(title,'',year),中间的't'是制表符,我们可以直接用鼠标选中output输出的内容,右键复制,然后打开excel新建一个空白文件,然后在区域范围内选择合适的表格,【右键-选择性粘贴】在弹出的窗口中选择Unicode文本,数据就可以粘贴到excel表格中了。收集更多电影上面的代码只是帮助我们在第一页输出了25部电影的信息。采集第二页,可以更改requests请求的链接地址。html=requests.get('https://movie.douban.com/top2...'),每页递增25,第三页start=50,以此类推。最后将250部电影数据全部10次粘贴到Excel表格中。当然我们还有更好的办法,比如用for循环自动采集10页的数据。Python学习扣QUN:⑧⑤⑤-④Zero⑧-⑧⑨③importrequestsfrombs4importBeautifulSoupstart=0forninrange(0,10):html=requests.get('https://movie.douban.com/top250?start='+str(start))start+=25soup=BeautifulSoup(html.text,'html.parser')foriteminsoup.find_all('div',"info"):title=item.div.a.span.string#获取thetitleyearline=item.find('div','bd').p.contents[2].string#获取年份的行yearline=yearline.replace('','')#去掉这里面的空格lineyearline=yearline.replace('\n','')#去掉这一行的回车换行year=yearline[0:4]#只取年份的前四个字符print(title,'\t',year)这是刚才几乎所有的代码都放在了newloopforninrange(0,10):里面。range(0,10)是生成一组0~9。另外,在每次请求之后,我们还加上了start+=25这一行,意思是每次加25。第一次循环开始是0,然后25加25,第二次是25,然后25加50,以此类推。运行这段代码,等待运行结束,可以在输出中看到全部250部电影信息。4.生成统计数据我们将收集到的数据粘贴到一个Excel文件中,并在顶部插入一行[电影名称,年份]。Excel数据接下来我们利用这些数据来研究哪些年份盛产好电影。如上图,点击B列,全选这一列。然后选择【插入-数据透视表】插入数据透视表,然后在弹出的窗口中选择【新建工作表】,其他保持默认,点击确定。创建一个数据透视表并将右侧的年份拖到下面的行中。拖放到行,然后拖放到值。拖到数值上点击表格中的【求和项:年】,然后点击【字段设置】,在弹出的窗口中选择【计数】,然后确定,就可以统计每年上映的电影数量了。很多年份都是1或者2,但是向下滚动表格可以看到1994和1995哪一年上映的电影比较多。选中AB两列,然后点击【插入-柱状图图标】,得到最终的统计图表。最终统计图如下。你可以清楚地看到世界上最好的电影的年份分布,你可以得出一些结论。例如,自1990年代初以来,电影制作水平有了显着提高。水平比较高,但是没有太大的提高;2010年贡献的好电影数量最多,虽然过去8年(12年除外)也有不少好电影,但整体下滑,观众认可度在2017年达到最低点。
