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

print一下输出的comic_list,提取成功

在这里插入图片描述

  • 提取漫画的内容页

内容页的提取也很简单,就像上面的分析一样,使用简单的xpath语法即可提取

在这里插入图片描述

然后我们再将漫画的名字提取出来,方便为保存的文件夹命名

在这里插入图片描述

#遍历提取到的信息

for comic in comic_list:

#拼接成为漫画目录页的网址

comic_url = url + str(comic)

#从漫画目录页提取信息

url_data = requests.get(comic_url).text

#准备用xpath语法提取信息

data_comic = etree.HTML(url_data)

#提取漫画名–text()为提取文本内容

name_comic = data_comic.xpath(“//h2[@class=‘works-intro-title ui-left’]/strong/text()”)

#提取该漫画每一页的地址

item_list = data_comic.xpath(“//span[@class=‘works-chapter-item’]/a/@href”)

print(name_comic)

print(item_list)

print打印的信息:

在这里插入图片描述

  • 提取章节名

刚刚我们输出的是漫画页的地址字段,但是通过这些字段并不能请求到信息,还需在前面加上域名才可以构成一个完整的网址

提取章节名是为了在漫画名的文件夹下再为每个章节创建一个文件夹保存漫画图片

for item in item_list:

#拼接每一章节的地址

item_url = url + str(item)

#print(item_url)

#请求每一章节的信息

page_mes = requests.get(item_url).text

#准备使用xpath提取内容

page_ming = etree.HTML(page_mes)

#提取章节名

page_name = page_ming.xpath(‘//span[@class=“title-comicHeading”]/text()’)

print(page_name)

打印章节名:

在这里插入图片描述

  • 获取漫画源网页代码

这个部分的代码是这个代码的核心部分,也是花费时间最久的部分

首先我们知道通过正常的方式没有办法请求到所有的图片地址信息,若是使用抓包方法会变得非常难分析,所以我采用的是模拟浏览器滑动的方法来获得图片的地址信息

为了方便看到结果,先将webdriver设置为有界面模式,等到实现想要的功能之后,再将它隐藏起来

#webdriver位置

path = r’/home/jmhao/chromedriver’

#浏览器参数设置

browser = webdriver.Chrome(executable_path=path)

#开始请求第一个章节的网址

browser.get(item_url)

#设置延时,为后续做缓冲

sleep(2)

#尝试执行下列代码

try:

#设置自动下滑滚动条操作

for i in range(1, 100):

#滑动距离设置

js = 'var q=document.getElementById(“mainView”).scrollTop = ’ + str(i * 1000)

#执行滑动选项

browser.execute_script(js)

#延时,使图片充分加载

sleep(2)

sleep(2)

#将打开的界面截图保存,证明无界面浏览器确实打开了网页

browser.get_screenshot_as_file(str(page_name) + “.png”)

#获取当前页面源码

data = browser.page_source

#在当前文件夹下创建html文件,并将网页源码写入

fh = open(“dongman.html”, “w”, encoding=“utf-8”)

#写入操作

fh.write(data)

#关掉浏览器

fh.close()

若上述代码执行报错(大概率是由于付费漫画),则执行此部分代码

except Exception as err:

#跳过错误代码

pass

运行之后会自动打开漫画的内容页,并拖动右侧的滑动条(模拟了手动操作,缓慢拖动是为了让图片充分加载),其中的sleep方法和网速有一定的关系,网速好的可以适当减少延时的时间,网速差可适当延长

在写拖动滑动条的代码时,我尝试了非常多种拖动写法,也模拟了按下方向键的操作,可是只有这一种方法使用成功了。我认为失败的原因可能是刚打开界面的时候会有一个导航条挡住滑块,导致无法定位到滑块的坐标(因为我用其他网页测试的时候都是可以拖动的)

在这里插入图片描述

使用的try是为了防止有一些章节会弹出付费窗口,导致程序报错,使后续无法运行,即遇到会报错的情况就跳过此段代码,执行except中的选项

这段程序运行完之后有一个dongman.html文件保存在当前文件夹下,里面就包含了所有图片的url,接下来只要读取这个文件的内容就可以提取到所有的漫画地址了

  • 下载漫画图片

当我们保存完网页的源代码之后,接下来的操作就变得简单了 我们要做的就是提取文件内容,将图片下载到本地

#用beautifulsoup打开本地文件

html_new = BeautifulSoup(open(‘dongman.html’, encoding=‘utf-8’), features=‘html.parser’)

#提取html文件中的主体部分

soup = html_new.find(id=“mainView”)

#设置变量i,方便为保存的图片命名

i = 0

#提取出主体部分中的img标签(因为图片地址保存在img标签中)

for items in soup.find_all(“img”):

#提取图片地址信息

item = items.get(“src”)

#请求图片地址

comic_pic = requests.get(item).content

#print(comic_pic)

#尝试提取图片,若发生错误则跳过

try:

#打开文件夹,将图片存入

with open(‘comic/’ + str(name_comic) + ‘/’ + str(page_name) + ‘/’ + str(i + 1) + ‘.jpg’, ‘wb’) as f:

#print('正在下载第 ‘, (i + 1), ’ 张图片中’)

print(‘正在下载’ , str(name_comic) , ‘-’ , str(page_name) , ‘- 第’ , (i+1) , ‘张图片’)

#写入操作

f.write(comic_pic)

#更改图片名,防止新下载的图片覆盖原图片

i += 1

#若上述代码执行报错,则执行此部分代码

except Exception as err:

#跳过错误代码

pass

  • 下载结果

到了这里代码就写完了,来看一下运行结果:

在这里插入图片描述

打开文件夹看到:

在这里插入图片描述

完整代码


import requests

from lxml import etree

from selenium import webdriver

from time import sleep

from bs4 import BeautifulSoup

from selenium.webdriver.chrome.options import Options

import os

‘’’

============================

python学习群:695185429

============================

‘’’

#打开腾讯动漫首页

url = ‘https://ac.qq.com/’

#给网页发送请求

data = requests.get(url).text

#将网页信息转换成xpath可识别的类型

html = etree.HTML(data)

#提取到每个漫画的目录页地址

comic_list = html.xpath(‘//a[@class=“in-rank-name”]/@href’)

#print(comic_list)

#遍历提取到的信息

for comic in comic_list:

#拼接成为漫画目录页的网址

comic_url = url + str(comic)

#从漫画目录页提取信息

url_data = requests.get(comic_url).text

#准备用xpath语法提取信息

data_comic = etree.HTML(url_data)

#提取漫画名–text()为提取文本内容

name_comic = data_comic.xpath(“//h2[@class=‘works-intro-title ui-left’]/strong/text()”)

#提取该漫画每一页的地址

item_list = data_comic.xpath(“//span[@class=‘works-chapter-item’]/a/@href”)

print(name_comic)

print(item_list)

#以漫画名字为文件夹名创建文件夹

os.makedirs(‘comic/’ + str(name_comic))

#将一本漫画的每一章地址遍历

for item in item_list:

#拼接每一章节的地址

item_url = url + str(item)

#print(item_url)

#请求每一章节的信息

page_mes = requests.get(item_url).text

#准备使用xpath提取内容

page_ming = etree.HTML(page_mes)

#提取章节名

page_name = page_ming.xpath(‘//span[@class=“title-comicHeading”]/text()’)

#print(page_name)

#再以章节名命名一个文件夹

os.makedirs(‘comic/’ + str(name_comic) + ‘/’ + str(page_name))

#以下为代码的主体部分

#设置谷歌无界面浏览器

chrome_options = Options()

chrome_options.add_argument(‘–headless’)

chrome_options.add_argument(‘–disable-gpu’)

#webdriver位置

path = r’/home/jmhao/chromedriver’

#浏览器参数设置

browser = webdriver.Chrome(executable_path=path, options=chrome_options)

#开始请求第一个章节的网址

browser.get(item_url)

#设置延时,为后续做缓冲

sleep(2)

#browser.get_screenshot_as_file(str(page_name) + “.png”)

#尝试执行下列代码

try:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

(https://i-blog.csdnimg.cn/blog_migrate/54506206d504e30ba7c6a1b77976f6dc.png)

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值