Python爬虫案例:用selenium爬取豆瓣电影

来自CloudWiki
跳转至: 导航搜索

任务描述

我们准备爬取豆瓣排名前250的电影信息,以下是网址:

 https://movie.douban.com/top250

仔细观察,我们可以发现250部电影一共被分成了10页,每页有25部电影;接下来我们看看每页的网址有什么不同:


这是第一页的:

https://movie.douban.com/top250?start=0&filter=

这是第二页的:

https://movie.douban.com/top250?start=25&filter=

因此网址的规律就是start从0开始,然后每页增加25.

之后我们先以第一页为例,看看是如何爬取信息的。

step1:拿到一个页面中25部电影的信息

from selenium import webdriver
url = 'https://movie.douban.com/top250'
driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
driver.get(url)

#conts = driver.find_elements_by_xpath('//div[@class="item"]')
conts = driver.find_elements_by_class_name('item')

print(len(conts))
#conts包含了一个页面中25电影的信息(len(conts)=25) 
'

step2:得到每部电影的具体信息

提取电影排名

刚刚已经知道,conts包含了25部电影的信息,那么我们这里就先提取第一部电影的信息看看。下图就是第一部电影的所有信息:

rank=conts[0].find_element_by_tag_name('em').text

Python22032502.png

从上面的图中可以看出,在一部影片的信息中,只有排名的tag是’em’,所以我们可以直接使用by_tag_name的方式得到排名信息;由于一部电影只有一个排名,所以我们这里使用的是find_element(单数形式)

提取电影名字

movie_name = conts[0].find_element_by_class_name('title').text

可以看到,只有电影名字的class属性值是title,因此可以用by_class_name的方式找到电影名字;但是我们又可以看到,有两个class的属性值都是title,如果用find_elements的话,会把两个都捕获到(即‘肖申克的救赎’和‘The Shawshank Redemption’都会被捕获),因此我们这里使用find_element,它只会捕获到第一个符合要求的信息(即‘肖申克的救赎’)

Python22032502.png

提取电影评分

#方法2:score = conts[0].find_element_by_xpath('.//div[@class="star"]/span[2]').text
score2 = conts[0].find_element_by_xpath('.//span[@class="rating_num"]').text
print(score2)
'''

.表示在当前节点内寻找,当前节点就是conts[0]这个节点

//div[@class="star"]/span[2]表示寻找tag是div,
class属性值是star的节点下的第二个span节点


''' 

提取电影链接

link = conts[0].find_element_by_xpath('.//div[1]/a').get_attribute('href')

提取电影的一句话简介

inq = conts[0].find_element_by_class_name('inq').text

step3:爬取10个页面共250部电影的信息

from selenium import webdriver
driver = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")

for page in range(0,3): 
#这里只爬了前3个页面,要怕爬10个的话把3改成10就可以了
    url = 'https://movie.douban.com/top250?start='+str(page*25)    
    driver.get(url)
    conts = driver.find_elements_by_xpath('//div[@class="item"]') #conts包含了一个页面中25电影的信息(len(conts)=25)
    for i in range(2):
    #这里只爬取了每个页面的前两部电影,要爬该页面的所有电影,把2改成25就可以
        rank=conts[i].find_element_by_tag_name('em').text 
        print(rank) #拿到排名
        movie_name = conts[i].find_element_by_class_name('title').text
        print(movie_name)  #拿到电影名字
        score = conts[i].find_element_by_xpath('.//div[@class="star"]/span[2]').text
        print(score) #拿到评分
        judge_counts = conts[i].find_element_by_xpath('.//div[@class="star"]/span[4]').text[:-3]
        print(judge_counts) #拿到参评人数
        link = conts[i].find_element_by_xpath('.//div[1]/a').get_attribute('href')
        print(link) #拿到电影链接
        inq = conts[i].find_element_by_class_name('inq').text
        print(inq) #拿到一句话简介
        crew = conts[i].find_element_by_xpath('.//div[@class="bd"]/p[1]').text.split('...')[0] #拿到演职员信息
        more_info = conts[i].find_element_by_xpath('.//div[@class="bd"]/p[1]').text.split('...')[-1].strip() #拿到影片的其他相关信息
        print(crew)
        print(more_info)
        print('*'*20)

driver.close() #这里一定要关闭


爬出来的信息:

1
肖申克的救赎
9.7
2580723
https://movie.douban.com/subject/1292052/
希望让人自由。
导演: 弗兰克·德拉邦特 Frank Darabont   主演: 蒂姆·罗宾斯 Tim Robbins /
1994 / 美国 / 犯罪 剧情
********************
2
霸王别姬
9.6
1916420
https://movie.douban.com/subject/1291546/
风华绝代。
导演: 陈凯歌 Kaige Chen   主演: 张国荣 Leslie Cheung / 张丰毅 Fengyi Zha
1993 / 中国大陆 中国香港 / 剧情 爱情 同性
********************
26
触不可及
9.3
946130
https://movie.douban.com/subject/6786002/
满满温情的高雅喜剧。
导演: 奥利维·那卡什 Olivier Nakache / 艾力克·托兰达 Eric Toledano   主
2011 / 法国 / 剧情 喜剧
********************
27
末代皇帝
9.3
759763
https://movie.douban.com/subject/1293172/
“不要跟我比惨,我比你更惨”再适合这部电影不过了。
导演: 贝纳尔多·贝托鲁奇 Bernardo Bertolucci   主演: 尊龙 John Lone / 陈
1987 / 英国 意大利 中国大陆 法国 / 剧情 传记 历史
********************
51
让子弹飞
8.9
1492281
https://movie.douban.com/subject/3742360/
你给我翻译翻译,神马叫做TMD的惊喜。
导演: 姜文 Wen Jiang   主演: 姜文 Wen Jiang / 葛优 You Ge / 周润发 Yun-F
2010 / 中国大陆 中国香港 / 剧情 喜剧 动作 西部
********************
52
指环王1:护戒使者
9.1
757203
https://movie.douban.com/subject/1291571/
传说的开始。
导演: 彼得·杰克逊 Peter Jackson   主演: 伊利亚·伍德 Elijah Wood / 西恩
2001 / 新西兰 美国 / 剧情 动作 奇幻 冒险
********************

参考文档:用selenium爬取豆瓣电影