Python爬取腾讯动漫全站漫画详细教程(附带源码)(1),项目实践心得体会

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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



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

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

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

#提取章节名

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:

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

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()

#下面的操作为打开保存的html文件,提取其中的图片信息,并保存到文件夹中

#用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:

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

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

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

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-hSEsy920-1713369889305)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值