python——爬取漫画
今天小编也是学习了爬取漫画的代码,特来分享一下。
需要导入的库:
from lxml import etree
import requests
from PIL import Image
from io import BytesIO
如果要操作二进制数据,就需要使用BytesIO。 BytesIO实现了在内存中读写bytes
其他的就不多说了。
我选取的网址:https://www.manhuatai.com/doupocangqiong/
为斗破苍穹
打开开发者工具(我用的谷歌),发现如图所示
出现了 x-requested-with: XMLHttpRequest,表明有渲染过程,Ajax请求,不能直接通过访问网址的html数据拿到我们想要的东西。
我们直接 进入第一话,查看源码:
经过对网址的多次试探后,发现出现 //mhpic.manhualang.com/comic/D/斗破苍穹拆分版/1话/2.jpg-mht.middle.webp 格式时,可以访问到完整的图片(我们想要的?????)
而且观察 network中 并未找到 相关的链接,所以我们采用 直接构造网址的方法,
去拿到数据。
爬取漫画 Ajax请求 不能直接爬取 采用直接构造网址
‘’’
//mhpic.cnmanhua.com/comic/D/斗破苍穹拆分版/3话/1.jpg-300x150.jpg
//mhpic.manhualang.com/comic/D/斗破苍穹拆分版/1话/2.jpg-mht.middle.webp
‘’’
源码:
from lxml import etree
import requests
from PIL import Image
from io import BytesIO
#爬取漫画 Ajax请求 不能直接爬取 采用直接构造网址
‘’’
//mhpic.cnmanhua.com/comic/D/斗破苍穹拆分版/3话/1.jpg-300x150.jpg
//mhpic.manhualang.com/comic/D/斗破苍穹拆分版/1话/2.jpg-mht.middle.webp
‘’’
url = ‘https://www.manhuatai.com/doupocangqiong/’
#构造请求头
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.com/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实现了在内存中读写bytes
im = Image.open(BytesIO(res.content))
imgs.append(im)
print('正在保存:' + url)
index += 1
imgs[0].save(‘斗破苍穹.pdf’, save_all=True, append_images=imgs[1:])
最后