• 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('当前章节	{}  下载完毕'.format(browser.title))
    21     browser.quit()
    22     print('所有章节下载完毕!')

    下面是主函数到编写

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

    结果展示:

    下面是1话里面到图片

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

  • 相关阅读:
    webpack-dev-server 源码
    2021前端会有什么新的变化
    父类 超类 基类 子类 派生类
    Java的权限修饰符(public,private,protected,默认friendly)
    class修饰符public、private、protected、static、abstract
    hash和签名 、证书
    前端加密解密crypto
    appid app_key app_secret
    sdk开发 、sdk与插件的区别
    CF76C
  • 原文地址:https://www.cnblogs.com/freeman818/p/7436354.html
Copyright © 2020-2023  润新知