零基础,一直十分想要下载腾讯动漫上的漫画,之前找了好几个爬虫总是运转的不太好,有一个爬虫能用,但是好像最近腾讯又改动了页面导致匹配出现了点问题。
于是一边查一边复制粘贴一边自己摸索一天半搞了这个弟弟爬虫,基本等于按键精灵,不能保障完全下完,速度慢,一个页面一直走。
但是毕竟是自己写的第一个爬虫,达到了目的,所以还是很开心!

另外,我下载漫画只是为了后续可能视频剪辑会用,请尊重版权,喜欢的漫画请购买正版~
用户登陆
如果是爬取非vip漫画不需要登陆,如果爬取vip漫画需要一个购买完要爬的漫画的账号来进行登陆
腾讯系列的网站都差不多,所以抄了网上别人的QQ空间模拟登陆:https://blog.csdn.net/crjmail/article/details/81666284

    #第一次通过send_keys向输入框发送用户名密码登录driver1.switch_to.frame('iframeAll')  # 切换到登陆界面driver1.find_element_by_id('switcher_plogin').click()   # 选择帐号密码登陆time.sleep(0.5)driver1.find_element_by_name('u').clear()time.sleep(0.5)driver1.find_element_by_name('u').send_keys('账号')  # 此处输入你的QQ号time.sleep(0.5)driver1.find_element_by_name('p').clear()time.sleep(0.5)driver1.find_element_by_name('p').send_keys('密码')  # 此处输入你的QQ密码time.sleep(1)driver1.find_element_by_id('login_button').click() # 点击登陆按键

滚屏漫画加载
腾讯动漫是采用滚屏满满加载的方式,所以这边模拟了下滑操作,并且这个操作没有任何保证,就是慢慢下滑
如果想要稳妥就是每次下滑的少一点,下滑次数多一点这样子慢慢来
这一部分还有待改进的空间,我有尝试过网上一位大佬的方法,大概是不断前后滚屏,判断元素是否load,不过失败了。所以就还是这个弟弟做法。这个方法对于更新页数稳定的漫画还是可以的。

        for i in range(0,30):driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)time.sleep(2)

提取标题设置存储路径

        #提取标题title  = soup.title.stringprint(title)titlelist = title.split('-')title = titlelist[0]titlelist = title.split('》')title = titlelist[1]x = 0path = "comic/yiren/"+title+"/"  # 存储每章节漫画路径if (os.path.exists(path)):#判断文件夹是否存在,存在则删除再创建shutil.rmtree(path)time.sleep(5)os.mkdir(path)else:os.mkdir(path)

下载漫画
没有很认真的匹配正则式所以里面有点横条小图

        imglist = soup.find_all("img", {"src": re.compile('.*?\.jpg/0')})  # 查找图片for img in imglist:#下载图片print(img['src'])r = requests.get(img['src'], stream=True)image_name = xwith open(path+'%s.jpg' % image_name, 'wb') as f:for chunk in r.iter_content(chunk_size=128):f.write(chunk)print('Saved %s' % str(image_name))x += 1

点击下一页
因为理想状态下是滚屏到了页面底部,所以可以直接点击下一页
比较傻的办法,但是好处就是不用cookie,第一部登陆后一键到底,但是坏处就是出现超页的时候会找不到元素而中断。

driver1.find_element_by_xpath("//*[@id='mainControlNext']").click()

完整代码

import time #用来延时
import re,os
import requests
from selenium import webdriver
import selenium.webdriver.common.keys as keys
from bs4 import BeautifulSoup
import shutildef downloadimg():option=webdriver.ChromeOptions()option.add_argument('headless') # 设置option隐藏print("启动")driver1 = webdriver.Chrome(chrome_options=option)driver1.get("https://ac.qq.com/ComicView/index/id/531490/cid/453")#下载漫画的连接入口driver1.maximize_window()time.sleep(3)****需要VIP的漫画需要登陆并购买好完整漫画***********#第一次通过send_keys向输入框发送用户名密码登录driver1.switch_to.frame('iframeAll')  # 切换到登陆界面driver1.find_element_by_id('switcher_plogin').click()   # 选择帐号密码登陆time.sleep(0.5)driver1.find_element_by_name('u').clear()time.sleep(0.5)driver1.find_element_by_name('u').send_keys(' ')  # 此处输入你的QQ号time.sleep(0.5)driver1.find_element_by_name('p').clear()time.sleep(0.5)driver1.find_element_by_name('p').send_keys(' ')  # 此处输入你的QQ密码time.sleep(1)driver1.find_element_by_id('login_button').click() # 点击登陆按键****支持正版漫画**********for j in range(0,100):time.sleep(2)for i in range(0,30):driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)driver1.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)time.sleep(2)soup = BeautifulSoup(driver1.page_source, "html.parser")#提取标题title  = soup.title.stringprint(title)titlelist = title.split('-')title = titlelist[0]titlelist = title.split('》')title = titlelist[1]#print(soup)imglist = soup.find_all("img", {"src": re.compile('.*?\.jpg/0')})  # 查找图片#print(imglist)x = 0path = "comic/yiren/"+title+"/"  # 存储每章节漫画路径if (os.path.exists(path)):#判断文件夹是否存在,存在则删除再创建shutil.rmtree(path)time.sleep(5)os.mkdir(path)else:os.mkdir(path)for img in imglist:#下载图片print(img['src'])r = requests.get(img['src'], stream=True)image_name = xwith open(path+'%s.jpg' % image_name, 'wb') as f:for chunk in r.iter_content(chunk_size=128):f.write(chunk)print('Saved %s' % str(image_name))x += 1driver1.find_element_by_xpath("//*[@id='mainControlNext']").click()if __name__ == '__main__':downloadimg()

一些尝试过却没有用上的方法
1.滚屏

 js = "var q=document.body.scrollTop=10000" #chrome浏览器,滚到底部失败,无反应driver1.execute_script(js)

2.判断元素是否load来判断是否加载完毕,配合滚屏操作

time_start=datetime.datetime.now()while (datetime.datetime.now()-time_start).total_seconds()<500:items = self.driver.find_elements_by_xpath("/html/body/div[@id = 'mainView']/ul/li/img")try:for index, item in enumerate(items):if item.get_attribute("class") != 'loaded':self.driver.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_UP)self.driver.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_UP)self.driver.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)self.driver.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)self.driver.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)self.driver.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)self.driver.find_element_by_xpath("/html/body").send_keys(keys.Keys.PAGE_DOWN)print('pic index: {}/{} not loaded, this is the {}th time'.format(index, len(items), index))time.sleep(0.5)breakelse:breakexcept Exception as e:print(e)breakitems = self.driver.find_elements_by_xpath("/html/body/div[@id = 'mainView']/ul/li/img")

3.使用cookie
第一种方法成功过一段时间,之后失效,尝试第二种方法,失败
https://www.cnblogs.com/cnhkzyy/p/9260373.html

一个瓜皮的腾讯动漫爬虫相关推荐

  1. 腾讯动漫爬虫与动态随机加载反爬破解技术实战

    本文作者韦玮原创,转载请注明出处. 项目需求与问题引入 有时,我们想爬取腾讯动漫中的漫画,比如,我们不妨打开腾讯动漫中某一个动漫的网址ac.qq.com/Comic/comic-,如下图所示: 然后, ...

  2. Python爬虫案例,腾讯动漫爬虫,步骤超详细解释。

    实施步骤 (1) 数据爬取:使用requests请求为基础获取数据源. (2) UA伪装:模拟浏览器访问网址. (3) 数据解析:使用xpath语法处理数据. (4) 数据存储:获取需求数据后使用Ex ...

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

    Python爬虫---爬取腾讯动漫全站漫画 操作环境 网页分析 明确目标 提取漫画地址 提取漫画章节地址 提取漫画图片 编写代码 导入需要的模块 获取漫画地址 提取漫画的内容页 提取章节名 获取漫画源 ...

  4. java 如何爬腾讯漫画,python爬虫:如何爬虫腾讯动漫的漫画呢?分析+源代码

    python爬虫可以获取很多想要的资源,那么作为一个动漫的爱好者,除了看动画之外,追漫画才能算是真正的真爱粉.那么,如何使用python爬虫我们想要的漫画呢? python爬虫 首先,我们要使用pyt ...

  5. python爬取付费漫画_Python爬虫---爬取腾讯动漫全站漫画

    标签,我猜测每部漫画的地址信息就存储在这些标签里面 随便打开一个<li>标签,点击里面包裹的链接地址会跳转到一个新的网页,这个网页正是我想要找的漫画地址,可以见得我的猜测是正确的,等到实际 ...

  6. Python 爬虫 携程池 爬取腾讯动漫

    简介 主要爬取腾讯动漫上某一漫画的所有图片的url 所用到的库 分析腾讯动漫网址 代码 所用到的库 gevent gevent.pool requests selenium xpath 分析腾讯动漫 ...

  7. 使用selenium爬取腾讯动漫!国漫也有好看的!

    前言 本来只是想学习一下selenium模块的简单使用,然后一直添加功能,感觉能把它变成一个项目了,于是乎,就有了这篇文章 写得很烂,速度很慢,但不影响这是我的第一次尝试,如果师傅们花时间看看我的代码 ...

  8. 使用selenium爬取腾讯动漫

    文章目录 前言 一.Download.py 1.导入模块 2.构造Download类 3.Download 类中的函数 (1)login() (2)loading() (3)comic_info() ...

  9. Python爬取腾讯动漫全站漫画详细教程(附带源码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:merlin& PS:如有需要Python学习资料的小伙伴可 ...

最新文章

  1. centos 6.8 编译安装git 2.11.0
  2. Mac安装brew包管理工具
  3. SAP CRM IBASE头部字段读取的具体实现
  4. Android studio之Error:(23, 17) Failed to resolve: junit:junit:4.12
  5. OpenMP之双重for循环并行计算改进
  6. java代码生成器_java代码生成器怎么用
  7. android数据存放map_Android存储数据到本地文件
  8. python中的第三方库 cv2_cv2 python
  9. Naïve UI——一个 Vue 3 组件库
  10. 【jQuery笔记Part2】03-jQuery-addBack()与end()的区别-children()与find()的区别
  11. 谷歌AI的七个“不正经”玩法,个个能玩一整天
  12. 打造IE6的position:fixed整理篇
  13. c51语言跑马灯键盘程序,单片机按键控制跑马灯程序
  14. SSM项目实战——图书管理系统
  15. UEFI——PCD研究
  16. 网站搭建之PHP安装教程
  17. 以太坊源码分析-同步之Syncing接口
  18. BTC源码分析 交易(一)
  19. 第七十四课 图的遍历(BFS)
  20. 【反编译系列】四、反编译so文件(IDA_Pro)

热门文章

  1. Received status code 400 from server: Bad Request
  2. pg_dump 命令
  3. 《特性:Metrics》直播干货
  4. 关于华为手机密码保险箱功能关闭
  5. duilib 子窗口位置_duilib入门简明教程 -- 界面布局(9) (转)
  6. 不明原因儿童急性肝炎与新冠有关?!柳叶刀子刊最新研究激起千层浪
  7. Java中保留小数,取绝对值
  8. (翻译)配置(Settings )
  9. JavaSE笔记(全面版本)>BBQ
  10. Android RecyclerView复杂布局 实现多Item,item中含视频文件播放