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