概述
1.导入包
import requests
from bs4 import BeautifulSoup
import pandas as pd
2. 构造分页数字列表
page_indexs = list(range(0, 250, 25))
#执行:[0, 25, 50, 75, 100, 125, 150, 175, 200, 225]
page_indexs
def download_all_htmls():
"""
下载所有列表页面的HTML,用于后续的分析
"""
htmls = []
i = 1
for idx in page_indexs:
url = f"https://movie.douban.com/top250?start={idx}&filter="
print("第 {} 页:html: {}".format(i,url))
i += 1
r = requests.get(url,
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)"})
if r.status_code != 200: #请求返回的状态码不为200
raise Exception("error")
htmls.append(r.text)
return htmls
3.执行爬取
htmls = download_all_htmls()
#执行:
第 1 页:html: https://movie.douban.com/top250?start=0&filter=
第 2 页:html: https://movie.douban.com/top250?start=25&filter=
第 3 页:html: https://movie.douban.com/top250?start=50&filter=
第 4 页:html: https://movie.douban.com/top250?start=75&filter=
第 5 页:html: https://movie.douban.com/top250?start=100&filter=
第 6 页:html: https://movie.douban.com/top250?start=125&filter=
第 7 页:html: https://movie.douban.com/top250?start=150&filter=
第 8 页:html: https://movie.douban.com/top250?start=175&filter=
第 9 页:html: https://movie.douban.com/top250?start=200&filter=
第 10 页:html: https://movie.douban.com/top250?start=225&filter=
import lxml
from lxml import etree
tree = etree.HTML(htmls[0]) #实例化 树
def get_onePage_items(tree):
#得到25个<li>标签 里面是各个内容
items = []
li_list = tree.xpath("//ol[@class='grid_view']/li")
#长度25的集合
for li in li_list:
#排名
ranking = li.xpath('./div/div/em/text()')[0]
#封面图片
pic = li.xpath('./div/div/a/@href')[0]
#标题
title_list = li.xpath('./div/div[2]/div/a/span/text()')
title = ""
for i in title_list:
s = "".join(i.split())
title = title + s
#导演
director = li.xpath('normalize-space(./div/div[2]/div[2]/p/text())')
#星星
star = li.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0][6:-2]
if star == '45':
star = '4.5'
#评分
grade = li.xpath('./div/div[2]/div[2]/div/span/text()')[0]
#参与评分人数
num_valuator = li.xpath('./div/div[2]/div[2]/div/span/text()')[1]
#电影格言
quote = li.xpath('./div/div[2]/div[2]/p[2]/span/text()')
items.append({
'ranking':ranking,
'pic':pic,
'title':title,
'director':director,
'star':star,
'grade':grade,
'num_valuator':num_valuator,
'quote':quote
})
print(str(quote))
a = input()
return items
items = get_onePage_items(tree)
print(items)
all_items = []
for html in htmls:
tree = etree.HTML(html) #实例化 树
items = get_onePage_items(tree)
all_items.extend(items)
print(len(all_items))
#执行:250
#print(all_items)
#3、将结果存入excel
df = pd.DataFrame(all_items)
print(df)
# ranking
pic
0
1
https://movie.douban.com/subject/1292052/
1
2
https://movie.douban.com/subject/1291546/
2
3
https://movie.douban.com/subject/1292720/
3
4
https://movie.douban.com/subject/1295644/
4
5
https://movie.douban.com/subject/1292722/
..
...
...
245
246
https://movie.douban.com/subject/2297265/
246
247
https://movie.douban.com/subject/1292528/
247
248
https://movie.douban.com/subject/26393561/
248
249
https://movie.douban.com/subject/25864085/
249
250
https://movie.douban.com/subject/27119724/
title
0
肖申克的救赎/TheShawshankRedemption/月黑高飞(港)/刺激1995(台)
1
霸王别姬/再见,我的妾/FarewellMyConcubine
2
阿甘正传/ForrestGump/福雷斯特·冈普
3
这个杀手不太冷/Léon/杀手莱昂/终极追杀令(台)
4
泰坦尼克号/Titanic/铁达尼号(港/台)
..
...
245
浪潮/DieWelle/恶魔教室(台)/白恤暴潮(港)
246
猜火车/Trainspotting/迷幻列车(港)/定位的火车
247
小萝莉的猴神大叔/BajrangiBhaijaan/娃娃返乡任务(台)/宝莱坞之钢铁奶爸(台)
248
火星救援/TheMartian/火星任务(港)/绝地救援(台)
249
小丑/Joker/小丑起源电影:罗密欧/Romeo
director star grade
0
导演: 弗兰克·德拉邦特 Frank Darabont
主演: 蒂姆·罗宾斯 Tim R...
5
9.7
1
导演: 陈凯歌 Kaige Chen
主演: 张国荣 Leslie Cheung / 张...
5
9.6
2
导演: 罗伯特·泽米吉斯 Robert Zemeckis
主演: 汤姆·汉克斯 Tom ...
5
9.5
3
导演: 吕克·贝松 Luc Besson
主演: 让·雷诺 Jean Reno / 娜塔...
4.5
9.4
4
导演: 詹姆斯·卡梅隆 James Cameron
主演: 莱昂纳多·迪卡普里奥 Leo...
4.5
9.4
..
...
...
...
245
导演: 丹尼斯·甘塞尔 Dennis Gansel
主演: 尤尔根·沃格尔 Jürgen...
4.5
8.7
246
导演: 丹尼·博伊尔 Danny Boyle
主演: 伊万·麦克格雷格 Ewan McG...
4.5
8.5
247
导演: 卡比尔·汗 Kabir Khan
主演: 萨尔曼·汗 Salman Khan /...
4
8.4
248
导演: 雷德利·斯科特 Ridley Scott
主演: 马特·达蒙 Matt Damo...
4.5
8.5
249
导演: 托德·菲利普斯 Todd Phillips
主演: 杰昆·菲尼克斯 Joaqui...
4.5
8.7
num_valuator
quote
0
2452980人评价
[希望让人自由。]
1
1823689人评价
[风华绝代。]
2
1843998人评价
[一部美国近现代史。]
3
2008785人评价
[怪蜀黍和小萝莉不得不说的故事。]
4
1805954人评价
[失去的才是永恒的。 ]
..
...
...
245
234900人评价
[世界离独裁只有五天。]
246
371129人评价
[不可猜的青春迷笛。 ]
247
425344人评价
[宝莱坞的萝莉与大叔。]
248
593670人评价
[]
249
843097人评价
[]
[250 rows x 8 columns]
df.to_excel(r"C:Users二狗Desktop豆瓣电影TOP250.xlsx","w")
li_list = tree.xpath("//ol[@class='grid_view']/li")
ranking = li_list[0].xpath('./div/div/em/text()')[0]
print(ranking)
#['1']
pic = li_list[0].xpath('./div/div/a/@href')[0]
print(pic)
#['https://movie.douban.com/subject/1292052/']
title_list = li_list[1].xpath('./div/div[2]/div/a/span/text()')
title = ""
for i in title_list:
s = "".join(i.split())
title = title + s
print(title)
#霸王别姬/再见,我的妾/FarewellMyConcubine
director = li_list[1].xpath('normalize-space(./div/div[2]/div[2]/p/text())')
print(director)
#['n
导演: 弗兰克·德拉邦特 Frank Darabontxa0xa0xa0主演: 蒂姆·罗宾斯 Tim Robbins /...', 'n
1994xa0/xa0美国xa0/xa0犯罪 剧情n
star = li_list[0].xpath('./div/div[2]/div[2]/div/span[1]/@class')[0]
print(star[6:-2])
#['rating5-t']
grade = li_list[0].xpath('./div/div[2]/div[2]/div/span/text()')[0]
num_valuator = li_list[0].xpath('./div/div[2]/div[2]/div/span/text()')[1]
print(grade)
print(num_valuator)
#['9.7', '2452980人评价']
quote = li_list[0].xpath('./div/div[2]/div[2]/p[2]/span/text()')[0]
print(quote)
#执行:
1
https://movie.douban.com/subject/1292052/
霸王别姬/再见,我的妾/FarewellMyConcubine
导演: 陈凯歌 Kaige Chen
主演: 张国荣 Leslie Cheung / 张丰毅 Fengyi Zha...
5
9.7
2452980人评价
希望让人自由。
title = li_list[1].xpath('./div/div[2]/div/a/span/text()')
a = ""
for i in title:
s = "".join(i.split())
a = a + s
print(a)
#执行:
霸王别姬/再见,我的妾/FarewellMyConcubine
最后
以上就是欢呼摩托为你收集整理的爬取豆瓣前250电影数据的全部内容,希望文章能够帮你解决爬取豆瓣前250电影数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复