In [1]:
import re
from time import sleep
import requests
from lxml import etree
import random
import csv
def main(page,f):
url = f'https://movie.douban.com/top250?start={page*25}&filter='
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36',}
resp = requests.get(url,headers=headers)
tree = etree.HTML(resp.text)
# 获取详情页的链接列表
href_list = tree.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[1]/a/@href')
# 获取电影名称列表
name_list = tree.xpath('//*[@id="content"]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')
for url,name in zip(href_list,name_list):
f.flush() # 刷新文件
try:
get_info(url,name) # 获取详情页的信息
except:
pass
sleep(1 + random.random()) # 休息
print(f'第{i+1}页爬取完毕')
def get_info(url,name):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.35 Safari/537.36',
'Host': 'movie.douban.com',
}
resp = requests.get(url,headers=headers)
html = resp.text
tree = etree.HTML(html)
# 导演
dir = tree.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')[0]
# 电影类型
type_ = re.findall(r'property="v:genre">(.*?)</span>',html)
type_ = '/'.join(type_)
# 国家
country = re.findall(r'地区:</span> (.*?)<br',html)[0]
# 上映时间
time = tree.xpath('//*[@id="content"]/h1/span[2]/text()')[0]
time = time[1:5]
# 评分
rate = tree.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()')[0]
# 评论人数
people = tree.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/div/div[2]/a/span/text()')[0]
print(name,dir,type_,country,time,rate,people) # 打印结果
csvwriter.writerow((name,dir,type_,country,time,rate,people)) # 保存到文件中
if __name__ == '__main__':
# 创建文件用于保存数据
with open('03-movie-xpath.csv','a',encoding='utf-8',newline='')as f:
csvwriter = csv.writer(f)
# 写入表头标题
csvwriter.writerow(('电影名称','导演','电影类型','国家','上映年份','评分','评论人数'))
for i in range(10): # 爬取10页
main(i,f) # 调用主函数
sleep(3 + random.random())
肖申克的救赎 弗兰克·德拉邦特 剧情/犯罪 美国 1994 9.7 3065517 第1页爬取完毕 霸王别姬 陈凯歌 剧情/爱情/同性 中国大陆 / 中国香港 1993 9.6 2263815 第1页爬取完毕 阿甘正传 罗伯特·泽米吉斯 剧情/爱情 美国 1994 9.5 2283021 第1页爬取完毕 泰坦尼克号 詹姆斯·卡梅隆 剧情/爱情/灾难 美国 / 墨西哥 1997 9.5 2323017 第1页爬取完毕 千与千寻 宫崎骏 剧情/动画/奇幻 日本 2001 9.4 2371699 第1页爬取完毕 这个杀手不太冷 吕克·贝松 剧情/动作/犯罪 法国 / 美国 1994 9.4 2404583 第1页爬取完毕 美丽人生 罗伯托·贝尼尼 剧情/喜剧/爱情/战争 意大利 1997 9.5 1395843 第1页爬取完毕 星际穿越 克里斯托弗·诺兰 剧情/科幻/冒险 美国 / 英国 / 加拿大 2014 9.4 1993233 第1页爬取完毕 盗梦空间 克里斯托弗·诺兰 剧情/科幻/悬疑/冒险 美国 / 英国 2010 9.4 2184248 第1页爬取完毕 楚门的世界 彼得·威尔 剧情/科幻 美国 1998 9.4 1849689 第1页爬取完毕 辛德勒的名单 史蒂文·斯皮尔伯格 剧情/历史/战争 美国 1993 9.5 1180343 第1页爬取完毕 忠犬八公的故事 拉斯·霍尔斯道姆 剧情 美国 / 英国 2009 9.4 1461695 第1页爬取完毕 海上钢琴师 朱塞佩·托纳多雷 剧情/音乐 意大利 1998 9.3 1763729 第1页爬取完毕 三傻大闹宝莱坞 拉吉库马尔·希拉尼 剧情/喜剧/爱情/歌舞 印度 2009 9.2 1956049 第1页爬取完毕 放牛班的春天 克里斯托夫·巴哈蒂 剧情/音乐 法国 / 瑞士 / 德国 2004 9.3 1386663 第1页爬取完毕 机器人总动员 安德鲁·斯坦顿 科幻/动画/冒险 美国 2008 9.3 1391900 第1页爬取完毕 疯狂动物城 拜伦·霍华德 喜剧/动画/冒险 美国 2016 9.2 2080281 第1页爬取完毕 无间道 刘伟强 剧情/惊悚/犯罪 中国香港 2002 9.3 1457238 第1页爬取完毕 控方证人 比利·怀尔德 剧情/悬疑/惊悚/犯罪 美国 1957 9.6 632124 第1页爬取完毕 大话西游之大圣娶亲 刘镇伟 喜剧/爱情/奇幻/古装 中国香港 / 中国大陆 1995 9.2 1612358 第1页爬取完毕 熔炉 黄东赫 剧情 韩国 2011 9.3 981454 第1页爬取完毕 教父 弗朗西斯·福特·科波拉 剧情/犯罪 美国 1972 9.3 1030405 第1页爬取完毕 触不可及 奥利维埃·纳卡什 剧情/喜剧 法国 2011 9.3 1198714 第1页爬取完毕 当幸福来敲门 加布里埃莱·穆奇诺 剧情/家庭/传记 美国 2006 9.2 1597734 第1页爬取完毕 寻梦环游记 李·昂克里奇 喜剧/动画/音乐/奇幻 美国 2017 9.1 1808151 第1页爬取完毕 末代皇帝 贝纳尔多·贝托鲁奇 剧情/传记/历史 英国 / 意大利 / 中国大陆 / 法国 1987 9.3 952522 第2页爬取完毕 龙猫 宫崎骏 动画/奇幻/冒险 日本 1988 9.2 1334769 第2页爬取完毕 怦然心动 罗伯·莱纳 剧情/喜剧/爱情 美国 2010 9.1 1933820 第2页爬取完毕 哈利·波特与魔法石 克里斯·哥伦布 奇幻/冒险 美国 / 英国 2001 9.2 1283990 第2页爬取完毕 活着 张艺谋 剧情/家庭/历史 中国大陆 / 中国香港 1994 9.3 905413 第2页爬取完毕 蝙蝠侠:黑暗骑士 克里斯托弗·诺兰 剧情/动作/科幻/惊悚/犯罪 美国 / 英国 2008 9.2 1124362 第2页爬取完毕 指环王3:王者无敌 彼得·杰克逊 剧情/动作/奇幻/冒险 美国 / 新西兰 2003 9.3 852852 第2页爬取完毕 我不是药神 文牧野 剧情/喜剧 中国大陆 2018 9.0 2219868 第2页爬取完毕 乱世佳人 维克多·弗莱明 剧情/爱情/历史/战争 美国 1939 9.3 734658 第2页爬取完毕 飞屋环游记 彼特·道格特 剧情/喜剧/动画/冒险 美国 2009 9.1 1404458 第2页爬取完毕 素媛 李濬益 剧情 韩国 2013 9.3 729474 第2页爬取完毕 哈尔的移动城堡 宫崎骏 爱情/动画/奇幻/冒险 日本 2004 9.1 1172685 第2页爬取完毕 十二怒汉 西德尼·吕美特 剧情 美国 1957 9.4 532204 第2页爬取完毕 让子弹飞 姜文 剧情/喜剧/动作/西部 中国大陆 / 中国香港 2010 9.0 1800686 第2页爬取完毕 何以为家 娜丁·拉巴基 剧情 黎巴嫩 / 美国 / 法国 / 塞浦路斯 / 卡塔尔 / 英国 2018 9.1 1103432 第2页爬取完毕 海蒂和爷爷 阿兰·葛斯彭纳 剧情/家庭/冒险 德国 / 瑞士 2015 9.3 690992 第2页爬取完毕 猫鼠游戏 史蒂文·斯皮尔伯格 剧情/传记/犯罪 美国 / 加拿大 2002 9.1 1111192 第2页爬取完毕 摔跤吧!爸爸 涅提·蒂瓦里 剧情/家庭/传记/运动 印度 2016 9.0 1648553 第2页爬取完毕 天空之城 宫崎骏 动画/奇幻/冒险 日本 1986 9.2 942666 第2页爬取完毕 鬼子来了 姜文 剧情/喜剧 中国大陆 2000 9.3 666741 第2页爬取完毕 少年派的奇幻漂流 李安 剧情/奇幻/冒险 美国 / 中国台湾 / 英国 / 加拿大 2012 9.1 1414772 第2页爬取完毕 钢琴家 罗曼·波兰斯基 剧情/音乐/传记/战争 英国 / 法国 / 波兰 / 德国 / 美国 2002 9.3 692415 第2页爬取完毕 指环王2:双塔奇兵 彼得·杰克逊 剧情/动作/奇幻/冒险 美国 / 新西兰 2002 9.2 801423 第2页爬取完毕 大话西游之月光宝盒 刘镇伟 喜剧/爱情/奇幻/古装 中国香港 / 中国大陆 1995 9.0 1284417 第2页爬取完毕 闻香识女人 马丁·布莱斯特 剧情 美国 1992 9.1 949706 第2页爬取完毕 死亡诗社 彼得·威尔 剧情 美国 1989 9.2 795071 第3页爬取完毕 绿皮书 彼得·法雷里 剧情/喜剧/音乐/传记 美国 / 中国大陆 2018 8.9 1759105 第3页爬取完毕 大闹天宫 万籁鸣 剧情/动画/奇幻/古装 中国大陆 1961 9.4 470958 第3页爬取完毕 罗马假日 威廉·惠勒 剧情/喜剧/爱情 美国 1953 9.1 994927 第3页爬取完毕 黑客帝国 莉莉·沃卓斯基 动作/科幻 美国 1999 9.1 887351
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) Cell In[1], line 115 111 csvwriter.writerow(('电影名称','导演','电影类型','国家','上映年份','评分','评论人数')) 113 for i in range(10): # 爬取10页 --> 115 main(i,f) # 调用主函数 117 sleep(3 + random.random()) Cell In[1], line 45, in main(page, f) 41 except: 43 pass ---> 45 sleep(1 + random.random()) # 休息 47 print(f'第{i+1}页爬取完毕') KeyboardInterrupt:
In [3]:
import random
import urllib.request
from bs4 import BeautifulSoup
import codecs
from time import sleep
def main(url, headers):
# 发送请求
page = urllib.request.Request(url, headers=headers)
page = urllib.request.urlopen(page)
contents = page.read()
# 用BeautifulSoup解析网页
soup = BeautifulSoup(contents, "html.parser")
infofile.write("")
print('爬取豆瓣电影250: \n')
for tag in soup.find_all(attrs={"class": "item"}):
# 爬取序号
num = tag.find('em').get_text()
print(num)
infofile.write(num + "\r\n")
# 电影名称
name = tag.find_all(attrs={"class": "title"})
zwname = name[0].get_text()
print('[中文名称]', zwname)
infofile.write("[中文名称]" + zwname + "\r\n")
# 网页链接
url_movie = tag.find(attrs={"class": "hd"}).a
urls = url_movie.attrs['href']
print('[网页链接]', urls)
infofile.write("[网页链接]" + urls + "\r\n")
# 爬取评分和评论数
info = tag.find(attrs={"class": "star"}).get_text()
info = info.replace('\n', ' ')
info = info.lstrip()
print('[评分评论]', info)
# 获取评语
info = tag.find(attrs={"class": "inq"})
if (info): # 避免没有影评调用get_text()报错
content = info.get_text()
print('[影评]', content)
infofile.write(u"[影评]" + content + "\r\n")
print('')
if __name__ == '__main__':
# 存储文件
infofile = codecs.open("03-movie-bs4.txt", 'a', 'utf-8')
# 消息头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
# 翻页
i = 0
while i < 10:
print('页码', (i + 1))
num = i * 25 # 每次显示25部 URL序号按25增加
url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter='
main(url, headers)
sleep(5 + random.random())
infofile.write("\r\n\r\n")
i = i + 1
infofile.close()
页码 1 爬取豆瓣电影250: 1 [中文名称] 肖申克的救赎 [网页链接] https://movie.douban.com/subject/1292052/ [评分评论] 9.7 3065499人评价 [影评] 希望让人自由。 2 [中文名称] 霸王别姬 [网页链接] https://movie.douban.com/subject/1291546/ [评分评论] 9.6 2263813人评价 [影评] 风华绝代。 3 [中文名称] 阿甘正传 [网页链接] https://movie.douban.com/subject/1292720/ [评分评论] 9.5 2282998人评价 [影评] 一部美国近现代史。 4 [中文名称] 泰坦尼克号 [网页链接] https://movie.douban.com/subject/1292722/ [评分评论] 9.5 2323016人评价 [影评] 失去的才是永恒的。 5 [中文名称] 千与千寻 [网页链接] https://movie.douban.com/subject/1291561/ [评分评论] 9.4 2371697人评价 [影评] 最好的宫崎骏,最好的久石让。 6 [中文名称] 这个杀手不太冷 [网页链接] https://movie.douban.com/subject/1295644/ [评分评论] 9.4 2404580人评价 [影评] 怪蜀黍和小萝莉不得不说的故事。 7 [中文名称] 美丽人生 [网页链接] https://movie.douban.com/subject/1292063/ [评分评论] 9.5 1395843人评价 [影评] 最美的谎言。 8 [中文名称] 星际穿越 [网页链接] https://movie.douban.com/subject/1889243/ [评分评论] 9.4 1993231人评价 [影评] 爱是一种力量,让我们超越时空感知它的存在。 9 [中文名称] 盗梦空间 [网页链接] https://movie.douban.com/subject/3541415/ [评分评论] 9.4 2184248人评价 [影评] 诺兰给了我们一场无法盗取的梦。 10 [中文名称] 楚门的世界 [网页链接] https://movie.douban.com/subject/1292064/ [评分评论] 9.4 1849687人评价 [影评] 如果再也不能见到你,祝你早安,午安,晚安。 11 [中文名称] 辛德勒的名单 [网页链接] https://movie.douban.com/subject/1295124/ [评分评论] 9.5 1180341人评价 [影评] 拯救一个人,就是拯救整个世界。 12 [中文名称] 忠犬八公的故事 [网页链接] https://movie.douban.com/subject/3011091/ [评分评论] 9.4 1461695人评价 [影评] 永远都不能忘记你所爱的人。 13 [中文名称] 海上钢琴师 [网页链接] https://movie.douban.com/subject/1292001/ [评分评论] 9.3 1763729人评价 [影评] 每个人都要走一条自己坚定了的路,就算是粉身碎骨。 14 [中文名称] 三傻大闹宝莱坞 [网页链接] https://movie.douban.com/subject/3793023/ [评分评论] 9.2 1956037人评价 [影评] 英俊版憨豆,高情商版谢耳朵。 15 [中文名称] 放牛班的春天 [网页链接] https://movie.douban.com/subject/1291549/ [评分评论] 9.3 1386663人评价 [影评] 天籁一般的童声,是最接近上帝的存在。 16 [中文名称] 机器人总动员 [网页链接] https://movie.douban.com/subject/2131459/ [评分评论] 9.3 1391897人评价 [影评] 小瓦力,大人生。 17 [中文名称] 疯狂动物城 [网页链接] https://movie.douban.com/subject/25662329/ [评分评论] 9.2 2080275人评价 [影评] 迪士尼给我们营造的乌托邦就是这样,永远善良勇敢,永远出乎意料。 18 [中文名称] 无间道 [网页链接] https://movie.douban.com/subject/1307914/ [评分评论] 9.3 1457238人评价 [影评] 香港电影史上永不过时的杰作。 19 [中文名称] 控方证人 [网页链接] https://movie.douban.com/subject/1296141/ [评分评论] 9.6 632124人评价 [影评] 比利·怀德满分作品。 20 [中文名称] 大话西游之大圣娶亲 [网页链接] https://movie.douban.com/subject/1292213/ [评分评论] 9.2 1612356人评价 [影评] 一生所爱。 21 [中文名称] 熔炉 [网页链接] https://movie.douban.com/subject/5912992/ [评分评论] 9.3 981454人评价 [影评] 我们一路奋战不是为了改变世界,而是为了不让世界改变我们。 22 [中文名称] 教父 [网页链接] https://movie.douban.com/subject/1291841/ [评分评论] 9.3 1030405人评价 [影评] 千万不要记恨你的对手,这样会让你失去理智。 23 [中文名称] 触不可及 [网页链接] https://movie.douban.com/subject/6786002/ [评分评论] 9.3 1198704人评价 [影评] 满满温情的高雅喜剧。 24 [中文名称] 当幸福来敲门 [网页链接] https://movie.douban.com/subject/1849031/ [评分评论] 9.2 1597735人评价 [影评] 平民励志片。 25 [中文名称] 寻梦环游记 [网页链接] https://movie.douban.com/subject/20495023/ [评分评论] 9.1 1808143人评价 [影评] 死亡不是真的逝去,遗忘才是永恒的消亡。 页码 2 爬取豆瓣电影250: 26 [中文名称] 末代皇帝 [网页链接] https://movie.douban.com/subject/1293172/ [评分评论] 9.3 952521人评价 [影评] “不要跟我比惨,我比你更惨”再适合这部电影不过了。 27 [中文名称] 龙猫 [网页链接] https://movie.douban.com/subject/1291560/ [评分评论] 9.2 1334768人评价 [影评] 人人心中都有个龙猫,童年就永远不会消失。 28 [中文名称] 怦然心动 [网页链接] https://movie.douban.com/subject/3319755/ [评分评论] 9.1 1933818人评价 [影评] 真正的幸福是来自内心深处。 29 [中文名称] 哈利·波特与魔法石 [网页链接] https://movie.douban.com/subject/1295038/ [评分评论] 9.2 1283990人评价 [影评] 童话世界的开端。 30 [中文名称] 活着 [网页链接] https://movie.douban.com/subject/1292365/ [评分评论] 9.3 905413人评价 [影评] 张艺谋最好的电影。 31 [中文名称] 蝙蝠侠:黑暗骑士 [网页链接] https://movie.douban.com/subject/1851857/ [评分评论] 9.2 1124362人评价 [影评] 无尽的黑暗。 32 [中文名称] 指环王3:王者无敌 [网页链接] https://movie.douban.com/subject/1291552/ [评分评论] 9.3 852852人评价 [影评] 史诗的终章。 33 [中文名称] 我不是药神 [网页链接] https://movie.douban.com/subject/26752088/ [评分评论] 9.0 2219868人评价 [影评] 对我们国家而言,这样的电影多一部是一部。 34 [中文名称] 乱世佳人 [网页链接] https://movie.douban.com/subject/1300267/ [评分评论] 9.3 734652人评价 [影评] Tomorrow is another day. 35 [中文名称] 飞屋环游记 [网页链接] https://movie.douban.com/subject/2129039/ [评分评论] 9.1 1404453人评价 [影评] 最后那些最无聊的事情,才是最值得怀念的。 36 [中文名称] 素媛 [网页链接] https://movie.douban.com/subject/21937452/ [评分评论] 9.3 729470人评价 [影评] 受过伤害的人总是笑得最开心,因为他们不愿意让身边的人承受一样的痛苦。 37 [中文名称] 哈尔的移动城堡 [网页链接] https://movie.douban.com/subject/1308807/ [评分评论] 9.1 1172683人评价 [影评] 带着心爱的人在天空飞翔。 38 [中文名称] 十二怒汉 [网页链接] https://movie.douban.com/subject/1293182/ [评分评论] 9.4 532201人评价 [影评] 1957年的理想主义。 39 [中文名称] 让子弹飞 [网页链接] https://movie.douban.com/subject/3742360/ [评分评论] 9.0 1800680人评价 [影评] 你给我翻译翻译,神马叫做TMD的惊喜。 40 [中文名称] 何以为家 [网页链接] https://movie.douban.com/subject/30170448/ [评分评论] 9.1 1103432人评价 [影评] 凝视卑弱生命,用电影改变命运。 41 [中文名称] 海蒂和爷爷 [网页链接] https://movie.douban.com/subject/25958717/ [评分评论] 9.3 690988人评价 [影评] 如果生活中有什么使你感到快乐,那就去做吧!不要管别人说什么。 42 [中文名称] 猫鼠游戏 [网页链接] https://movie.douban.com/subject/1305487/ [评分评论] 9.1 1111189人评价 [影评] 骗子大师和执著警探的你追我跑故事。 43 [中文名称] 摔跤吧!爸爸 [网页链接] https://movie.douban.com/subject/26387939/ [评分评论] 9.0 1648553人评价 [影评] 你不是在为你一个人战斗,你要让千千万万的女性看到女生并不是只能相夫教子。 44 [中文名称] 天空之城 [网页链接] https://movie.douban.com/subject/1291583/ [评分评论] 9.2 942666人评价 [影评] 对天空的追逐,永不停止。 45 [中文名称] 鬼子来了 [网页链接] https://movie.douban.com/subject/1291858/ [评分评论] 9.3 666736人评价 [影评] 对敌人的仁慈,就是对自己残忍。 46 [中文名称] 少年派的奇幻漂流 [网页链接] https://movie.douban.com/subject/1929463/ [评分评论] 9.1 1414769人评价 [影评] 瑰丽壮观、无人能及的冒险之旅。 47 [中文名称] 钢琴家 [网页链接] https://movie.douban.com/subject/1296736/ [评分评论] 9.3 692415人评价 [影评] 音乐能化解仇恨。 48 [中文名称] 指环王2:双塔奇兵 [网页链接] https://movie.douban.com/subject/1291572/ [评分评论] 9.2 801423人评价 [影评] 承前启后的史诗篇章。 49 [中文名称] 大话西游之月光宝盒 [网页链接] https://movie.douban.com/subject/1299398/ [评分评论] 9.0 1284417人评价 [影评] 旷古烁今。 50 [中文名称] 闻香识女人 [网页链接] https://movie.douban.com/subject/1298624/ [评分评论] 9.1 949700人评价 [影评] 史上最美的探戈。
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) Cell In[3], line 54 52 url = 'https://movie.douban.com/top250?start=' + str(num) + '&filter=' 53 main(url, headers) ---> 54 sleep(5 + random.random()) 55 infofile.write("\r\n\r\n") 56 i = i + 1 KeyboardInterrupt:
In [ ]: