思路记录
原先思路
利用在线的pdf拆分网站,进行上传文件和下载操作
难点
- 如何进行文件上传操作
效果
- 网站似乎有反爬机制,爬取速度很慢很慢
from selenium import webdriver
from time import sleep
from lxml import etree
import os
import requests
if __name__ == "__main__":
#获取设置的参数信息
path=os.path.abspath('.') #获取当前路径
path_2=path+os.sep+'参数.txt'
canshu_list=[]
with open(path_2, 'r',encoding='utf-8') as f:
for line in f.readlines():
if len(line)!=1:
line=line.rstrip("\n")
canshu=line.split(':')[1]
canshu_list.append(canshu)
#获取目标文件夹下所有子文件的路径
wenjian_list=[]
for root,dirs,files in os.walk(canshu_list[0]):
for file in files:
wenjian_list.append(os.path.join(root,file))
fanyi_list_name=canshu_list[0]+'.\\fanyi'
#创建一个文件夹,存放翻译后的文件
if not os.path.exists(fanyi_list_name):
os.mkdir(fanyi_list_name)
#开始进行爬取翻译文件操作
# 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
driver = webdriver.Chrome(r'E:/chromedriver_win32/chromedriver.exe')
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
#对每个文件的操作
for wenjian in wenjian_list:
#先对每个文件生成文件目录
pdf_dress = wenjian.split('\\')[-1]
pdf_perdir=fanyi_list_name+'\\'+pdf_dress.split('.')[0]
os.mkdir(pdf_perdir)
# 用get打开
driver.get("http://www.pdfdo.com/pdf-split.aspx")
#需要设置休眠来进行反爬
sleep(1)
driver.find_element_by_id('ctl00_content_rdopage2').click()
sleep(1)
driver.find_element_by_name('ctl00$content$txt1').send_keys('4')
sleep(0.5)
driver.find_element_by_name('File').send_keys(wenjian)
sleep(1)
driver.find_element_by_name('ctl00$content$cmdSaveAttachment').click()
sleep(4)
#获取标签数据
page_text = driver.page_source
tree = etree.HTML(page_text)
url_list = tree.xpath('//*[@id="ctl00_content_lblNew"]/a/@href')
url_list=url_list[1:]#需要剔除第一个文件路径,这个文件路径是下总的压缩包的
cnt=0
#对每个拆分后的文件的操作
for url in url_list:
print(url)
cnt=cnt+1
#获取整个pdf文件
pdf_data = requests.get(url=url,headers=headers).content
#生成PDF名称
pdf_name = "("+str(cnt)+")" + pdf_dress
#下载PDF
with open(pdf_perdir+'\\'+pdf_name,'wb') as fp:
fp.write(pdf_data)
print(pdf_name,'下载成功')
# 关闭浏览器
driver.quit()
改进
查询后发现python提供了pypdf2这个库,可以对pdf进行操作
import os
import math
from PyPDF2 import PdfFileReader, PdfFileWriter
# 输入pdf路径,已经要保存的路径
# 将PDF文件每页分割为一个单独pdf的文件,并pdf保存至当前目录中
def pdf_split_1(pdf_input, path_output,want_to_page):
fname = os.path.splitext(os.path.basename(pdf_input))[0] # 获取pdf文件名,去掉后缀名
pdf = PdfFileReader(pdf_input)
pdf_section=math.ceil(pdf.getNumPages()/want_to_page )
page=0
#开始遍历每个部分
for i in range(pdf_section):
pdf_writer = PdfFileWriter()
#将页数加到正常值
for j in range(want_to_page):
page=i*want_to_page+j
if page<pdf.getNumPages():
pdf_writer.addPage(pdf.getPage(page))
else:
break
output_filename = path_output + r'\{}-{}.pdf'.format(fname, i)
with open(output_filename, 'wb') as out:
pdf_writer.write(out)
print('生成文件:{}'.format(output_filename))
if __name__ == "__main__":
#获取设置的参数信息
path=os.path.abspath('.') #获取当前路径
path_2=path+os.sep+'参数.txt'
canshu_list=[]
with open(path_2, 'r',encoding='utf-8') as f:
for line in f.readlines():
if len(line)!=1:
line=line.rstrip("\n")
canshu=line.split(':')[1]
canshu_list.append(canshu)
#获取目标文件夹下所有子文件的路径
wenjian_list=[]
for root,dirs,files in os.walk(canshu_list[0]):
for file in files:
wenjian_list.append(os.path.join(root,file))
fanyi_list_name=canshu_list[0]+'.\\fanyi'
#创建一个文件夹,存放翻译后的文件
if not os.path.exists(fanyi_list_name):
os.mkdir(fanyi_list_name)
for wenjian in wenjian_list:
#在fanyi文件夹下创建各自文档的文件夹
pdf_name = os.path.splitext(os.path.basename(wenjian))[0] # 获取pdf文件名,去掉后缀名
pdf_dir=fanyi_list_name+'\\'+pdf_name
if not os.path.exists(pdf_dir):
os.mkdir(pdf_dir)
pdf_split_1(wenjian, pdf_dir,int(canshu_list[1]))