卡推漫画
1、流程框架
1.1、获取配置文件信息
获取配置文件信息包括存储文件的电脑本地路径、上次抓取的漫画某话序号以及其已下载的图片序号数。
1.2、抓取漫画每一话的链接
利用selenium无驱动浏览器通过显式延时以及css selector搜索得到漫画每一话的链接
1.4、抓取某一话漫画的名称以及每个图片的链接
利用selenium驱动浏览器通过关键字获取某一话信息以及其每个图片的链接
1.5、下载每个图片并保存到电脑本地
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 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8
腾讯动漫和快看漫画属于两大热门的漫画平台,但是两个平台的定位有一定的差异化,本文主要是从七个角度来对比分析这两款产品。市场分
【selenium】126官网邮箱登录 模拟场景说明:访问126邮箱官网,输入用户名、密码,点击登录 难点说明:因为126首页的登录框在一个iframe
1、暴走漫画发表致歉信即将回归 将致力传播正能量A5创业网(公众号:iadmin5)7月16日消息,暴走漫画目前在官网发致歉信,表示将改正错误
为了方便查看《程序员小灰漫画系列》文章,索性就把连接贴到自己的博客了.... 程序员小灰2017年原创汇总 程序员小灰2018上半年原创