python 爬虫实战六:用 selenium 爬取豆瓣电影

今天帮朋友爬取豆瓣电影的数据,以便进行社交网络分析。

首先打开豆瓣电影,然后点击 分类 ,选择要爬取的特定电影
python 爬虫实战六:用 selenium 爬取豆瓣电影_第1张图片

这里以国产喜剧片为例:依次点击 电影喜剧中国大陆
python 爬虫实战六:用 selenium 爬取豆瓣电影_第2张图片

然后点击一个小的列表按键
python 爬虫实战六:用 selenium 爬取豆瓣电影_第3张图片

找到我们要爬取的数据
python 爬虫实战六:用 selenium 爬取豆瓣电影_第4张图片

下拉到最底部,有一个 加载更多
python 爬虫实战六:用 selenium 爬取豆瓣电影_第5张图片

点击会出现新的电影数据。说明这是一个动态网站,需要使用selenium来爬取。

selenium 是一个非常简单方便的库,用来模拟人进行上述操作。但是需要提前安装好这个库,而且需要安装火狐或者Chrome浏览器的geckodriver,具体的细节可以阅读官方教程,或者其他网上的一些教程。

这里以点击 加载更多 10次为例,爬取200部电影数据。

代码如下:

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 20 10:10:41 2020

@author: zxw
"""
# 引入库
from selenium import webdriver
import time
import pandas as pd
start_url = 'https://movie.douban.com/'

def get_driver():
    try:
        return webdriver.PhantomJS()
    except Exception:
        return webdriver.Firefox()

    
driver = get_driver()
driver.get(start_url)

# 点击“分类”
driver.find_element_by_link_text('分类').click()
time.sleep(1)
# 点击“电影”
driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/div[1]/div/div/div[1]/div[1]/ul[1]/li[2]/span').click()
time.sleep(1)
# 点击“喜剧”
driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/div[1]/div/div/div[1]/div[1]/ul[2]/li[3]/span').click()
time.sleep(1)
# 点击“中国大陆”
driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/div[1]/div/div/div[1]/div[1]/ul[3]/li[2]/span').click()
time.sleep(1)
# 点击“展开列表”
driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/div[1]/div/div/div[1]/div[2]/div[2]/div[2]/a[2]/span').click()
time.sleep(1)

# 设置点击“加载更多”的次数
n = 10

for i in range(n):
    driver.find_element_by_class_name('more').click()
    time.sleep(1)

# 爬取数据    
title = driver.find_elements_by_class_name('title')
rating = driver.find_elements_by_class_name('rating')
cast = driver.find_elements_by_class_name('cast')
data = pd.DataFrame({
     "电影":title,"评分":rating,"导演":cast,"主演":cast})

data['电影'] = data['电影'].apply(lambda x: x.text)
data['评分'] = data['评分'].apply(lambda x: x.text)
data['导演'] = data['导演'].apply(lambda x: x.text.split('\n')[0][3:].split('/'))
data['主演'] = data['主演'].apply(lambda x: x.text.split('\n')[1][3:].split('/'))

# 输出
outputpath='c:/Users/zxw/Desktop/修身/与自己/数据科学/爬虫/豆瓣电影/movie.csv' ## 路径需要自己改!
data.to_csv(outputpath,sep=',',index=False,header=True,encoding='utf_8_sig')

最终爬取效果如下:
python 爬虫实战六:用 selenium 爬取豆瓣电影_第6张图片

你可能感兴趣的:(爬虫,python,selenium,爬虫)