今天我们继续来分享Selenium的第二篇,我们去尝试抓取豆瓣高分电影。
首先我们打开豆瓣的电影评分页面
我们可以看到网页上的大部分的电影都有一个评分,而如果想把评分高于8.0的电影名字全部抓下来,要怎么做呢?
我们的思路可以是这样的:
首先,我们要抓到页面中代表评分这个内容的元素块(这里会用到HTML的知识);
查找到这个评分元素块后,就可以去取出这个分值和8.0进行比较,如果大于等于8.0,我们就把这个电影的名字取出来;
取出电影的名字后,我们就把名字写入一个文件;
下面再来介绍几个Selenium的API:
通过元素id获取单个元素(因为id是唯一的,所以一个html页面中只有存在一一个唯一id的元素)
find_element_by_id
通过元素的路径获取多个元素
find_elements_by_xpath
获取某个元素的属性
get_attribute
点击某个元素
click
写文件
f = open(“record.txt”, “a”)
f.write(‘电影名字:速度与激情’)
f.write(‘电影分数:8.1’)
f.write(‘\n\r’)
f.close()
通过上述的API功能组合就能做出一个自动抓取电影评分大于8.0的电影名字合集。
最后来以抓取电影名字和电影分数为例来分析下如何进行元素的抓取:
第一步:打开网页开发者调试窗口,进行元素块定位:
通过这个网页元素定位功能就可以查找页面上任意元素块对应的Html代码
第二步,寻找电影评分相关元素块:
这里可以看到一层层的元素堆叠,就可以通过find_elements_by_xpath这个API来获取评分元素块:
driver.find_element_by_id(‘content’).find_elements_by_xpath(‘div/div/div/div[4]/div[1]/a/p/strong’)
第三步,用同样的方法来获取电影名:
driver.find_element_by_id(‘content’).find_elements_by_xpath(‘div/div/div/div[4]/div[1]/a/div/span data=”/>)
Note:这里要注意的是用find_elements_by_xpath获取到的是多个元素,所以实际上获取到的返回值是一个数组,而不是单个元素
😄好啦,看到这里,如果已经跃跃欲试,那就不要等,操起家伙,干起来。
参考链接:
中文文档:https://selenium-python-zh.readthedocs.io/en/latest/
GitHub:https://github.com/SeleniumHQ/selenium
声明:来自程序员阿灏,仅代表创作者观点。链接:https://eyangzhen.com/3548.html