赞
踩
本案例通过图文详细介绍使用Selenium请求和解析网页方法,其目标实现的需求为:通过Selenium,获取猫眼中实时网播热度的数据,并打印到控制台中。
案例应用技巧:
Selenium安装方法
通过pip安装selenium模块,安装命令:pip install selenium;
下载与Chrome浏览器版本配套的chromedriver可执行文件,下载地址:http://npm.taobao.org/mirrors/chromedriver。
使用Selenium设计爬虫,不再解析Url并模拟真实请求;而是直接通过Selenium模拟浏览器操作,打开网页,解析数据即可。其具体实现流程如下:
首先,我们先用浏览器看一下我们的目标页面,对它有一个初步的认识。我们发现网页上的数据每3秒左右会自动刷新一次,这说明数据并不是存在于网页源代码中,而是通过Ajax加载的。
接着,使用Selenium启动浏览器(在测试时不建议使用无头模式),并使用该浏览器打开Url:http://piaofang.maoyan.com/dashboard/web-heat
from selenium import webdriverbrowser = webdriver.Chrome(executable_path=r"D:Python38_64chromedriver_81_0_4044_69.exe") # ChromeDriver可执行文件的路径browser.get("http://piaofang.maoyan.com/dashboard/web-heat")
(大家在测试时可以使用IDLE或使用PyCharm的Python Console模式来测试,否则在代码运行完成后打开的浏览器也会被关掉)
下面,我们开始解析网页中的数据。使用浏览器控制台先定位到各个电视剧/网络剧的
标签,然后再定位到这些标签内的排名、名称、信息(名称下的文字)、实时热度、实时播放量所在的标签,并将数据解析出来。Selenium中常用定位方式如下:
for movie_label in browser.find_elements_by_css_selector( "#app > div > div > div.dashboard-content > div.dashboard-list.dashboard-left.bg > div.movielist-container > div > table > tbody > tr"): print("排名:", movie_label.find_element_by_class_name("moviename-index").text) print("名称:", movie_label.find_element_by_class_name("moviename-name").text) print("信息:", movie_label.find_element_by_class_name("moviename-info").text) print("信息:", movie_label.find_element_by_class_name("heat-text").text) print("信息:", movie_label.find_element_by_class_name("last-col").text)
(其中find_element_by_class_name方法为定位到标签;text属性为返回标签内的文字)
运行结果已经可以将前30名的网播热度打印到控制台中,实现了当前需求。
排名: 01名称: 幸福,触手可及!信息: 多平台播放 上线8天信息: 4701.99信息: 3565.2万......
本系列案例采集的一切数据仅可用于学习、研究用途!
完整源代码: 扩展链接中的“猫眼网播热度采集.py”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。