使用python爬虫进行读取排名前250名电影名称、时间、导演、评分等信息。
1. 导入需要的库
库 | 功能 |
---|---|
request | 获取网页数据 |
BeautifulSoup | 进行网页数据分析 |
xlwt | Excel表格数据填写 |
2.获取user-agent 与Host
使用谷歌浏览器使用快捷键“F12”或者右击选择“检查”,打开谷歌调试界面。
使用浏览器访问:https://movie.douban.com/top250?start=0
按照上边的步骤读取网页的“user-agent”与“Host”
并且观察网页特性,发现一页仅仅显示25个电影信息,需要十页,而每一页命名规则仅仅是修改最后“start=0”
还有另一种方法获取Host
3. 使用谷歌浏览器获取相应类
通过寻找到的类来进行数据分析,例如我们想得到电影名称,首先调试页面中左上角选择按钮点击选择我们想要的区域,查看到我们需要的类为“hd”。
4. 使用BeautifulSoup进行数据分析
使用for
循环遍历整个网页中查找到的类函数;然后直接在元素后边添加.a
就可以提取遍历元素中<a>...</a>
中的元素。
使用’text()'可以提取文本内容将设置<>
中进行去除。
例如:使用each
进行遍历,我们按照下边进行输出:
print('---------------------each--------------------------------')
print(each)
print()
print('---------------------each.a-----------------------------')
print(each.a)
print()
print('---------------------each.a.span-----------------------------')
print(each.a.span)
print()
print('---------------------each.a.span.text-------------------------')
print(each.a.span.text)
得到第一个输出结果为:
---------------------each--------------------------------
<div class="hd">
<a class="" href="https://movie.douban.com/subject/1292052/">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a>
<span class="playable">[可播放]</span>
</div>
---------------------each.a-----------------------------
<a class="" href="https://movie.douban.com/subject/1292052/">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a>
---------------------each.a.span-----------------------------
<span class="title">肖申克的救赎</span>
---------------------each.a.span.text-------------------------
肖申克的救赎
5. 数据进行保存
将数据保存到Excel表格中,使用xlwt
库中table.write()
函数进行填写。
具体可以查看:python Excel数据读取与写入 - CSDN博客
6. 完整程序
下边是完整程序保存,注意使用的是python3运行环境。
import requests
import xlwt
from bs4 import BeautifulSoup
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
'Host':'movie.douban.com'
}
movie_list = []
director_list = []
time_list = []
star_list = []
for i in range(0,10):
link = 'https://movie.douban.com/top250?start=' + str(i*25)
res = requests.get(link,headers=headers,timeout = 10)
soup = BeautifulSoup(res.text,"lxml")
div_list = soup.find_all('div', class_ = 'hd')
div1_list = soup.find_all('div', class_='bd')
div2_list = soup.find_all('div', class_='star')
for each in div_list:
movie = each.a.span.text.strip()
movie_list.append(movie)
for each in div1_list:
info = each.p.text.strip()
if len(info) < 3:
continue
time_start = info.find('20')
if time_start < 0:
time_start = info.find('19')
end = info.find('...')
time = info[end+32:end+36]
time_list.append(time)
end = info.find('主')
director = info[4:end-3]
director_list.append(director)
for each in div2_list:
info = each.text.strip()
star = info[0:3]
star_list.append(star)
file = xlwt.Workbook()
table = file.add_sheet('sheet name')
table.write( 0, 0, "排名")
table.write( 0, 1, "电影")
table.write( 0, 2, "时间")
table.write( 0, 3, "导演")
table.write( 0, 4, "评分")
for i in range(len(star_list)):
table.write(i + 1, 0, i+1)
table.write(i + 1, 1, movie_list[i])
table.write(i + 1, 2, time_list[i])
table.write(i + 1, 3, director_list[i])
table.write(i + 1, 4, star_list[i])
# print("名称:%s"%movie_list[i])
# print("时间:%s" % time_list[i])
# print("导演:%s" % director_list[i])
# print("评分:%s" % star_list[i])
# print()
# print()
file.save('data.xls')