Selenium运用-漫画批量下载

今天我们要爬去的网站是

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

<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更完全不能比了。

 

posted @ 2017-08-26 22:59  Freeman耀  阅读(2019)  评论(0编辑  收藏  举报