Image downloader for a website v2 This code takes a website and downloads all .jpg images in the webpage. It supports only websites that have the img element and src contains a .jpg link. The previous version can be found here

import random

import urllib.request

import requests

from bs4 import BeautifulSoup


def Download_Image_from_Web(url):
    # variables
    k = 0
    links_list = []
    # source code to BeatifulSoup
    source_code = requests.get(url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text, "html.parser")
    # filtering
    for link in soup.findAll('img'):

        image_links = link.get('src')
        if '.jpg' in image_links:
            for i in image_links.split("\\n"):

                links_list.append(i.split())
    # send image links and download them
    while k &lt;= (len(links_list) - 1):
        # create a random name
        name = random.randrange(1, 1000)
        fullName = str(name) + ".jpg"
        # download each link sperated
        lines = links_list[k][0]
        urllib.request.urlretrieve(lines, fullName)

        print(lines)
        print(fullName + '\n')

        k += 1
# choose a site that has the &lt;img&gt; element in its html source code with src tag
Download_Image_from_Web("https://pixabay.com")
There's a lot to improve about your code, and I'll start from the top. I'll also rewrite some of the logic you had there because IMO it's a bit clumsy and hard to understand.

Imports
Don't use urllib and requests at the same time. Use either one or another. They serve the same purpose.
from bs4 import BeautifulSoup
import os
import random
import requests

As you can see, I've alphabetically ordered them so that it becomes easier to locate each of them.

Constants
You have one url which might be moved at the top of your program. That way, you'll allow your users to change it without searching through all the code.
Moving on, I realised that you didn't give the user a chance to save the pictures wherever he wants. Let's add another constant, say IMAGE_LOCATION.
URL = 'https://pixabay.com' 
IMAGE_LOCATION = '/home/images/'


Functions
You can split your code into separate functions so that each of them can serve its own purpose. Read more about Single Responsability Principle:
def get_html_source():
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    html_source = requests.get(URL).text
    return BeautifulSoup(html_source, 'html.parser')

The above function will return a BeautifulSoup object which contains the html source code of the desired URL.
We can now build another function which will generate a path containing a random name for each picture we're downloading:
def image_name():
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    return '{}.jpg'.format(os.path.join(IMAGE_LOCATION, str(random.randrange(1, 100000))))

I've also increased the maximum number just in case there's a huge number of files.
Another helper function would be one that checks if a src URL is a valid one or not. I've modified a bit your condition and made it more strict:
def validate(image_url):
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    return image_url.endswith('.jpg') and image_url.startswith('http')

The above, verifies if the url starts with http (implicitly https will pass) and also if it ends in .jpg.
Only now, we can finally create the download_images function, and wrap our logic into it:
def download_images(soup):
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    for link in soup.find_all('img'):
        image_url = link.get('src')
        if validate(image_url):
            image = requests.get(image_url)
            if image.status_code == 200:
                with open(image_name(), 'wb') as f:
                    f.write(image.content)

As you can see, I've removed most of the logic you had, and simply did the following steps:

Go through all the img tags and save their src attribute (which is an URL
Check the URL if it matches our condition and build our image object
Double check to see if the status code was successful (200) and save the image to our desired location.

Next, wrapping all our code within a main function is as simple as:
def main():
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    soup = get_html_source()
    download_images(soup)


All the code
from bs4 import BeautifulSoup
import os
import random
import requests


URL = 'https://pixabay.com'
IMAGE_LOCATION = '/home/images/'


def get_html_source():
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    html_source = requests.get(URL).text
    return BeautifulSoup(html_source, 'html.parser')


def image_name():
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    return '{}.jpg'.format(os.path.join(IMAGE_LOCATION, str(random.randrange(1, 100000))))


def validate(image_url):
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    return image_url.endswith('.jpg') and image_url.startswith('http')


def download_images(soup):
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    for link in soup.findAll('img'):
        image_url = link.get('src')
        if validate(image_url):
            image = requests.get(image_url)
            if image.status_code == 200:
                with open(image_name(), 'wb') as f:
                    f.write(image.content)


def main():
    &quot;&quot;&quot;Docstring here.&quot;&quot;&quot;
    soup = get_html_source()
    download_images(soup)

if __name__ == '__main__':
    main()

If you don't know what's with if __name__ == '__main__' you can read more about it here
More, note that all the functions have a docstring which contain a placeholder like &quot;Docstring here.&quot;. You can replace that placeholder with a summary that describes what each function does.