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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM