admin管理员组

文章数量:814257

趣味学python(018)

python——爬取漫画

今天小编也是学习了爬取漫画的代码,特来分享一下。

需要导入的库:

from lxml import etree
import requests
from PIL import Image
from io import BytesIO

如果要操作二进制数据,就需要使用BytesIO。 BytesIO实现了在内存中读写bytes
其他的就不多说了。

我选取的网址:/

为斗破苍穹

打开开发者工具(我用的谷歌),发现如图所示

出现了 x-requested-with: XMLHttpRequest,表明有渲染过程,Ajax请求,不能直接通过访问网址的html数据拿到我们想要的东西。

我们直接 进入第一话,查看源码:

经过对网址的多次试探后,发现出现 //mhpic.manhualang/comic/D/斗破苍穹拆分版/1话/2.jpg-mht.middle.webp 格式时,可以访问到完整的图片(我们想要的?????)

而且观察 network中 并未找到 相关的链接,所以我们采用 直接构造网址的方法,
去拿到数据。

爬取漫画 Ajax请求 不能直接爬取 采用直接构造网址
‘’’
//mhpicmanhua/comic/D/斗破苍穹拆分版/3话/1.jpg-300x150.jpg
//mhpic.manhualang/comic/D/斗破苍穹拆分版/1话/2.jpg-mht.middle.webp

‘’’

源码:

from lxml import etree
import requests
from PIL import Image
from io import BytesIO

#爬取漫画 Ajax请求 不能直接爬取 采用直接构造网址
‘’’
//mhpicmanhua/comic/D/斗破苍穹拆分版/3话/1.jpg-300x150.jpg
//mhpic.manhualang/comic/D/斗破苍穹拆分版/1话/2.jpg-mht.middle.webp

‘’’

url = ‘/’
#构造请求头
headers = {
‘user-agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/76.0.3809.100 Safari/537.36’
}

#1 获得数据
response = requests.get(url, headers=headers)
html = response.text
#整理成文档对象
html = etree.HTML(html)
lias = html.xpath(’//ol[@id=“j_chapter_list”]/li/a/div/img/@data-src’)

imgs = []
index1 = 1
for lia in lias:
# print(lia)
if index1 > 3:
break
index1 += 1
li = lia.replace(‘cnmanhua’, ‘manhualang’)
# print(li)
li = li.rstrip(‘jpg-300x150.jpg’)
‘’’
我们发现 最后的数字也去除了,
//mhpic.manhualang/comic/D/斗破苍穹拆分版/1话/

>#
print(li)   接下来 构造请求网址
index = 1
while True:# 开始循环遍历网址 下载数据url = 'https:' + li + str(index) + '.jpg-mht.middle.webp'res = requests.get(url, headers=headers)# 判断是否为图片if res.content.startswith(b"<?xml"):break# 如果要操作二进制数据,就需要使用BytesIO。# BytesIO实现了在内存中读写bytesim = Image.open(BytesIO(res.content))imgs.append(im)print('正在保存:' + url)index += 1

imgs[0].save(‘斗破苍穹.pdf’, save_all=True, append_images=imgs[1:])

最后

本文标签: 趣味学python(018)