先上代码
import requests,os,bs4
url='https://xkcd.com/'
# print(os.getcwd())
if not os.path.exists('xkcd'): # 创建存图片的路径
os.mkdir('xkcd')
while not url.endswith('#'): # 观察发现网站第一张图的Prev按钮链接是#
# 1-下载网页
print('downloading page %s...',url)
res=requests.get(url)
res.raise_for_status()
soup=bs4.BeautifulSoup(res.text, "html.parser")
# 2-解析,找出图片url
comicElem=soup.select('div #comic img') # 这个要观察页面
if comicElem==[]:
print('cound not find comic image.')
else:
comicUrl=comicElem[0].get('src')
print('downloading page %s...',comicUrl)
res=requests.get('https://xkcd.com/'+comicUrl) # 图片的存储地址
res.raise_for_status()
# 3-下载图片
imageFile=open(os.path.join('xkcd',os.path.basename(comicUrl)),'wb') # 拿到图片名称并写入设定路径
for chunk in res.iter_content(100000):
imageFile.write(chunk)
imageFile.close()
# 4-得到Prev按钮的url
prevLink=soup.select('a[rel="prev"]')[0]
url='https://xkcd.com/'+prevLink.get('href')
print('Done.')
运行情况:运行了一会儿我主动中断了,没必要爬那么多。。
下载的图片:
PS:
1. 关于iter_content()的使用,可参考 https://blog.csdn.net/weixin_41848989/article/details/88554700
2. soup.select('div #comic img') 这个函数的结果是list,使用要注意