文章插图
那么我们的疑惑一下就解决了 , 只需要不断地进行换页的爬取 , 就可以了
接下来就是如何实现换页的操作了
这个需要两个步骤 , 先是点击继续阅读 , 然后进行页面输入实现换页 。
先实现点击的操作 , 代码如下:
button = driver.find_element_by_xpath("//*[@id='html-reader-go-more']/div[2]/div[1]/span")button.click()driver.execute_script("arguments[0].click();", button)
整个操作是通过 JS 来进行的 , 大家可以把这个记住 , 以后需要点击的时候直接用就可以然后就是输入页面实现换页 , 这个其实涉及的比较多 , 细分的话 , 步骤分为获取总页数 , 依次输入页面并点击 。
import re# 寻找页面source = re.compile(r'<span class="page-count">/(.*?)</span>')number = int(source.findall(driver.page_source)[0])# 输入页面并点击driver.find_element_by_class_name("page-input").clear()driver.find_element_by_class_name("page-input").send_keys('2')driver.find_element_by_class_name("page-input").send_keys(Keys.ENTER)
如果小伙伴成功实现了上面的操作 , 其实大体的爬取工作已经差不多了 , 接下来就是保存我们的 PPT 和 PDF了文章插图
因为爬取 PDF 和 PPT 的时候 , 我们是爬取的图片的源地址 , 那么我们要获得这张图片并保存下来就必须对这个地址发起请求 , 然后将返回头以二进制保存下来 。
for m in range(3):pic = requests.get(z[m]).content# 方法一#file = open(f'./照片/{m+1}.jpg','wb')#file.write(pic)#file.close()# 方法二with open(f'./照片/{m+1}.jpg','wb') as f:f.write(pic)f.close()
在这里 , 提醒大家一下一定要按照对图片用正确顺序进行命名 , 因为后面保存为 PDF 的时候 , 需要排序在 py 文件的目录下 , 大家就可以看见保存下来的图片了
最后一步 , 将图片保存为 PDF
from PIL import Imageimport osfolderPath = "F:/TEST"filename = "test"files = os.listdir(folderPath)jpgFiles = []sources = []for file in files:if 'jpg' in file:jpgFiles.append(file)tep = []for i in jpgFiles:ex = i.split('.')tep.append(int(ex[0]))tep.sort()jpgFiles=[folderPath +'/'+ str(i) + '.jpg' for i in tep]output = Image.open(jpgFiles[0])jpgFiles.pop(0)for file in jpgFiles:img = Image.open(file)img = img.convert("P")sources.append(img)output.save(f"./{filename}.pdf","PDF",save_all=True,append_images=sources)
最终的结果就是生成了咱们的 PDF 文件文章插图
上述的操作看起来很多 , 很麻烦 , 其实并不是的 , 因为大部分的操作都是固定的 , 大家只需要记熟就可以了 。
简单的 GUI 制作
文章插图
GUI 这块 , 我们整了点新活儿 , 用 C# 编写 winform 简易的 GUI , 调用爬虫的 Py thon 代码
文章插图
C# 调用 python 项目的方式我简单用 Process 类执行 , 通过执行 python.exe 执行代码
public static void RunPythonScript(string sArgName, string py, string args = "", params string[] teps){Process p = new Process();//(没放debug下 , 写绝对路径)//string path = @"C:UserszllDesktopbaiduCSharpCallPythonbinDebug" + sArgName;// 获得python文件的绝对路径(将文件放在c#的debug文件夹中可以这样操作)string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + sArgName;//没有配环境变量的话 , 可以像我这样写python.exe的绝对路径 。如果配了 , 直接写"python.exe"即可//p.StartInfo.FileName = @"C:UserszllAppDataLocalProgramsPythonPython37-32python.exe";p.StartInfo.FileName = @py;string sArguments = path;foreach (string sigstr in teps){sArguments += " " + sigstr;//传递参数}sArguments += " " + args;p.StartInfo.Arguments = sArguments;p.StartInfo.UseShellExecute = false;p.StartInfo.RedirectStandardOutput = true;p.StartInfo.RedirectStandardInput = true;p.StartInfo.RedirectStandardError = true;p.StartInfo.CreateNoWindow = true;p.Start();p.BeginOutputReadLine();p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);Console.ReadLine();p.WaitForExit();}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Python量化工具之“k线波幅加速”算法跟踪止盈,仅需一行代码
- 禅茶佛教中的茶文化,佛教与茶参禅悟道
- 怎样做淘宝客在淘宝上拿佣金 怎么开通淘宝客赚佣金教程
- 茶与健康知识,茶与天主教的联系
- Python的安装
- 教育部双减政策是什么?
- 教师资格证什么时候出成绩?
- 建立成功的 Python 环境的 4 个基本工具
- centos7安装python3.7.8和pip3
- Python全栈之Flask 简介