IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> selenium爬取豆瓣电影和电视剧 -> 正文阅读

[开发测试]selenium爬取豆瓣电影和电视剧

简述

代码直接借助python的selenium的库来控制浏览器,与requests和bs4相比,selenium允许你用高级多的方法实现网页交互,但是因为他启动了Web浏览器,下载文件会比较慢,并且难以在后台运行。假如你考虑的不是通过此程序来练习,那么就直接退出这篇文章。

思路上面,在父页面获取10部电影或者电视剧的link,然后跳转到电影详情页,进行信息爬取。

import os,re
from time import sleep
from selenium import webdriver

URL = "https://www.douban.com/"
URLmovie = 'https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0'
URLseries = ''#后面直接加入跳转,无需这个变量
webdri_path = r'C:\Users\86151\AppData\Local\Google\Chrome\Application\chromedriver.exe'
global flag 

os.mkdir(os.path.join(".","douban"))
os.mkdir(os.path.join(".","douban","movie"))
os.mkdir(os.path.join(".","douban","series"))

# 定义一个函数来获取电影的相关信息,并且存放在文件里面
def getInfo(titleOfWork,aim):
    # 获取电影发布时间和作品名称
    releaseTime = driver.find_element_by_class_name('year')
    if int(re.sub(r"\D","",releaseTime.text)) < 2018:
        return
    # 利用正则表达式取出发布时间中的非数字内容
    fileName = re.sub(r"\D","",releaseTime.text) + re.sub(r"\W","",titleOfWork)
    print(fileName)
    os.mkdir(os.path.join(".","douban",aim,fileName))

    # 存放电影图片
    driver.find_element_by_xpath('//*[@id="mainpic"]/a/img').screenshot(os.path.join(".","douban",aim,fileName,"pic.png"))
    # 创建一个txt文件,写入作品的基本内容,名称,上映年份,导演,主演,作品简介,豆瓣关于这个作品的链接
    with open(os.path.join(".","douban",aim,fileName,"info.txt"),"a") as movieFile:
        # 写入作品名称
        movieFile.write(titleOfWork+"\n")
        # 写入作品上映年份
        movieFile.write("上映日期:" + re.sub(r"\D","",releaseTime.text)+"\n")
        # 写入作品导演
        director = driver.find_element_by_class_name('attrs').text
        movieFile.write("导演:" + director+"\n")
        # 写入作品主演
        starring = driver.find_element_by_class_name('actor').text
        movieFile.write(starring+"\n")
        # 写入作品简介
        # introduction = driver.find_element_by_xpath('//*[@id="link-report"]/span[1]').text
        introduction = driver.find_element_by_class_name('related-info').text
        movieFile.write(introduction+"\n")
        # 写如链接
        movieFile.write("链接:"+driver.current_url)
        global flag 
        flag +=1
def openURL(aim,Links):
    global flag
    flag = 0
    for link in Links:
        # 获取电影名称
        titleOfWork = link.text
        print(type(link.text[-3:]))
        if ("." not in titleOfWork[-3:]) or (float(titleOfWork[-3:]) < 7):
            continue
        driver.execute_script(js.format(link.get_attribute("href")))
        driver.switch_to_window(driver.window_handles[-1])
        getInfo(titleOfWork[:-3],aim)
        # 关闭新建的电影窗口
        driver.close()
        driver.switch_to_window(driver.window_handles[0])
        if flag == 10:
            break
try:
    driver = webdriver.Chrome(webdri_path)
    driver.get(URLmovie)
    driver.implicitly_wait(3)
    driver.maximize_window()
    sleep(1)
    js = "window.open('{}','_blank');"

    # 选10部电影,按评价排序选取电影
    driver.find_element_by_xpath('//*[@id="content"]/div/div[1]/div/div[2]/div[1]/form/div[3]/div[1]/label[2]/input').click()
    driver.find_elements_by_css_selector('.tag-list label')[4].click()
    # 将所有的电影链接存放在links数组里面
    movieLinks = driver.find_elements_by_class_name("item")
    openURL("movie",movieLinks)

    # 处理电视剧部分
    driver.find_element_by_xpath('//*[@id="db-nav-movie"]/div[2]/div/ul/li[3]/a').click()
    seriesLinks = driver.find_elements_by_class_name("item")
    openURL("series",seriesLinks)

    driver.quit()
except Exception as e:
    print(e)

常见问题

  1. 不能运行,看看是否安装webdriver。我用的是谷歌浏览器,所以使用的是谷歌的webdriver,请安装对应浏览器的对应版本。
  2. 有可能显示到一个让你登录的页面,这是由于我在刚开始打开页面时不是真正的豆瓣主页面。可以试着改变网络,或者增加跳转。
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:19:40  更:2022-01-12 00:22:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 5:47:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码