相关文章推荐
酒量大的火龙果  ·  【轻小说】《回复术士的重来人生》棍勇一败涂地 ...·  2 周前    · 
狂野的荔枝  ·  无颜之月哪一集 – 快看漫画问答·  2 周前    · 
小胡子的围巾  ·  无颜之月怎么看 – 快看漫画问答·  1 周前    · 
淡定的胡萝卜  ·  铳火漫画免费下拉式奇漫画 - 下拉式漫画 ...·  1 周前    · 
可爱的香瓜  ·  天狂传说神奇宝贝系列 - 下拉式漫画 - 腾讯动漫·  1 周前    · 
多情的剪刀  ·  捕获报表视图展示 | Microsoft ...·  6 月前    · 
健壮的日光灯  ·  自动换行 - Visual Studio ...·  1 年前    · 
笑点低的啄木鸟  ·  opencv画轨迹 - StarZhai ...·  2 年前    · 
体贴的可乐  ·  今天来聊聊TS中的那些对象类型----Typ ...·  2 年前    · 
另类的紫菜汤  ·  the command npm run ...·  2 年前    · 
Code  ›  XKCD漫画获取爬虫开发者社区
漫画
https://cloud.tencent.com/developer/article/2141891
潇洒的硬币
1 年前
作者头像
tsuki
0 篇文章

XKCD漫画获取爬虫

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > web狗的成长之路 > XKCD漫画获取爬虫

XKCD漫画获取爬虫

作者头像
tsuki
发布 于 2022-10-27 14:43:51
170 0
发布 于 2022-10-27 14:43:51
举报

在看书的时候,书上的项目提到了这个网站,于是尝试了一下不看书上的源代码自己实现这个爬取功能,巩固一下。

效果展示

源代码

代码的实现过程很简单,就是将网站的HTML文件下载下来,然后通过 bs4 解析, select() 获取漫画的存放漫画的 <img> 元素并得到 src 属性定位到漫画的资源地址。然后通过 wb 二进制写入从漫画资源地址获取的文件信息。这样就完成了漫画的下载。

但是这样只能完成首页第一张图片的下载。

那么如何下载多张漫画呢?

我们进入网页,发现了 下一篇 按钮,选中然后检查元素,同理可以定位下一篇漫画的资源地址。

btn = parser.select('.nextLink > a[title]')
next = btn[0].get('href')

获取该元素的下一篇漫画的 URL ,然后同上下载漫画即可。

最后用循环来获取想要下载的漫画篇数。

import requests
import bs4
def next_page(url):
    file = open('1.html', encoding='utf-8')
    parser = bs4.BeautifulSoup(file.read(), 'html.parser')
    btn = parser.select('.nextLink > a[title]')
    next = btn[0].get('href')
    nextURL = url + next
    return nextURL
url = 'https://xkcd.in/'
link = url
num = eval(input("请输入你需要下载的页数:"))
print("正在下载中......")
for i in range(0, num):
    # 获取该网页的HTML文件
    web_req = requests.get(link)
    html_file = open('1.html', 'wb')
    for chunk in web_req.iter_content(10000):
        html_file.write(chunk)
    html_file.close()
    # 获取该网页HTML文件的img标签
    html = open('1.html', encoding='utf-8')
    soup = bs4.BeautifulSoup(html.read(), 'html.parser')
    elems = soup.select('img[title]')
    # 获取图片的资源地址
    payload = elems[0].get('src')
    title = elems[0].get('title')
    # 重组url定位到图片的地址
    src = url + payload
    img_req = requests.get(src)
    file_ad = 'img/' + title.replace("?", "") + '.jpg'
    jpg = open(file_ad, 'wb')
    for chunk in img_req.iter_content(10000):
        jpg.write(chunk)
    print("正在下载:" + title)
 
推荐文章
酒量大的火龙果  ·  【轻小说】《回复术士的重来人生》棍勇一败涂地???最好的方法???……第二十三集__bilibili
2 周前
狂野的荔枝  ·  无颜之月哪一集 – 快看漫画问答
2 周前
小胡子的围巾  ·  无颜之月怎么看 – 快看漫画问答
1 周前
淡定的胡萝卜  ·  铳火漫画免费下拉式奇漫画 - 下拉式漫画 - 腾讯动漫
1 周前
可爱的香瓜  ·  天狂传说神奇宝贝系列 - 下拉式漫画 - 腾讯动漫
1 周前
多情的剪刀  ·  捕获报表视图展示 | Microsoft Learn
6 月前
健壮的日光灯  ·  自动换行 - Visual Studio (Windows) | Microsoft Learn
1 年前
笑点低的啄木鸟  ·  opencv画轨迹 - StarZhai - 博客园
2 年前
体贴的可乐  ·  今天来聊聊TS中的那些对象类型----TypeScript系列:(三) 对象类型。 - 掘金
2 年前
另类的紫菜汤  ·  the command npm run build exited with code 1 vue-掘金
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号