网页内嵌PDF获取的办法

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


网页内嵌PDF获取的办法



思路:
1. 查看网页源代码,找寻PDF文件地址 。很多时候,网站会在网页源代码中隐藏PDF文件的直接下载地址,我们可以通过查找关键字like ".pdf"找到该地址,然后直接下载 。
2. 使用浏览器开发者工具分析网络请求,找寻PDF文件地址 。当我们访问网页时,浏览器会自动发出许多网络请求,其中很可能包含PDF文件的请求,我们可以通过分析找到请求URL并下载 。
3. 使用爬虫程序自动分析网页并下载PDF 。我们可以编写爬虫程序使用Requests库访问网页,自动解析网页源代码和网络请求,一旦发现PDF文件请求就进行下载 。
首先通过网页源码 , 查找PDF文件失败,继而转为使用python进行爬取 。


网页内嵌PDF获取的办法



使用Requests获取网页内容:
import requestsurl = "目标网页地址"response = requests.get(url)html = response.text
解析网页源码找寻PDF地址:
import repattern = re.compile(r'http.*?.pdf')result = pattern.findall(html)pdf_url = result[0] # 获取第一个匹配结果
下载PDF文件:
import requestspdf_response = requests.get(pdf_url)with open("pdf文件.pdf", "wb") as f:f.write(pdf_response.content)
将上述脚本代码的思路整合行程统一执行脚本:
import requestsimport reurl = "目标网页地址"response = requests.get(url)html = response.textpattern = 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获取的办法



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的下载 。
【网页内嵌PDF获取的办法】

网页内嵌PDF获取的办法

相关经验推荐