网页内嵌PDF获取的办法

最近女王大人为了通过某认证考试,交了2000RMB,官方居然没有给线下教材资料,直接给的是在线教材,教材是PDF的但是是内嵌在网页内,可惜却没有给具体的PDF地址,无法下载,看到女王大人一点点的截图保存,深感心痛。思考能否通过脚本实现爬取网页内嵌的PDF并完成下载。



思路:

1. 查看网页源代码,找寻PDF文件地址。很多时候,网站会在网页源代码中隐藏PDF文件的直接下载地址,我们可以通过查找关键字like ".pdf"找到该地址,然后直接下载。

2. 使用浏览器开发者工具分析网络请求,找寻PDF文件地址。当我们访问网页时,浏览器会自动发出许多网络请求,其中很可能包含PDF文件的请求,我们可以通过分析找到请求URL并下载。

3. 使用爬虫程序自动分析网页并下载PDF。我们可以编写爬虫程序使用Requests库访问网页,自动解析网页源代码和网络请求,一旦发现PDF文件请求就进行下载。

首先通过网页源码,查找PDF文件失败,继而转为使用python进行爬取。



使用Requests获取网页内容:

import requests
url = "目标网页地址"
response = requests.get(url)
html = response.text

解析网页源码找寻PDF地址:

import re
pattern = re.compile(r'http.*?.pdf')
result = pattern.findall(html)
pdf_url = result[0] # 获取第一个匹配结果

下载PDF文件:

import requests
pdf_response = requests.get(pdf_url)
with open("pdf文件.pdf", "wb") as f:
f.write(pdf_response.content)

将上述脚本代码的思路整合行程统一执行脚本:

import requests
import re
url = "目标网页地址"
response = requests.get(url)
html = response.text
pattern = re.compile(r'http.*?.pdf')
result = pattern.findall(html)
pdf_url = result[0]
pdf_response = requests.get(pdf_url)
with open("course.pdf", "wb") as f:
f.write(pdf_response.content)
print("PDF文件已下载!")

执行结果不理想,代码报错



pdf_url = result[0]
~~~~~~^^^
IndexError: list index out of range

报错原因分析可能原因:

1. 网页源码中不存在PDF URL,正则表达式无法匹配,result为空列表。

2. 正则表达式匹配模式错误,无法正确匹配PDF URL,导致result为空列表。

通过重新打开浏览器打开目标网页地址,发现跳转至了首页,并且处于未登陆状态。开来要完成PDF爬取还需增加对网站当前账号的cookie,session,token等信息的获取,而这些信息基本都是通过浏览器开发者工具获取。

有点复杂,既然又转回开发者工具,那么转变思路,通过控制台命令的方式来进行PDF爬取试试。

开发者调试模式-控制台命令:

let pdf_url = "";
document.querySelectorAll("iframe, object, embed").forEach(element => {
if (element.src.includes(".pdf")) {
pdf_url = element.src;
}
});
console.log(pdf_url);

执行结果反馈了PDF的绝对地址,使用浏览器能正常打开该PDF文件,使用下载工具完成PDF的下载。


相关文章

教你免费下载付费文档,不限次数不用任何工具,全网资料任意复制

我们在搜索资料的时候会看到一些非常有用的资料,但往往这些资料都是付费资料。只能看一部分,不能直接复制下来。如果要直接下载,那只能付费下载。今天就教大家一个方法,可以免费复制付费文档资料。一分钟学会,看...

网上的付费文档无法下载?这几个方法10秒搞定,任意免费复制

工作或者学习过程中,我们很多时候需要在网上找资料,但是想要的资料却要付费或者提示无法下载怎么办?别怕,这几个方法,让你10秒就能搞定付费文档,任意复制。1. 打印界面复制遇到文档需要付费或者无法复制的...

网页上的文档无法下载和复制?这些技巧让你30秒解决问题,盘它

相信上班族和学生群体都遇到过下面这种情形,想在网上查询资料,可是有用文档显示无法下载和复制,这么多文字,然后要手动打出来吗?当然不用!下面几个小技巧,30秒就能解决这个问题。1. 进入打印界面复制首先...

网站整站下载工具-Website Downloader

随着互联网的发展,网站已经成为了信息分享和传播的渠道之一。在某些情况下,我们可能需要将整个网站保存在本地,以便离线浏览、备份或其他目的。这就是 "Website Downloader"...

教你如何把网页中的图片保存下来?

我们在浏览网页的时候想保存一张图片,一般主要点击右键,另存为图片就可以保存到本地了。但是有些网页对内容做了保护措施,这时候我们就无法右键保存图片了。今天发芽谷小编就来教大家怎么保存无法右键保存的图片,...

网页中实现文件上传下载的三种解决方案(推荐)

网页中实现文件上传下载的三种解决方案(推荐),HTML5实现文件批量上传组件,JQUERY 实现文件夹上传(保留目录结构),B/S大文件上传支持断点上传,WebService 大文件上传,断点续传分片...