利用selenium自动化库实现电影网站的数据获取

本文介绍了使用Python3和Selenium库爬取电影数据网站的过程,包括抓取列表页和详情页的内容,如电影标题、图片、上映时间等信息,并通过CSS选择器解析页面,最后将数据存储到CSV文件中。

简单概述

本系列可能是一个比较长的系列,主要是对《Python3网络爬虫开发实战》前七章的一个内容总结并且熟悉使用一下相关的框架与技术。

任务目标

爬取电影数据网站https://ssr1.scrape.center/,此网站无反爬,数据通过服务端渲染,需要爬取的部分为列表页里面的电影数据详情。

任务目标解析

  1. 爬取https://ssr1.scrape.center/网站的列表页面,通过列表页面的内容获取到需要的URL
  2. 爬取https://ssr1.scrape.center/detail/{id}网站内的数据详情,需要获取的部分有:
    1. 电影标题
    2. 电影图片的url
    3. 电影上映时间
    4. 电影分类
    5. 电影评分
    6. 剧情简介
  3. 将内容存放到需要的数据库中

技术选型与爬取

在进行过多次爬取同一个网站内容后,使用其他的库其实更多的还是一种对库的熟悉与了解,因此这里对于下面的内容通过贴代码进行简单解释的方式来介绍一下,因为在静态网页的数据中很多内容并不涉及到这些库的优势特性。

如何爬取

抓取主函数

# 网页内容的抓取
def scrape_page(browser, url):
    logging.info('scraping %s ...', url)
    # 异常捕获操作
    try:
        browser.get(url)
        wait = WebDriverWait(browser, 10)
        wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div#app')))
    except:
        logging.error('error occured while scraping %s', url, exc_info=True)

使用自动化库访问网页时,需要一个浏览器对象和浏览器需要访问的url,因此通过传入两个参数来实现我们对网页内容的访问,下方的wait字段则是用于等待页面请求的完全响应,由于这个网页由vue.js进行搭建,所以我们整体上只需要等待(By.CSS_SELECTOR, 'div#app')的部分加载完成即可。

列表页内容抓取

# 进行列表页的抓取
def scrape_index(browser, page):
    index_url = f'{
     
     BASE_URL}/page/{
     
     page}'
    return scrape_page(browser, index_url)

逻辑同之前的几个相似,这里分析出页面的请求逻辑后就可以完成对我们所需要的内容进行访问请求。

详情页内容抓取

# 进行详情页的抓取
def scrape_detail(browser, url):
    return scrape_page(browser, url)

如何解析

由于自动化库自带解析的功能,因此我们直接使用自动化库自带的功能进行解析即可。

解析索引页

# 解析索引页
def parse_index(browser):
    # 获取所有超链接
    a_tags = browser.find_elements(By.CSS_SELECTOR, 'a.name')
    
    if not a_tags:
        return []
    
    for a_tag in a_tags:
        detail_url = a_tag.get_attribute('href')
        # 输出链接
        logging.info('get detail url %s', detail_url)
        # 生成器函数
        yield detail_url

自动化库的浏览器对象是直接对当前页面选项卡进行操作的,我们当然可以通过browser.page_source的方式获取资源后调用解析器,但同样的我们可以通过直接利用find_element()方法和find_elements()方法来实现对需要的元素进行获取。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值