腾讯动漫爬虫与动态随机加载反爬

Posted 河南骏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯动漫爬虫与动态随机加载反爬相关的知识,希望对你有一定的参考价值。

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


以上是关于腾讯动漫爬虫与动态随机加载反爬的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫---爬取腾讯动漫全站漫画

常见的一些反爬虫策略破解方式-Java网络爬虫系统性学习与实战系列(11)

常见的一些反爬虫策略破解方式-Java网络爬虫系统性学习与实战系列(11)

爬取Ajax动态加载网页

爬虫与反爬虫的较量-图片反爬

Python爬虫爬取腾讯视频动漫专区的动漫及其描述