本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。
轉載地址
https://blog.csdn.net/fei347795790?t=1
某年某月某日,重溫某本漫畫,心血來潮,爬之!!!
分析思路:
1. 通過靜態爬取漫畫所有章節的url連結信息以及集數信息。
2. 通過動態爬取每集漫畫的所有篇幅。
3. 每集漫畫保存至相應本地文件夾中。
一、獲取所有漫畫信息
通過對漫畫網頁地址load = &34;分析,每集漫畫 的連結和集數集中於某個標籤中,通過requests庫和BeautifulSoup庫獲取該標籤信息。並轉化成pd.DataFrame格式數據,共包含三列ID(集數),url(漫畫連結),name(集名)。.
import osimport numpy as npimport pandas as pdimport requestsimport reimport timefrom bs4 import BeautifulSoupfrom selenium import webdriver 39;lxml&39;mh-chapter-list-ol-0&34;a&34;http://m.seeym.net&34;href&34;([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])&34;&34;ID&34;url&34;name&34;ID&34;ID&34;ID&34;網頁不可用&提取漫畫內容load:載入漫畫網址,path:保存地址,dic:保存集數def jpg(load,path,dic,browser,ID): a = 1 try: browser.get(load) elemt = browser.find_element_by_id(&34;) total = elemt.text for i in range(1,int(total)+1): load1 = load + &39; + str(i) browser.get(load1) elemt = browser.find_element_by_id(&34;) bb1 = elemt.get_attribute(&39;) bb2 = requests.get(bb1, timeout = 30) bb2.encoding = bb2.apparent_encoding path1 = path + &39; + str(ID) + &39; + dic + &39; + str(i) + &39; with open(path1, &39;) as f: f.write(bb2.content) time.sleep(np.random.randint(1,3)) print(&39;.format(dic)) return a - 1 except: print(&39;.format(dic)) return a
代碼修改:下載過程中出現漫畫集名有特殊字符的情況,通過正則表達式將特殊字符剔除。
三、新建保存文件夾和刪除文件夾
更新漫畫操作,若本地文件夾中無該漫畫集數子文件夾,則創建文件夾。若有,則不創建。刪除下載失敗的文件夾,若不能下載完整漫畫集,則刪除創建的文件夾。
39;/&39;_&39;創建{}文件夾&刪除文件夾,文件def deldir(path,dic,ID): path = path + &39; + str(ID) + &39; + dic if os.path.exists(path) == True: for i in os.listdir(path): path1 = path + &39; + i os.remove(path1) os.rmdir(path) else: pass
四、拼接代碼
下載流程:
1. 輸入load連結,本地地址,運行webdriver.Chrome谷歌瀏覽器。
2. 獲取漫畫url信息。
3. 循環下載漫畫,生成下載失敗文件fail。
4. 新建子文件下,下載漫畫,並time.sleep(np.random.randint(x))模擬人看漫畫時長。
def main(): 34;D:/chromedriver.exe&34;http://xxxxx.net/xxxx/xxxxx/&34;F:/漫畫/xxxxx&第二步,獲取所有漫畫的url信息 info = url(load) #第三步,下載漫畫 fail = info.iloc[0:1,:] for i in range(len(info)): http = info.iloc[i,1] dic = info.iloc[i,2] ID = info.iloc[i,0] check = mkdir(path,dic,ID) if check == 0: a = jpg(http,path,dic,browser,ID) if a == 1: fail = pd.concat((fail,info.iloc[i:i+1,:])) deldir(path,dic,ID) else: time.sleep(np.random.randint(3,6)) continue else: continue return failfail = main()
五、結果
PS:網址來源於某盜版網址,圖文中相關連結等信息均隱藏。