Selenium运用-漫画批量下载
今天我们要爬去的网站是http://comic.sfacg.com/。漫画网站一般都是通过JavaScript和AJAX来动态加载漫画的,这也就意味着想通过原来爬取静态网站的方式去下载漫画是不可能的,这次我们就来用Selenium&PhantomJS来下载漫画。
分析:我们通过Selenium模拟打开漫画网站,找到每一章每一页漫画图片地址,按章节目录分类,下载图片。
下面我们随便打开一个漫画如下


使用谷歌浏览器检查一下发现每一个章节都在下面标签里,这样我们很容易获取到每一章节地址了。
<div class="serialise_list Blue_link2">
下面进入代码编写过程:
首先创建目录和图片保存
def mkdir(path):
'''
防止目录存在
:param path:
:return:
'''
if not os.path.exists(path):
os.mkdir(path) def SavePic(filename,url):
'''
图片的保存
:param filename:
:param url:
:return:
'''
content = requests.get(url).content
with open(filename,'wb') as f:
f.write(content)
获取每一章节的链接保存到字典里
def get_TOF(index_url):
url_list = []
browser = webdriver.PhantomJS()
browser.get(index_url)
browser.implicitly_wait(3) title = browser.title.split(',')[0]#获取漫画标题
mkdir(title)#创建目录 comics_lists = browser.find_elements_by_class_name('comic_Serial_list')#找到漫画章节
for part in comics_lists:#找到每一章节所在的标签信息
links = part.find_elements_by_tag_name('a')
for link in links:
url_list.append(link.get_attribute('href'))#获取每个单独章节链接
browser.quit()
Comics = {'name':title,'urls':url_list}
return Comics
下面是代码的核心部分,通过selenium打开漫画找到漫画的地址,下载漫画图片,找到漫画中下一页按钮,点击并获取下一页图片,循环这个过程。当循环到最后一页到时候,仍然有下一页到按钮,因此需要计算一下漫画有多少页。
def get_pic(Comics):
comic_list = Comics['urls']
basedir = Comics['name'] browser = webdriver.PhantomJS()
for url in comic_list:
browser.get(url)
browser.implicitly_wait(3)
dirname = basedir+'/'+browser.title.split('-')[1]
mkdir(dirname)
#找到漫画一共有多少页
pageNum = len(browser.find_elements_by_tag_name('option'))
#找到下一页按钮
nextpage = browser.find_element_by_xpath('//*[@id="AD_j1"]/div/a[4]')
for i in range(pageNum):
pic_url = browser.find_element_by_id('curPic').get_attribute('src')
filename = dirname+'/'+str(i)+'.png'
SavePic(filename,pic_url)
nextpage.click()
print('当前章节\t{} 下载完毕'.format(browser.title))
browser.quit()
print('所有章节下载完毕!')
下面是主函数到编写
if __name__ == '__main__':
url = str(input('请输入漫画首页地址:\n'))
Comics = get_TOF(url)
#print(Comics)
get_pic(Comics)
结果展示:

下面是1话里面到图片
Selenium爬虫虽然能模拟浏览器加载JS动态页面,但是其速度就十分堪忧了和Scrapy库、requests更完全不能比了。
Selenium运用-漫画批量下载的更多相关文章
- 【pyhon】怨灵侍全本漫画批量下载爬虫1.00
代码: # 怨灵侍全本漫画批量下载爬虫1.00 # 拜CARTOON.fydupiwu.com整理有序所赐,寻找图片只要观察出规律即可,不用费劲下一页的找了 import time import ur ...
- Java实现批量下载《神秘的程序员》漫画
上周看了西乔的博客“西乔的九卦”.<神秘的程序员们>系列漫画感觉很喜欢,很搞笑.这些漫画经常出现在CSDN“程序员”杂志末页的,以前也看过一些. 后来就想下载下来,但是一张一张的点击右键“ ...
- Python + Selenium +Chrome 批量下载网页代码修改【新手必学】
Python + Selenium +Chrome 批量下载网页代码修改主要修改以下代码可以调用 本地的 user-agent.txt 和 cookie.txt来达到在登陆状态下 批量打开并下载网页, ...
- python图片爬虫 - 批量下载unsplash图片
前言 unslpash绝对是找图的绝佳场所, 但是进网站等待图片加载真的令人捉急, 仿佛是一场拼RP的战争 然后就开始思考用爬虫帮我批量下载, 等下载完再挑选, 操作了一下不算很麻烦, 顺便也给大家提 ...
- 用python批量下载图片
一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...
- KRPano资源分析工具使用说明(KRPano XML/JS解密 切片图批量下载 球面图还原 加密混淆JS还原美化)
软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...
- 批量下载小说网站上的小说(python爬虫)
随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的. 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我就被 ...
- 利用SkyDrive Pro 迅速批量下载SharePoint Server 上已上传的文件
在上一篇<SharePoint Server 2013 让上传文件更精彩>,我们一起了解了如何快速的方便的上传批量文件到SharePoint Server 2013 ,而在这一篇日志中您将 ...
- 批量下载网站图片的Python实用小工具
定位 本文适合于熟悉Python编程且对互联网高清图片饶有兴趣的筒鞋.读完本文后,将学会如何使用Python库批量并发地抓取网页和下载图片资源.只要懂得如何安装Python库以及运行Python程序, ...
随机推荐
- Linux:WebServer(Nginx 虚拟主机配置与伪静态实现)
ps + 查看方式 | grep + 服务/端口/软件等:查看状态: 一.基本操作 Nginx 多用于商业系统: 一个端口只能被一个服务使用: Nginx 可以同时监听多个端口,也就是配置时, ...
- java.lang.String.trim(), 不仅仅去掉空格
由于我们处理的日志需要过滤一些空格,因此大部分处理日志的程序中都用到了java.lang.String.trim()函数.直到有一次遇到一个诡异的问题,某个包含特殊字符的字符串被trim后居然也为 ...
- java基础-构建命令行运行的java程序简要注意
今天编写了一个运行在服务端的java工具类,才发现自己以前很少关注运营方面的内容,导致在服务端部署一个java的工具变得异常困难,其实这也是自己对java的了解不够造成的. 首先,当代码编写完成之后, ...
- 关于最大传输单元(MTU)的整理
MTU设置不当,可能会导致许多网络问题,如某些网络应用无法使用,某些网站无法访问等.下面是在网上搜索整理的关于MTU设置的东西,某些可能未作验证,仅供参考. 1. 如何确定网络MTU 某些ISP接入的 ...
- Julia - 短路求值
&& 和 || 的布尔运算符被称为短路求值 它们连接一系列布尔表达式,仅计算最少的表达式来确定整个链的布尔值 在表达式 a && b 中,只有 a 为 true 时才计 ...
- redis的二种启动方式
.直接启动 进入redis根目录,执行命令: #加上‘&’号使redis以后台程序方式运行 1 ./redis-server & 2.通过指定配置文件启动 可以为redis服务启 ...
- Netty面试题
1.BIO.NIO和AIO的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理.线程开销大. 伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源. N ...
- JSP页面中的时间显示问题
在JSP页面中往往要将时间显示为指定格式的,如果传入的是Date类型很好解决 <fmt:formatDate value="${orderTime}" pattern=&qu ...
- ffmpeg源码分析三:transcode_init函数 (转3)
原帖地址:http://blog.csdn.net/austinblog/article/details/25061945 transcode_init()函数是在转换前做准备工作的.下面看看其源代码 ...
- spring boot 项目打包到maven仓库供其它模块使用
在对spring boot项目进行打包发布的时候发现其它spring boot项目服务真正引用使用该spring boot包中的类 需对打包插件做如下修改: <build> <plu ...