python之基于selenium模块自动化爬取豆瓣31个种类前若干部(最多前八十部)电影信息保存在excel中

前言

由于我是python爬虫的初学者,所以我从selenium自动化模块开始学起,一些selenium模块安装和游览器驱动安装环境搭配的事情我就不说了。我是基于Chrome游览器的自动化处理,一些安装教程请网上自己搜索!

首先我先将一下我的大致思路:

  1. 使用游览器登陆豆瓣电影排行榜的网址https://movie.douban.com/chart

  2. 打开后台观察我需要爬取的31个分类元素的特征

  3. 把31个分类元素使用selenium存储起来,用于事后进行页面爬取的入口

  4. 重要部分也就是主体部分,把某类电影想要爬取的内容通过页面解析,分类,按照关键字存储起来

  5. 把存储的信息写入excel里面,大公完成

获取31个元素的方法

我是建立了一个类 属性种类和种类网址

from selenium import webdriver
import time
def gethref():
    url = "https://movie.douban.com/chart"
    wd = webdriver.Chrome(r'E:\chromedriver.exe')#加载游览器驱动
    wd.implicitly_wait(10)#等待游览器加载页面
    wd.get(url)
    element = wd.find_elements_by_css_selector('div[class="types"] > span >a')#使用css选择器
    class hrefname:#建立一个类属性是种类和种类网址
        def __init__(self,href,name):
            self.href=href
            self.name=name
    arr=[]#装种类的容器
    for item in element:#遍历获取的元素,把种类信息记录起来
        hrefnames=hrefname(str(item.get_attribute("href")),item.text)
        arr.append(hrefnames)
    wd.quit()#爬完31个网址之后关闭游览器
    # for href in arr:
    #     print(href)
    return arr#返回容器类型hrefname数组


接下来设置主体部分

功能是获取一个网址中滑杆向下划4次的所有电影信息

from selenium import webdriver
import time
import douban
def backcontent(arr,hrefs):
    url =hrefs.href
    wd = webdriver.Chrome(r'E:\chromedriver.exe')
    wd.implicitly_wait(10)
    wd.get(url)
    for index in range(4):  # 下拉滚动条
        target = wd.find_element_by_css_selector("#footer")#抓取id=footer的元素
        wd.execute_script("arguments[0].scrollIntoView();", target)  # 调用js命令拖动到可见的元素去
        time.sleep(1)#每次操作睡眠一秒
    Movies = wd.find_elements_by_css_selector('div[class="movie-list-panel pictext"] >div')  # 获取电影信息页面元素

    class movie:#建立一个Movie类
        def __init__(self, name, timeandtype, grade, people, rank,type):
            self.name = name
            self.timeandtype = timeandtype
            self.grade = grade
            self.people = people
            self.rank = rank
            self.type=type
        def message(self):#打印信息
            print("电影名称=[%s] 电影播放时间和类型=[%s] 评分=[%s] 人数=[%s] 电影排名=[%s] 种类=[%s]" % (
            self.name, self.timeandtype, self.grade, self.people, self.rank,self.type))
    for item in Movies:#根据标签获取单个元素
        name = item.find_element_by_css_selector(".movie-name-text").text#获取电影名
        timeandtype = item.find_element_by_css_selector(".movie-misc").text#获取电影时间和类型
        grade = item.find_element_by_css_selector(".rating_num").text#获取电影评分
        people = item.find_element_by_css_selector(".comment-num").text#获取电影评论人数
        rank = item.find_element_by_css_selector(".rank-num").text#获取电影排名
        m = movie(name=name, timeandtype=timeandtype, grade=grade, people=people, rank=rank,type=hrefs.name)
        arr.append(m)#把东西装入容器里面
        m.message()#输出信息
    wd.quit()  # 关闭游览器
    return arr#把容器返回
# backcontent("https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action=")

最后将上述俩个方法结合起来建立一个新的Mian.py

还要将结果写入excel里,需要导入xlwt模块

import douban
import item
import time
import xlwt
arr=douban.gethref()#是hrefname类型数组
content=[]#用来装Movies对象的容器
for hrefs in arr:
    # print(href)
    content=item.backcontent(content,hrefs)#反复将容器传入方法装Movies对象
    time.sleep(1)
#接下来写入excel文件
workbook=xlwt.Workbook(encoding="utf-8")#创建excel文件
worksheet=workbook.add_sheet("movies")#创建一张表
title=["电影名称","放映时间和类型","评分","观看人数","排行","种类"]#第一行数据
for index in range(len(title)):#先把第一行写完
    worksheet.write(0,index,title[index])#行,列,内容

for index in range(len(content)):#把剩下的内容遍历写入,注意第一行已经被写,所以数据因该放到第二行上面
    worksheet.write((index + 1), 0, content[index].name)
    worksheet.write((index + 1), 1, content[index].timeandtype)
    worksheet.write((index + 1), 2, content[index].grade)
    worksheet.write((index + 1), 3, content[index].people)
    worksheet.write((index + 1), 4, content[index].rank)
    worksheet.write((index + 1), 5, content[index].type)

workbook.save("e:/DouBanMoviesAll.xls")#最后保存一下数据

这个就是整个具体selenium具体流程

最后内容pycharm显示内容

python之基于selenium模块自动化爬取豆瓣31个种类前若干部(最多前八十部)电影信息保存在excel中_第1张图片

excel显示内容

python之基于selenium模块自动化爬取豆瓣31个种类前若干部(最多前八十部)电影信息保存在excel中_第2张图片

如果大家觉得喜欢的化可以点个关注哟!顺便可以关注一波我的个人独立博客

你可能感兴趣的:(python)