批量保存网页

背景

之前已经写了 2 篇文章:

备份 CSDN 博客(上)

备份 CSDN 博客(下)

但是效果都不怎么好,其实还有一种简单粗暴的方法,就是用浏览器下载,批量下载。

工具

我是 Ubuntu 的操作系统,自带火狐浏览器。要下载 3 个工具:

  1. selenium
  2. geckodriver
  3. PyUserInput

Selenium

Selenium 是一个用于 Web应用程序测试的工具。Selenium 测试直接运行在浏览器中,浏览器自动按照脚本代码做出单击、输入、验证等操作,就像真正的用户在操作一样。

简而言之,我们可以利用 Selenium 来打开浏览器,输入网址,等待页面加载,点击按钮等一系列操作。一句话解释:Selenium 可以控制浏览器,做任何想做的事情。

geckodriver

仓库是 https://github.com/mozilla/geckodriver

geckodriver 实现了 WebDriver 协议描述的 HTTP API, selenium 用 geckodriver 与 Firefox 通信。geckodriver 充当本地端和远程端之间的代理。

PyUserInput

仓库是 https://github.com/SavinaRoja/PyUserInput/

一个用于在 python 中控制鼠标和键盘的模块。


除了上面 3 个,可能还需要安装 pip3,总之搜搜教程,该装啥装啥。

列一下我的版本:

selenium:3.141.0

火狐浏览器:85.0.1

geckodriver:0.22.0(0.29.0?)

python:3.5.2

工具下载和安装

这部分我不熟,都是参考网上的文章。

selenium:略,网上教程很多

geckodriver

下载:

$ wget https://github.com/mozilla/geckodriver/releases/download/v0.22.0/geckodriver-v0.22.0-linux64.tar.gz

然后解压:

$ tar zxvf geckodriver-v0.22.0-linux64.tar.gz

$ geckodriver --version

在这里插入图片描述

最后是移动:

$ mv geckodriver /usr/local/bin

PyUserInput

安装:

$ pip3 install PyUserInput

代码

下面的代码保存为 auto_save.py

from selenium import webdriver
from pykeyboard import PyKeyboard
import time
import fileinput

def save_page(url):	
	br.get(url)
	k = PyKeyboard()
	k.press_key(k.control_key)
	k.tap_key('s')
	k.release_key(k.control_key)
	time.sleep(2) # 非常重要
	k.tap_key(k.home_key)#定位到开始
	time.sleep(1)
	k.type_string('/mnt/hgfs/vm_share/blog_save/')# 保存路径
	time.sleep(1)
	k.tap_key(k.enter_key)
	time.sleep(2)


br = webdriver.Firefox()

i = 0
for line in fileinput.input():
	# 去掉末尾的换行
	url = line.replace('\n', '')
	print('process ' + url + '...')
	save_page(url)
	i = i+1
	print('第 ' + str(i) + ' 个下载完毕')

br.close()

第 7 行:传参网址,等待网页加载

8-11:模拟按键 ctrl + s

12:这里的延时很重要,因为 ctrl + s 需要时间

按键 ctrl + s 后是这样:

在这里插入图片描述

此时需要输入保存路径

可以按【home】键,光标会移动到最开始

第 15 行:输入路径

在这里插入图片描述

第 17 行:输入回车

测试

$ python3 auto_save.py url.txt

url.txt 是之前获取到的博客 URL 列表,可以参考
备份 CSDN 博客(上)

下载完的效果:
在这里插入图片描述

总结

本方法的优点:通用性好,不挑网站,也不怕网站改版;下载的网页比较完整,图片也有;

但是也有很多缺点:

  1. 费时间,要加载整个网页,然后输入路径,再保存,至少也要六七秒钟

  2. 在我测试的时候,偶尔发现会卡住,应该是 selenium 卡住了

  3. 我发现有的网页没有下载,所以下载完成后要检查一下,数目够不够

针对 2 和 3,还没有找到解决方法;大概搜了一下,似乎有点思路,把搜到的文章列一下。

【1】Python selenium —— 一定要会用selenium的等待,三种等待方式解读

https://huilansame.github.io/huilansame.github.io/archivers/sleep-implicitlywait-wait

【2】selenium中关于停止加载的几种方法

https://blog.csdn.net/supramolecular/article/details/82386564

【3】解决 selenium 加载网页阻塞的问题

https://blog.csdn.net/anguuan/article/details/104685099

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值