这是自学前端的第二天。
在学《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选择器设置还不是很熟):
下面是爬取的效果图:
学会了这个项目,以后就可以轻松爬取想看的漫画啦!