在学习了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='