Python+BeautifulSoup实现PHD Comics图片批量下载技术问询
嘿,作为同样啃过《Automate the Boring Stuff》的编程新手过来人,我来帮你搞定这个PHD Comics图片自动下载的脚本!
搞定PHD Comics图片批量下载的Python脚本
首先,你得先装两个必备工具库——requests负责帮我们下载网页和图片,beautifulsoup4用来解析HTML结构。打开终端敲这行命令安装:
pip install requests beautifulsoup4
接下来是完整的代码,我给你加了详细注释,你一看就懂:
import requests import bs4 import os import time # 创建保存漫画的文件夹,不存在就自动创建 os.makedirs('phd_comics', exist_ok=True) # 初始页面(最新的PHD Comics页面) current_url = 'https://phdcomics.com/comics.php' # 循环爬取直到没有上一页(到第一页为止) while current_url: print(f'正在处理页面: {current_url}') try: # 发送请求获取页面内容 res = requests.get(current_url) # 检查请求是否成功,失败就抛出异常 res.raise_for_status() except Exception as e: print(f'请求页面失败: {e}') break # 用BeautifulSoup解析HTML soup = bs4.BeautifulSoup(res.text, 'html.parser') # 提取图片链接:优先找OG标签里的图片(更准确),再找页面里的漫画img comic_img_url = None og_image_meta = soup.find('meta', property='og:image') if og_image_meta and 'content' in og_image_meta.attrs: comic_img_url = og_image_meta['content'] else: # 找页面里id为comic的img标签 comic_elem = soup.select('#comic img') if comic_elem: comic_img_url = comic_elem[0].get('src') # 处理相对链接,拼接成完整URL if comic_img_url.startswith('/'): comic_img_url = 'https://phdcomics.com' + comic_img_url if comic_img_url: print(f'正在下载图片: {comic_img_url}') try: # 下载图片 img_res = requests.get(comic_img_url) img_res.raise_for_status() except Exception as e: print(f'下载图片失败: {e}') # 继续处理下一页,不中断 pass else: # 提取图片文件名 img_filename = os.path.basename(comic_img_url) # 保存图片到文件夹 with open(os.path.join('phd_comics', img_filename), 'wb') as img_file: for chunk in img_res.iter_content(100000): img_file.write(chunk) else: print('当前页面没找到漫画图片') # 找上一页的链接:找文本为"Previous"的a标签,或者rel="prev"的标签 prev_link = soup.find('a', string='Previous') or soup.find('a', rel='prev') if prev_link and 'href' in prev_link.attrs: # 拼接完整的上一页URL prev_url = prev_link['href'] if not prev_url.startswith('http'): current_url = 'https://phdcomics.com' + prev_url else: current_url = prev_url # 加个1秒延迟,避免给服务器太大压力 time.sleep(1) else: # 没有上一页了,结束循环 print('已经爬到第一页啦,任务完成!') current_url = None
小提示
- 脚本里加了
time.sleep(1),是为了每次请求后停1秒,避免频繁请求被网站封禁,这是爬取网页的基本礼貌哦~ - 如果运行时遇到某个页面失败,脚本会跳过继续处理下一页,不会直接崩溃
- 下载的图片都会存在你当前脚本目录下的
phd_comics文件夹里
内容的提问来源于stack exchange,提问作者Muhsiul Hassan




