selenium抓取卡推漫画--狐妖小红娘

本文介绍了使用Selenium抓取狐妖小红娘漫画的流程,包括获取每一话链接、漫画名称及图片链接,以及通过requests下载图片到本地。详细解析了程序入口、one_comic函数和dowm_pic函数的实现,并讨论了优化方向,如非驱动浏览器抓取和算法调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、流程框架

1.1、抓取漫画每一话的链接

利用selenium驱动浏览器通过css selector搜索得到漫画每一话的链接

1.2、抓取某一话漫画的名称以及每个图片的链接

利用selenium驱动浏览器通过关键字获取某一话的名称以及其每个图片的链接

1.3、下载每个图片并保存到电脑本地

通过requests获取的图片的内容保存到本地电脑上

2、代码如下

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.select import Select
import os
import time
import requests
import random

def down_pic(dir_name,one_comic_name,url_list):
    dir_path = dir_name +'\\'+ one_comic_name
    if os.path.exists(dir_path):#如果文件夹存在则,直接下载
        pass
    else:#否则就创建文件夹
        os.makedirs(dir_path)

    i = 0
    for download_link in url_list:
        pic_name = dir_path +'\\'+str(i)+'.jpg'

        if os.path.exists(pic_name):
            print ('File '+pic_name+' is already exists,SKIP......')
        else:
            r=requests.get(download_link)   
            with open (pic_name,"wb") as file_id:
                file_id.write(r.content)
                print(pic_name + ' Download Compelte')
            time.sleep(random.randint(1, 10))
        i = i + 1

def one_comic(url):
    url_list = []
    browser = webdriver.Chrome()
    browser.get(url)
    browser.implicitly_wait(20)

    comic_pic_num =len(browser.find_elements_by_css_selector('#selectpage1 > select > option'))
    comic_name = browser.find_elements_by_css_selector('body > h1')[0].text

    for i in range (comic_pic_num):
        comic_url  = browser.find_elements_by_css_selector('#viewimg')[0].get_attribute('src')
        url_list.append(comic_url)
        selectPage = browser.find_elements_by_css_selector('#selectpage1 > select')[0]
        Select(selectPage).select_by_index(i)
        time.sleep(6)

    browser.close()

    name_list = comic_name.split()
    if len(url_list):
        down_pic('f:\\'+name_list[0],name_list[1],url_list)
    else:
        print('no jpg url!')

if __name__ == '__main__':

    browser = webdriver.Chrome()
    browser.get('http://www.katui.net/manhua/1/')
    browser.implicitly_wait(20)

    comic_urls_element_list = browser.find_elements_by_css_selector('#play_0 > ul > li > a')

    for comic_url_element in comic_urls_element_list:
        comic_url = comic_url_element.get_attribute('href')
        one_comic(comic_url)
        time.sleep(6)
    browser.close()

3、代码分析

3.1、程序入口

browser.implicitly_wait(20)隐式等待,当用此隐式等待执行测试时,如果webdriver没有在DOM中找到元素,则将继续等待,超出设定时间后则抛出找不到元素的异常,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间在查找DOM,默认时间为0。
comic_urls_element_list = browser.find_elements_by_css_selector(‘#play_0 > ul > li > a’)获取狐妖小红娘这个漫画更新的所有话的elements的列表,然后通过遍历此列表,访问element的get_attribute函数获取每一话的链接。

3.2、one_comic函数

one_comic函数是得到某一话漫画所有图片的链接列表,并通过调用dowm_pic函数将此图片下载到本地。

3.3、dowm_pic函数

下载图片到本地电脑上。os.path.exists(dir_path)函数查看dir_path是否在电脑本地上存在,若不存在则用os.makedirs函数新建此文件夹。requests.get(download_link) 函数获取图片链接的response,通过open函数以及write函数将图片的内容保存到电脑本地, time.sleep(random.randint(1, 10))是随机加个1到10秒的延时,防止频繁访问造成服务器封掉我们的IP。

4、优化

后续使用非驱动浏览器的方式进行抓取漫画以及改进算法和debug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值