騰訊動漫爬蟲與動態隨機載入反爬

河南駿發表於2018-04-24

在學習了selenium後,就想試試爬一爬動漫,在微信社群裡又看到一個騰訊動漫爬蟲與動態隨機載入反爬破解實戰的文章,就試著跑了一下,還可以。用到了PhantomJS自動觸發漫畫圖片以及js(window.scrollTo()實現頁面滑動,自動觸發觸剩下的多張漫畫圖片),最後用urllib提取並儲存本地。

話不多說,上程式碼,重點已做註釋:

#--*-- coding:utf-8 --*--
from selenium import webdriver
import time
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import re
import urllib.request
import warnings

warnings.filterwarnings("ignore")
#基於PhantomJS建立一個瀏覽器,並且設定一下使用者代理,否則可能出現介面不相容的情況
dcap=dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"]=("Mozilla/5.0(Windows NT 6.1;Win64;x64)")
browser=webdriver.PhantomJS(desired_capabilities=dcap)

#通過PhantomJS開啟相關動漫網頁,將相關動漫圖片地址觸發出來
#開啟動漫的第一頁
browser.get('http://ac.qq.com/ComicView/index/id/539443/cid/1')
for i in range(10):
    js='window.scrollTo('+str(i*1280)+','+str((i+1)*1280)+')'  #把內容滾動到指定的座標
    browser.execute_script(js)
    time.sleep(1)
#將開啟的介面截圖儲存,方便觀察
a=browser.get_screenshot_as_file(r'C:\Users\yyduan\Desktop\test.jpg')
#獲取當前頁面所有原始碼(此時包含出發出來的非同步載入的資源)
data=browser.page_source
#將相關網頁原始碼寫入本地檔案中,方便分析
fh=open(r'C:\Users\yyduan\Desktop\dongman.html','w',encoding='utf-8')
fh.write(data)
fh.close()
browser.quit()
#構造正規表示式提取動漫圖片資源網址
pat='<img src="(http://ac.tc.qq.com.store_file_download.buid=.*?name=.*?).jpg"'
#獲取所有動漫圖片資源網站
allid=re.compile(pat).findall(data)
for i in range(0,len(allid)):
    #得到當前網址
    thisurl=allid[i]
    #去除網址中的多餘元素amp
    #thisurl2=thisurl.replace("amp;","")+".jpg"
    #輸出當前爬取的網址
    print(thisurl2)
    #設定將動漫儲存到本地目錄
    localpath='C:/Users/yyduan/Desktop/dongman/'+str(i)+'.jpg'
    #通過urllib對動漫圖片資源進行爬取
    urllib.request.urlretrieve(thisurl2,filename=localpath)


相關文章