Python爬⾍经典案例详解:爬取⾖瓣电影写⼊Excel表格
1. 解析数据
2. 我们需要使⽤BeautifulSoup这个功能模块来把充满尖括号的html数据变为更好⽤的格式。
3. from bs4 import BeautifulSoup这个是说从(from)bs4这个功能模块中导⼊BeautifulSoup,是的,因为bs4中包含了多个模
块,BeautifulSoup只是其中⼀个。有个叫什么代码的电影
4. soup = , ‘html.parser’)这句代码就是说⽤html解析器(parser)来分析我们requests得到的html⽂字内
容,soup就是我们解析出来的结果。
5. For循环
6. ⾖瓣页⾯上有25部电影,⽽我们需要抓取每部电影的标题、导演、年份等等信息。就是说我们要循环25次,操作每⼀部电影。for
item in soup.find_all(‘div’,“info”):就是这个意思。
7. ⾸先我们在⾖瓣电影页⾯任意电影标题【右键-检查】(⽐如“肖申克的救赎”),打开Elements元素查看器。
find_all(‘div’,“info”),find是查,find_all就是查全部,查什么呢?查标记名是div并且class属性是info的全部元素,也就是会得到25个这样的元素的集合。
for item in 集合:的含义就是针对集合中的每个元素,循环执⾏冒号:后⾯的代码,也就是说,下⾯的⼏⾏代码都是针对每部电影元素(临时叫做item)执⾏的.
1. 获取电影标题
2. title=item.div.a.span.string中item代表的是上⾯图⽚中的整个div元素(class=‘info’),那么它下⼀层(⼦层)div再下⼀层a再下
⼀层span(class='title’的)⾥⾯的⽂字“肖申克的救赎”就是我们需要的电影标题,所以是.div.a.span然后取内容.string
注意,⼀层层的点下去的⽅法只适合于获取到每层的第⼀个元素,⽐如前⾯图中我们知道实际有三个span,其他两个英⽂名、其他译名,但我们只取到第⼀个。
1. 获取年份段落
yearline=item.find(‘div’,‘bd’).p.contents[2].string这句话综合了find_all和.p两种⽅法,取到了item下⾯第⼆个
div(class=‘bd’)。
.contents[2]是取得这⼀⾏第3个⽂字⼩节,content单词是内容的意思,
标记将整个p标记内容分成了三段(0段,1段,2段)。
br将contents内容分为三段
所以,yearline=item.find(‘div’,‘bd’).p.contents[2].string这句话得到的是1994 / 美国 / 犯罪 剧情这⾏,但实际上它还包含了很多空格和回车换⾏符号的。所以我们再使⽤两个replace替换掉空格和回车。replace是替换的意思,在数据⾥\n是表⽰换⾏回车。
place(' ','') #去掉这⼀⾏的空格
place('\n','') #去掉这⼀⾏的回车换⾏
1. 获取年份数字
2. 经过上⾯的处理,我们得到了⼲净的1994 / 美国 / 犯罪 剧情,我们只要截取前⾯4个数字就可以了,也就是从第0个字符截取到第4
个字符之前(0,1,2,3),我们使⽤year=yearline[0:4]就可以实现。
3. 输出和复制到excel
4. print(title,’\t’,year),中间的’\t’是制表符,我们可以直接⿏标选择output输出的内容,右键复制,然后打开excel新建空⽩⽂
件,然后选择合适的表格区域范围,【右键-选择性粘贴】弹窗中选择Unicode⽂本,就可以把数据粘贴到excel表格中。
3. 采集更多电影
最后把全部250个电影数据反复10遍粘贴到Excel表格就可以了。
当然我们有更好的⽅法,⽐如利⽤for循环⾃动采集10个页⾯的数据。
import requests
from bs4 import BeautifulSoup
start=0
for n in range(0,10):
('movie.douban/top250?start='+str(start))
start+=25
soup = , 'html.parser')
for item in soup.find_all('div',"info"):
title=item.div.a.span.string #获取标题
yearline=item.find('div','bd').p.contents[2].string #获取年份那⼀⾏
place(' ','') #去掉这⼀⾏的空格
place('\n','') #去掉这⼀⾏的回车换⾏
year=yearline[0:4] #只取年份前四个字符
print(title,'\t',year)
这是把刚才的⼏乎全部代码放到了新的循环⾥⾯for n in range(0,10):⾥⾯。range(0,10)就是⽣成⼀个0~9的集合。另外,每次requests 请求之后我们还添加了start+=25这⾏,就是每次叠加25的意思,第⼀次循环start是0,然后加25变25,第⼆次就是25,然后加25变50,以此类推。
运⾏这个代码,稍等⼀下运⾏结束,就能看到output全部250部电影信息了。
4.⽣成统计数据
我们把采集到的数据粘贴到Excel⽂件中,最顶上插⼊⼀⾏【影⽚名、年份】。
Excel数据
接下来我们利⽤这些数据研究⼀下哪些年盛产好电影。
如上图,点击B栏全选这⼀列。然后选择【插⼊-数据透视表】
插⼊数据透视表
然后弹窗中选择【新⼯作表】,其他保留默认,点确定。
创建数据透视表
然后在右侧把年份拖拽到下⾯的⾏中。
拖拽到⾏
同样再拖拽到值⾥⾯。
拖拽到值
然后点击表格⾥⾯的【求和项:年份】,再点击【字段设置】,弹窗中选择【计数】,然后确认,就能统计出每个年份上映的电影数量。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论