豆瓣热门电影爬虫项目
一、项目介绍:
本项目是一个小型练手项目,项目目的是通过反爬技术获得豆瓣电影中热门电影前一百部电影的电影名和评分。由于热门电影栏目的显示页面使用AJAX技术渲染数据,而且在同一页面通过单击底部的“加载更多”获得更多电影信息,这里需要绑定鼠标事件实现加载电影。
二、页面分析
目标页面:首页--->电影--->选电影

单击底部的“加载更多”,如图:

单击后本页面加载了20部电影,与初始页面的20电影加上去一共40部电影了,同时更新url参数,即url尾部的page_start=0更新为page_start=20。如下图:

从分析结果可知,本页面使用AJAX异步传输数据技术,同时在页面中点击底部的“加载更多”获得更多电影信息,所以需要使用selenium自动化库模拟浏览网页获得我们需要抓取的数据,并定位相关数据位置。
三、项目环境及涉及技术:windows10,pycharm IDE,python3.6,selenium库,AJAX动态页面爬取,selenium下设代理IP
四、爬虫步骤:
1,导入selenium库的webdriver子库和ActionsChains鼠标事件子库,设置初始页面url
#导入webdriver模拟浏览子库 from selenium import webdriver #导入ActionsChains鼠标事件库 from selenium.webdriver.common.action_chains import ActionChains #获取初始页面url url = 'https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0'
2,为了防止封IP通过ChromeOptions配置代理IP和端口参数。获取本地chrome浏览器驱动,并请求初始页面url
#实例化Chromeoptions options = webdriver.ChromeOptions() #添加代理IP参数 options.add_argument('--proxy-server=http://59.36.10.79:3128') #设置chrome浏览器驱动 driver = webdriver.Chrome('D:\driver\chrome\chromedriver86.exe') #发送请求 driver.get(url)
3,实例化鼠标事件,定位页面底部“加载更多”的元素,使用for循环连续三次单击“加载更多”页面上加载八十部电影信息(注意:perform()是执行单击事件)
#实例化鼠标事件 mosue = ActionChains(driver) #连续三次单击“加载更多”加载获取80部电影信息 for x in range(3): #定位“加载更多”文字的HTML元素 elt = driver.find_element_by_xpath('//div[@class="list-wp"]/a[@class="more"]') #单击指定元素 mosue.move_to_element(elt).click().perform()
4,xpath定位电影名和评分相关的元素,精准获取这两项信息,赋值给movies,用for循环遍历movies,并把电影名和评分打印出来
(打印形式是 “电影名:title----评分:score”)
movies = driver.find_elements_by_xpath('//div[@class="list"]/a/p') for move in movies: title = move.text[:-3] socre = move.text[-3:] print("电影名:%s -----得分:%s"%(title,socre))
最后的打印结果为
电影名:一切为了杰克逊 -----得分:6.7
电影名:电话 -----得分:7.6
电影名:菊石 -----得分:7.1
电影名:风平浪静 -----得分:6.3
电影名:金刚川 -----得分:6.5
电影名:砍人快乐 -----得分:6.1
电影名:鬼灭之刃 剧场版 无限列车篇 -----得分:8.5
电影名:信条 -----得分:7.7
电影名:夺冠 -----得分:7.3
电影名:曼克 -----得分:7.5
电影名:八佰 -----得分:7.6
电影名:酒精计划 -----得分:7.3
电影名:毕业舞会 -----得分:6.3
电影名:最幸福的季节 -----得分:7.2
电影名:狼行者 -----得分:8.1
电影名:芝加哥七君子审判 -----得分:8.6
电影名:隐形人 -----得分:7.2
电影名:姜子牙 -----得分:6.8
电影名:无声 -----得分:7.3
电影名:玫瑰岛的不可思议的历史 -----得分:8.0
电影名:中国飞侠 -----得分:6.2
电影名:逃跑 -----得分:6.7
电影名:1/2的魔法 -----得分:7.7
电影名:担保 -----得分:7.8
电影名:三振集团英语托业班 -----得分:7.2
电影名:一点就到家 -----得分:6.8
电影名:人造怪物 -----得分:5.9
电影名:我是大哥大 电影版 -----得分:8.1
电影名:亲爱的她 -----得分:6.8
电影名:元首偷走了粉兔子 -----得分:7.9
电影名:进击的巨人:编年史 -----得分:8.5
电影名:末日逃生 -----得分:5.6
电影名:乡下人的悲歌 -----得分:7.4
电影名:领袖水准 -----得分:6.7
电影名:温蒂妮 -----得分:7.4
电影名:分租 -----得分:7.9
电影名:鸣鸟不飞:乌云密布 -----得分:8.2
电影名:南山的部长们 -----得分:8.1
电影名:野性的呼唤 -----得分:7.2
电影名:从邪恶中拯救我 -----得分:7.2
电影名:我在时间尽头等你 -----得分:5.5
电影名:女巫 -----得分:5.8
电影名:夺金营救 -----得分:5.7
电影名:魔法教母 -----得分:6.6
电影名:海绵宝宝:营救大冒险 -----得分:6.3
电影名:悲喜交加 -----得分:7.0
电影名:数码宝贝:最后的进化 -----得分:7.5
电影名:爱与怪物 -----得分:7.2
电影名:灰猎犬号 -----得分:8.0
电影名:爱玛 -----得分:7.2
电影名:85年盛夏 -----得分:6.8
电影名:鲍勃的圣诞礼物 -----得分:7.5
电影名:1917 -----得分:8.5
电影名:逃狱兄弟 -----得分:6.1
电影名:来自深渊:深魂的黎明 -----得分:8.7
电影名:来玩 -----得分:6.1
电影名:波拉特2 -----得分:7.2
电影名:我想结束这一切 -----得分:7.3
电影名:小妇人 -----得分:8.1
电影名:从不,很少,有时,总是 -----得分:7.6
最后成功爬取了80部电影的电影名和评分。
总结
本项目的难点在于通过鼠标事件实现连续单击指定元素实现更多电影信息的加载。就在这一点上我也花了一个多小时的时间查阅鼠标事件的相关资料才得到了最后的结果。本项目也是爬虫工程师或者爱好者掌握应用AJAX技术的动态网页爬虫的典型而且门槛比较低的项目。

浙公网安备 33010602011771号