码迷,mamicode.com
首页 > 其他好文 > 详细

Selenium运用-漫画批量下载

时间:2017-08-26 23:32:03      阅读:421      评论:0      收藏:0      [点我收藏+]

标签:div   tom   put   split   核心部分   下载图片   分享   bdr   turn   

今天我们要爬去的网站是

技术分享

技术分享

使用谷歌浏览器检查一下发现每一个章节都在下面标签里,这样我们很容易获取到每一章节地址了。

<div class="serialise_list Blue_link2">

下面进入代码编写过程:

 首先创建目录和图片保存

 1 def mkdir(path):
 2     ‘‘‘
 3     防止目录存在
 4     :param path:
 5     :return:
 6     ‘‘‘
 7     if not os.path.exists(path):
 8         os.mkdir(path)
 9 
10 
11 def SavePic(filename,url):
12     ‘‘‘
13     图片的保存
14     :param filename: 
15     :param url: 
16     :return: 
17     ‘‘‘
18     content = requests.get(url).content
19     with open(filename,wb) as f:
20         f.write(content)

获取每一章节的链接保存到字典里

 1 def get_TOF(index_url):
 2     url_list = []
 3     browser = webdriver.PhantomJS()
 4     browser.get(index_url)
 5     browser.implicitly_wait(3)
 6 
 7     title = browser.title.split(,)[0]#获取漫画标题
 8     mkdir(title)#创建目录
 9 
10     comics_lists = browser.find_elements_by_class_name(comic_Serial_list)#找到漫画章节
11     for part in comics_lists:#找到每一章节所在的标签信息
12         links = part.find_elements_by_tag_name(a)
13         for link in links:
14             url_list.append(link.get_attribute(href))#获取每个单独章节链接
15     browser.quit()
16     Comics = {name:title,urls:url_list}
17     return Comics

下面是代码的核心部分,通过selenium打开漫画找到漫画的地址,下载漫画图片,找到漫画中下一页按钮,点击并获取下一页图片,循环这个过程。当循环到最后一页到时候,仍然有下一页到按钮,因此需要计算一下漫画有多少页。

 1 def get_pic(Comics):
 2     comic_list = Comics[urls]
 3     basedir = Comics[name]
 4 
 5     browser = webdriver.PhantomJS()
 6     for url in comic_list:
 7         browser.get(url)
 8         browser.implicitly_wait(3)
 9         dirname = basedir+/+browser.title.split(-)[1]
10         mkdir(dirname)
11         #找到漫画一共有多少页
12         pageNum = len(browser.find_elements_by_tag_name(option))
13         #找到下一页按钮
14         nextpage = browser.find_element_by_xpath(//*[@id="AD_j1"]/div/a[4])
15         for i in range(pageNum):
16             pic_url = browser.find_element_by_id(curPic).get_attribute(src)
17             filename = dirname+/+str(i)+.png
18             SavePic(filename,pic_url)
19             nextpage.click()
20         print(当前章节\t{}  下载完毕.format(browser.title))
21     browser.quit()
22     print(所有章节下载完毕!)

下面是主函数到编写

1 if __name__ == __main__:
2     url = str(input(请输入漫画首页地址:\n))
3     Comics = get_TOF(url)
4     #print(Comics)
5     get_pic(Comics)

结果展示:

技术分享

下面是1话里面到图片

技术分享Selenium爬虫虽然能模拟浏览器加载JS动态页面,但是其速度就十分堪忧了和Scrapy库、requests更完全不能比了。

 

Selenium运用-漫画批量下载

标签:div   tom   put   split   核心部分   下载图片   分享   bdr   turn   

原文地址:http://www.cnblogs.com/freeman818/p/7436354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!