This script can be used to download any issue of the xkcd comics with just a simple command.
Requirements:
- beautifulsoup4==4.9.1
- certifi==2020.6.20
- chardet==3.0.4
- idna==2.10
- requests==2.24.0
- soupsieve==2.0.1
- urllib3==1.25.10
- Install the requirements with the following line:
pip install -r requirements.txt
Code language: CSS (css)
Run the script:
- Run the following command from your terminal.
python3 xkcd_downloader.py -l 'issue-number'
Example:
python3 xkcd_downloader.py -l 956
Code language: JavaScript (javascript)
Source Code:
xkcd_dowloader.py
import requests
from bs4 import BeautifulSoup as bs
import shutil
import argparse
# Code to add the cli
parser = argparse.ArgumentParser()
parser.add_argument("-l", "--issue", required=True, help="Comics Issue Number")
args = vars(parser.parse_args())
#Storing the comic issue number provided by the user
issue_number = args['issue']
#Complete url for the issue
url = "https://xkcd.com/"+ issue_number
response = requests.get(url)
#Checking if we can fetch the url or not
if response.status_code ==200:
soup = bs(response.content, 'html.parser')
image_link = soup.find_all('img')[2]['src']
image_name = image_link.split('/')[-1]
image_url = "https:" + image_link
r = requests.get(image_url, stream=True)
if r.status_code == 200:
#This ensures the image file is loaded correctly
r.raw.decode_content = True
# Creating the image file
with open(image_name, 'wb') as f:
shutil.copyfileobj(r.raw, f)
print('Image successfully Downloaded: ', image_name)
else:
print('Image Couldn\'t be retreived')
else:
print("Issue number is invalid")
Code language: PHP (php)