用python爬取xkcd.com上的有趣漫画图片

       

        这是自学前端的第二天。

        在学《Automate The Boring Stuff With Python》的web开发部分时发现自己对于HTML、CSS等前端标记语言一无所知,于是前两天在B站上开始自学前端基础。下面这个项目是基于书上的项目12.7,我看到这个项目名称时,第一想法就是利用这两天所学习到的前端知识自己先写一个版本,然而在写的过程中,还是往前查阅了许多函数的用法(有的实在记不住了╯︿╰)。

# _*_ coding utf-8 _*_
# designer: はな
# time: 2021/7/19 18:01
# name: comic_download.py


"""项目:从xkcd.com上下载一些有趣的漫画图片"""


import requests, bs4, re


page_num = input("请问需要下载哪些漫画?(输入格式:1-10)")
foldername = input("请输入需要下载到的文件夹名称\n(将在桌面创建,默认为XKCD_COMIC,如采用默认值请直接输入回车):")

re_page = re.compile('(\d+)-(\d+)')
first_page = int(re_page.search(page_num).group(1))
last_page = int(re_page.search(page_num).group(2))

if foldername != '':
    foldername = 'C:\\User\\DELL\\Desktop\\' + foldername
else:
    foldername = 'C:\\Users\\DEll\\Desktop\\XKCD_COMIC'

firstpage_url = 'https://xkcd.com/1/'
nextpage_url = firstpage_url

for page in range(1, last_page + 1):

    print(f"正在检索第{page}页")

    #取得当前页面的Response
    xkcd_html = requests.get(nextpage_url)
    xkcdSoup = bs4.BeautifulSoup(xkcd_html.text, 'html.parser')

    #获取下一页的网址
    nextpage = xkcdSoup.select('a[rel="next"]')
    if nextpage[0].get('href') != '#':
        nextpage_url = r'http://xkcd.com' + nextpage[0].get('href')
    else:
        page = last_page + 1

    if page >= first_page:

        #取得当前页面图片的名称
        picture_name = str(xkcdSoup.select('#ctitle')[0].getText())

        #获取图片的网址
        img_url = "https:" + xkcdSoup.select('#comic img')[0].get('src')
        picture = requests.get(img_url)
        with open(foldername + f"\\{picture_name}.jpg", 'wb') as picture_file:
            for data in picture.iter_content(100000):
                picture_file.write(data)
            print(f"图片{picture_name}下载成功!")

    else:
        continue
        
    if page == last_page + 1:
        print("已经到达最后一页")

这里面一个很关键的地方在于,创建.jpg文件时,要以二进制写入方式('wb')创建文件,再用Response对象的.iter_content()方法进行二进制数据的写入,这样才不会发生异常。

这是在浏览器中查找标签时的截图(虽然对BeautifulSoup对象的CSS选择器设置还不是很熟):

用python爬取xkcd.com上的有趣漫画图片

         

下面是爬取的效果图:

用python爬取xkcd.com上的有趣漫画图片

用python爬取xkcd.com上的有趣漫画图片

 学会了这个项目,以后就可以轻松爬取想看的漫画啦!

上一篇:苹果浏览器应用实战(四)


下一篇:mysql 创建数据库,添加用户,用户授权