必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-09-06 20:11:04来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

卡推漫画

1、流程框架

1.1、获取配置文件信息

获取配置文件信息包括存储文件的电脑本地路径、上次抓取的漫画某话序号以及其已下载的图片序号数。

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

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

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

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

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

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

2、代码

2.1、配置文件setting.conf

[setting]
store_path = f:\\huyao
start_comic_num = 31
comic_pic_num = 2

2.2、配置文件huyao.py

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
from selenium.common.exceptions import TimeoutException
import os
import time
import requests
import random
import configparser
from requests.exceptions import RequestException

start_comic_num = 0
start_pic_num = 0
store_path = ''


SERVICE_ARGS = ['--load-images=false', '--disk-cache=true']
url = 'http://www.katui.net/manhua/1/'#卡推漫画
browser = webdriver.phantomjs(service_args=SERVICE_ARGS)

wait = WebDriverWait(browser, 10)


def down_pic(dir_name,one_comic_name,pic_num,download_link):
    dir_path = dir_name +'\\'+ one_comic_name

    if os.path.exists(dir_path):#如果文件夹存在则,直接下载
        pass
    else:#否则就创建文件夹
        os.makedirs(dir_path)

    pic_name = dir_path +'\\'+str(pic_num)+'.jpg'

    if os.path.exists(pic_name):
        print ('File '+pic_name+' is already exists,SKIP......')
    else:
        try:
            r=requests.get(download_link)  

            if r.status_code == 200: 
                with open (pic_name,"wb") as file_id:
                    file_id.write(r.content)

            else:
                print('重新读取图片信息')
                down_pic(dir_name,one_comic_name,pic_num,download_link)
            time.sleep(random.randint(1, 10))
        except RequestException:
            down_pic(dir_name,one_comic_name,pic_num,download_link)




def one_comic(start_pic_num,cf,store_path,browser,comic_url):
    try:
        browser.get(comic_url)
        comic_pic_num_element_list  = wait.until(
            EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#selectpage1 > select > option'))
            )#

        comic_pic_num =len(comic_pic_num_element_list)#获取某一话的图片个数


        comic_name_element_list  = wait.until(
            EC.presence_of_all_elements_located((By.CSS_SELECTOR,'body > h1'))
            )#

        comic_name_list = comic_name_element_list[0].text#漫画名称
        name_list = comic_name_list.split()

        comic_name = name_list[0]
        comic_num  = name_list[1]

        for i in range (comic_pic_num):

            if i >= start_pic_num:

                comic_url_element_list  = wait.until(
                EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#viewimg'))
                )#  
                comic_url = comic_url_element_list[0].get_attribute('src')

                if comic_url:
                    down_pic(store_path+comic_name,comic_num,i,comic_url)

                    cf.set("setting","comic_pic_num",str(i+1))
                    cf.write(open('setting.conf', 'w'))            
                else:
                    print('no jpg url!')              

            selectPage = wait.until(
                EC.element_to_be_clickable((By.CSS_SELECTOR,'body > p > a.next'))
            )#

            #selectPage.click()#点击下一页
            if  i < comic_pic_num-1:

                selectPage.click()
            elif i == comic_pic_num-1:
                cf.set("setting","comic_pic_num",str(0))
                cf.write(open('setting.conf', 'w'))
            time.sleep(1)       
    except TimeoutException:
        print('打开browser失败')
        #browser.refresh()
        time.sleep(1)
        return one_comic(i,cf,store_path,browser,comic_url)

    time.sleep(1)
    return True
def select_start_comic(cf,store_path,start_comic_num,start_pic_num,url):

    try:
        browser.get(url)
        i = 0

        comic_urls_element_list  = wait.until(
            EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#play_0 > ul > li > a'))
            )
        comic_len = len(comic_urls_element_list)

        comic_urls_list = []
        for i in range(comic_len):
            comic_urls_list.APPend(comic_urls_element_list[comic_len-i-1].get_attribute('href'))




        for i in range(start_comic_num,comic_len):
            one_comic(start_pic_num,cf,store_path,browser,comic_urls_list[start_comic_num])
            start_comic_num = start_comic_num +1
            cf.set("setting","START_COMIC_NUM",str(start_comic_num))
            cf.write(open('setting.conf', 'w'))

            start_pic_num = 0
    except TimeoutException:
        print('TimeoutERROR超时')
        select_start_comic(cf,store_path,start_comic_num,start_pic_num,url)


if __name__ == '__main__':
    cf = configparser.ConfigParser()
    cf.read('setting.conf')

    start_comic_num = cf.get('setting','START_COMIC_NUM')
    start_pic_num = cf.get('setting','COMIC_PIC_NUM')
    store_path = cf.get('setting','STORE_PATH')
        select_start_comic(cf,store_path,int(start_comic_num),int(start_pic_num),url)


相关阅读

selenium用法详解

selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8

7个方面对比分析:腾讯动漫APP VS 快看漫画

腾讯动漫和快看漫画属于两大热门的漫画平台,但是两个平台的定位有一定的差异化,本文主要是从七个角度来对比分析这两款产品。市场分

【selenium】126官网邮箱登录

【selenium】126官网邮箱登录 模拟场景说明:访问126邮箱官网,输入用户名、密码,点击登录 难点说明:因为126首页的登录框在一个iframe

A5创业网播报:暴走漫画发表致歉信即将回归 君融贷逾期

1、暴走漫画发表致歉信即将回归 将致力传播正能量A5创业网(公众号:iadmin5)7月16日消息,暴走漫画目前在官网发致歉信,表示将改正错误

程序员小灰漫画系列

为了方便查看《程序员小灰漫画系列》文章,索性就把连接贴到自己的博客了.... 程序员小灰2017年原创汇总 程序员小灰2018上半年原创

分享到:

栏目导航

推荐阅读

热门阅读