Python爬虫基础教程(94)Selenium&PhantomJS实战:漫画爬虫之代码解释:别盯了!你与漫画自由只差这篇Selenium&PhantomJS摸鱼指南

好的,没问题!看招,这是一篇自带BGM、充满网感、让你一边笑一边就把技术学了的深度好文!


哎,朋友们,摸鱼时间到!今天我们不聊理想,不谈人生,就解决一个核心痛点——如何优雅且批量地“薅”走网上那些让人欲罢不能的漫画。

你肯定干过这事儿:鼠标移到图片上,虔诚地右键,另存为,重命名……循环N次。一套操作下来,手腕酸了,漫画也没看几页,光顾着当人工下载器了。说好的快乐追漫呢?全被这重复劳动给毁了!

是时候请出我们今天的两位主角了:SeleniumPhantomJS。别被这俩看似高大上的名字吓到,你可以把它们理解成:

  • Selenium: 一个能远程操控你电脑浏览器的“提线木偶大师”。你写代码下指令,它就能让浏览器帮你点按钮、填密码、翻页,无所不能。
  • PhantomJS: 一个“幽灵浏览器”。它没有界面,却在后台默默运行,速度飞快,专为这种自动化脚本而生,是摸鱼党的隐身战衣。

它俩一结合,那就是爬虫界的“蝙蝠侠与罗宾”,一个指挥,一个执行,完美!

第一章:开工前的“武器装备”

别急着写代码,磨刀不误砍柴工。

  1. 安装Selenium库:
    打开你的命令行(小黑框),输入那句经典的咒语:
pip install selenium

“叮!” 装备+1。

  1. 请来幽灵战士PhantomJS:
    这家伙现在不直接通过pip安装了。你得去它的官网(虽然已经归档,但资源还在)下一个叫phantomjs.exe的文件。下载后,随便扔到你电脑的某个文件夹,比如 D:\phantomjs\bin\phantomjs.exe记住这个路径,这是你召唤幽灵的咒语!
第二章:代码逐行“内心戏”大揭秘

好了,剧本(代码)在此,我们一行行看,保证你看得懂!

from selenium import webdriver
import time
import requests
import os

# 1. 召唤幽灵:启动我们的无头浏览器
driver = webdriver.PhantomJS(executable_path=r'D:\phantomjs\bin\phantomjs.exe')
# 【内心戏】`executable_path` 就是告诉Python:“哥们,我请的幽灵住在这,你去这里召唤它。” 那个 `r` 是为了防止路径里的反斜杠`\`搞事情。

# 2. 设定窗口大小(虽然我们看不见)
driver.set_window_size(1920, 1080)
# 【内心戏】有些网站很鸡贼,如果发现浏览器窗口太小,会以为是手机,给你返回不一样的页面。所以我们假装自己是个大屏电脑,骗过它!

# 3. 目标锁定:访问漫画首页
url = 'https://www.example-comic-site.com/comic/123'  # 这是个假地址,请换成真实目标!
driver.get(url)
# 【内心戏】`driver.get` 相当于你在地址栏输入网址然后猛敲回车。幽灵浏览器已经悄咪咪地打开那个页面了。

# 4. 让子弹飞一会儿:强制等待3秒
time.sleep(3)
# 【内心戏】这是最朴实无华的等待。因为页面加载需要时间,尤其是图片多的漫画站。让程序等一下,等所有内容都加载完毕再动手。这是为了避免“你出手太快,图片还没出生”的尴尬。

# 5. 创建你的专属漫画仓库
comic_name = "我的摸鱼漫画"
if not os.path.exists(comic_name):
    os.mkdir(comic_name)
# 【内心戏】`os.mkdir` 就是在你电脑上新建一个文件夹,用来存放待会儿下载的漫画图片。整洁,是一个优秀摸鱼工程师的基本素养。

# 6. 核心逻辑:循环爬取每一页
for i in range(10):  # 假设我们先爬10页试试水
    print(f"正在抓取第 {i+1} 页...")
    
    # 6.1 定位漫画图片元素
    img_element = driver.find_element_by_id('comic-img')
    # 【内心戏】`find_element_by_id` 是Selenium最牛的技能之一——**“查户口”**。网页上每个元素都有个唯一的ID,这里我们告诉它:“去,把身份证叫 `comic-img` 的那个家伙给我抓过来!”
    # 怎么知道图片的ID是啥?F12打开开发者工具,用左上角的箭头去点一下图片,代码里高亮的部分就是它的信息。

    # 6.2 获取图片的真实URL
    img_url = img_element.get_attribute('src')
    # 【内心戏】图片标签(<img>)有一个 `src` 属性,里面存放着图片的“家庭住址”(真实链接)。`get_attribute` 就是把这个地址抄下来。

    # 6.3 下载并保存图片
    response = requests.get(img_url)
    # 【内心戏】`requests` 库出手了!它根据我们抄下来的地址,去把图片的二进制数据“搬”回来。
    
    file_name = os.path.join(comic_name, f"{i+1:03d}.jpg")
    # 【内心戏】`f"{i+1:03d}.jpg"` 这个格式化字符串是为了让文件名是001.jpg, 002.jpg...这样排好序,不然会乱套。
    
    with open(file_name, 'wb') as f:
        f.write(response.content)
    # 【内心戏】以二进制写入('wb')模式打开文件,然后把搬回来的图片数据(`response.content`)一口气写进去。搞定,一张图就这样落地生根了!
    
    print(f"第 {i+1} 页保存成功!")

    # 6.4 模拟点击“下一页”
    next_button = driver.find_element_by_class_name('next-page')
    # 【内心戏】 again,用“查户口”大法,这次是按“班级”找(class name)。找到那个class叫 `next-page` 的“下一页”按钮。
    
    next_button.click()
    # 【内心戏】`click()`!模拟鼠标点击。幽灵浏览器帮你点了一下,页面“唰”地跳到了下一章。

    # 6.5 再次让子弹飞一会儿
    time.sleep(2)
    # 【内心戏】翻页后,新的图片需要时间加载,所以再等两秒,循环继续...

# 7. 功成身退:关闭浏览器
driver.quit()
print("所有任务完成!恭喜你达成漫画自由!")
第三章:那些你可能遇到的“坑”与“骚操作”
  • 元素定位失败了? 除了by_idby_class_name,Selenium还有by_xpathby_css_selector等十八般武艺。F12开发者工具是你的最佳战友,对着元素右键直接“Copy XPath”或“Copy selector”,简单粗暴。
  • 等待的哲学: time.sleep是“死等”,不够优雅。Selenium提供了“智能等”(WebDriverWait),它会一直检查某个元素出现没,出现了就立刻执行下一步,效率更高!这是进阶玩法,等你熟练了可以试试。
  • PhantomJS过时了? 是的,它已经停止维护了。现代的替代品是Chrome和Firefox的“无头模式”,用法类似,功能更强大。但PhantomJS作为经典,入门理解概念依然非常棒!理解了它,再换其他浏览器轻而易举。
  • 法律与道德的边界: 爬虫有风险,使用需谨慎!本教程仅用于学习和技术交流。请尊重网站的劳动,不要用于商业用途或恶意爬取,给服务器造成压力。摸鱼虽好,可不要贪杯哦!
第四章:完整代码,抄作业时间到!

把下面的代码保存为 comic_crawler.py,记得修改 executable_pathurl,然后运行,见证奇迹吧!

from selenium import webdriver
import time
import requests
import os

# 【配置区】你的幽灵浏览器路径和目标漫画网址
PHANTOMJS_PATH = r'你的phantomjs.exe完整路径'  # 必改!
COMIC_URL = '你的目标漫画网址'  # 必改!
COMIC_NAME = '摸鱼漫画珍藏版'

# 初始化浏览器
driver = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH)
driver.set_window_size(1920, 1080)

try:
    driver.get(COMIC_URL)
    time.sleep(3)

    if not os.path.exists(COMIC_NAME):
        os.mkdir(COMIC_NAME)

    for page in range(10):  # 爬10页,可自行调整
        print(f"[行动开始] 正在夺取第 {page+1} 页...")
        
        # 查找图片和下一页按钮(根据实际网站结构调整选择器!)
        img_element = driver.find_element_by_id('comic-img')  # 可能需要改
        next_button = driver.find_element_by_class_name('next-page')  # 可能需要改
        
        img_url = img_element.get_attribute('src')
        print(f"图片地址获取成功: {img_url}")

        # 下载图片
        img_data = requests.get(img_url).content
        file_path = os.path.join(COMIC_NAME, f"{page+1:03d}.jpg")
        
        with open(file_path, 'wb') as f:
            f.write(img_data)
        print(f"[胜利] 第 {page+1} 页已存入仓库!")

        # 翻页
        next_button.click()
        time.sleep(2)

    print("\n【大捷】任务完成!你的漫画库已更新!")

finally:
    # 确保无论如何都关闭浏览器
    driver.quit()

结语

怎么样?是不是感觉Selenium和PhantomJS也没那么神秘?它就像是你的一双无形之手,帮你完成所有枯燥的点击和保存。

从此,你的摸鱼效率将呈指数级增长。别人还在那吭哧吭哧一页页点,你已经喝着咖啡,看着脚本自动为你下载好一整部漫画了。

技术就是用来解放生产力的,不是吗?快去试试吧,祝你摸鱼愉快!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值