清科谷体的博客

  • 文章
  • 关于
  • 联系
  • 隐私政策

  1. 首页
  2. 编程
  3. 正文

用 Python 爬虫批量下载文件(三)使用selenium解析动态网页

2025年2月9日 149点热度 0人点赞 0条评论

有些 Javascript 生成的动态内容,没有办法通过网页源代码查看。因为解析出的网页内容只是静态页面,不包含动态元素。

目前最新的前端技术比如服务器端渲染(SSR)、单页面应用(SPA)等,都是看不到静态的网页源码的。这种网页只能通过访问网站,使用浏览器开发者工具即时查看显示的元素。

Python可以使用Selenium模拟浏览器行为加载页面,就可以获得网页的实际显示元素。

下载浏览器驱动

搜索浏览器名字 + webdriver ,是一个单文件程序。下载后扔到C:\Users\user\AppData\Local\Programs\Python\Python311\Scripts,这是python安装路径下的script文件夹。放到这里面,python解释器能够识别,就不需要手动写路径了。

我有两个webdriver,geckodirver是firefox的驱动,一个是chromedriver。

演示程序

from selenium import webdriver
from bs4 import BeautifulSoup
import time

# 设置Selenium的WebDriver(例如Chrome)
driver = webdriver.Chrome()

# 打开目标网页
driver.get('https://blog.ingke.net')

# 等待页面加载完成
time.sleep(5)  # 可以根据需要调整等待时间

# 获取页面源代码
page_source = driver.page_source

# 使用BeautifulSoup解析页面
soup = BeautifulSoup(page_source, 'html.parser')

# 提取你需要的信息
# 例如:soup.find_all('a')

# 关闭浏览器
driver.quit()

这回打开我的博客首页,然后打开一个浏览器页面,并打印所有的链接标签,最后关闭浏览器。

下载脚本

我要从一个民间的邦多利wiki上下载游戏解包后的文件。查看源代码只有一堆样式表,看不到任何网页结构。

使用Selenium + BeautifulSoup 解析网页。获取所有文件的url,加上网站的域名,拼接成完整的下载地址。然后将所有地址的文件下载保存到本地。

下载代码由Deepseek AI生成,我不太会用BeautifulSoup筛选元素。

import os
import requests
from selenium import webdriver
from bs4 import BeautifulSoup
import time

# 设置Selenium的WebDriver(例如Chrome)
driver = webdriver.Firefox()

# 打开目标网页
driver.get('https://bestdori.com/tool/explorer/asset/jp/live2d/chara/040_general')

# 等待页面加载完成
time.sleep(5)  # 可以根据需要调整等待时间

# 获取页面源代码
page_source = driver.page_source

# 使用 BeautifulSoup 解析页面
soup = BeautifulSoup(page_source, 'html.parser')

# 查找所有 class 为 "is-inline-block m-lr-xs m-b-s" 的 div
target_divs = soup.find_all('div', class_='is-inline-block m-lr-xs m-b-s')

# 提取这些 div 内的所有  标签的 href 属性
hrefs = []
for div in target_divs:
    a_tags = div.find_all('a')
    for a in a_tags:
        href = a.get('href')
        if href:  # 确保 href 存在
            hrefs.append(href)

# 拼接完整链接并下载文件
base_url = 'https://bestdori.com'  # 基础 URL
download_folder = 'downloads'  # 下载文件保存的文件夹

# 创建下载文件夹(如果不存在)
if not os.path.exists(download_folder):
    os.makedirs(download_folder)

# 下载文件
for href in hrefs:
    # 拼接完整链接
    full_url = base_url + href
    
    # 获取文件名(从链接中提取最后一部分作为文件名)
    file_name = href.split('/')[-1]
    file_path = os.path.join(download_folder, file_name)
    
    # 发送 HTTP 请求下载文件
    try:
        print(f'正在下载: {full_url}')
        response = requests.get(full_url, stream=True)
        response.raise_for_status()  # 检查请求是否成功
        
        # 保存文件
        with open(file_path, 'wb') as file:
            for chunk in response.iter_content(chunk_size=8192):
                file.write(chunk)
        print(f'文件已保存: {file_path}')
    except Exception as e:
        print(f'下载失败: {full_url}, 错误: {e}')

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Python Selenium 爬虫 脚本 自动化
最后更新:2025年4月28日

ingker

自娱自乐

点赞
< 上一篇

文章评论

取消回复

COPYRIGHT © 2025 清科谷体's blog. ALL RIGHTS RESERVED.
THEME KRATOS MADE BY VTROIS | MODIFIED BY INGKER

正在加载今日诗词....

本站已运行