11import os
2- import requests
3- from bs4 import BeautifulSoup
2+ import re
43from urllib .parse import urljoin , urlparse
4+
55import pdfkit
6+ import requests
7+ from bs4 import BeautifulSoup
68from PyPDF2 import PdfMerger , PdfReader , PdfWriter
7- import re
9+
810
911def natural_key (s ):
1012 """Turn a string into a list of ints and text, so 's10' > 's9'."""
11- return [int (text ) if text .isdigit () else text .lower ()
12- for text in re .split (r'(\d+)' , s )]
13+ return [int (text ) if text .isdigit () else text .lower () for text in re .split (r"(\d+)" , s )]
1314
1415
1516def get_all_links (base_url ):
@@ -47,7 +48,7 @@ def save_pages_as_pdfs(urls, output_dir="pages_pdfs"):
4748 os .makedirs (output_dir , exist_ok = True )
4849 pdf_files = []
4950 for i , url in enumerate (urls ):
50- out_file = os .path .join (output_dir , f"page_{ i + 1 } .pdf" )
51+ out_file = os .path .join (output_dir , f"page_{ i + 1 } .pdf" )
5152 try :
5253 pdfkit .from_url (url , out_file )
5354 pdf_files .append (out_file )
@@ -68,17 +69,24 @@ def merge_pdfs(pdf_files, output_file="combined.pdf"):
6869
6970import subprocess
7071
72+
7173def compress_pdf (input_file , output_file , quality = "/ebook" ):
72- subprocess .run ([
73- "gs" , "-sDEVICE=pdfwrite" , "-dCompatibilityLevel=1.4" ,
74- f"-dPDFSETTINGS={ quality } " ,
75- "-dNOPAUSE" , "-dQUIET" , "-dBATCH" ,
76- f"-sOutputFile={ output_file } " , input_file
77- ])
74+ subprocess .run (
75+ [
76+ "gs" ,
77+ "-sDEVICE=pdfwrite" ,
78+ "-dCompatibilityLevel=1.4" ,
79+ f"-dPDFSETTINGS={ quality } " ,
80+ "-dNOPAUSE" ,
81+ "-dQUIET" ,
82+ "-dBATCH" ,
83+ f"-sOutputFile={ output_file } " ,
84+ input_file ,
85+ ]
86+ )
7887 print (f"📉 Compressed { input_file } → { output_file } " )
7988
8089
81-
8290def split_pdf (input_file , output_files ):
8391 reader = PdfReader (input_file )
8492 total_pages = len (reader .pages )
@@ -95,21 +103,22 @@ def split_pdf(input_file, output_files):
95103 writer .add_page (page )
96104 with open (out_file , "wb" ) as f :
97105 writer .write (f )
98- print (f"✂️ Split pages { start + 1 } -{ end } → { out_file } " )
106+ print (f"✂️ Split pages { start + 1 } -{ end } → { out_file } " )
99107 start = end
100108
101109
102110if __name__ == "__main__" :
103111 base_url = "https://skaftenicki.github.io/dtu_mlops/"
104112 urls = get_all_links (base_url )
105- urls = sorted (urls , key = natural_key ) # 👈 use natural sort
113+ urls = sorted (urls , key = natural_key ) # 👈 use natural sort
106114 print (f"Found { len (urls )} pages." )
107115
108116 pdf_files = save_pages_as_pdfs (urls )
109117 merge_pdfs (pdf_files , "dtu_mlops_all.pdf" )
110- split_pdf ("dtu_mlops_all.pdf" , [
111- "dtu_mlops_part1.pdf" , "dtu_mlops_part2.pdf" , "dtu_mlops_part3.pdf" , "dtu_mlops_part4.pdf"
112- ])
118+ split_pdf (
119+ "dtu_mlops_all.pdf" ,
120+ ["dtu_mlops_part1.pdf" , "dtu_mlops_part2.pdf" , "dtu_mlops_part3.pdf" , "dtu_mlops_part4.pdf" ],
121+ )
113122 compress_pdf ("dtu_mlops_part1.pdf" , "dtu_mlops_part1_small.pdf" )
114123 compress_pdf ("dtu_mlops_part2.pdf" , "dtu_mlops_part2_small.pdf" )
115124 compress_pdf ("dtu_mlops_part3.pdf" , "dtu_mlops_part3_small.pdf" )
0 commit comments