Accessing the internet using the urllib.request module in Python

The urllib.request module in Python provides a simple interface for accessing and opening URLs over the internet. This module is part of Python's standard library and supports various protocols including HTTP, HTTPS, and FTP.

The primary function urlopen() makes it easy for beginners to fetch data from web resources, APIs, and other internet services.

Getting Started

The urllib library comes pre-installed with Python, so no separate installation is required. You can directly import and start using it in your scripts.

import urllib.request

Basic URL Opening

The most common use case is opening and reading data from a URL. This is particularly useful for retrieving data from APIs ?

import urllib.request

# Open a URL
response = urllib.request.urlopen('https://httpbin.org/json')

# Read the content (returns bytes)
content = response.read()
print(type(content))
print(content[:100])  # Print first 100 characters
<class 'bytes'>
b'{\n  "slideshow": {\n    "author": "Yours Truly", \n    "date": "date of publication", \n    "slides'

Converting Bytes to Text

The read() method returns data in byte format. To get plain text, use the decode() method ?

import urllib.request

response = urllib.request.urlopen('https://httpbin.org/json')
text_content = response.read().decode('utf-8')
print(text_content[:200])  # Print first 200 characters
{
  "slideshow": {
    "author": "Yours Truly", 
    "date": "date of publication", 
    "slides": [
      {
        "title": "Wake up to WonderWidgets!", 
        "type": "all"
      },

Saving Data to File

You can save the retrieved data to a file for later processing ?

import urllib.request

# Fetch data from URL
response = urllib.request.urlopen('https://httpbin.org/json')
data = response.read().decode('utf-8')

# Save to file
with open('api_data.txt', 'w') as file:
    file.write(data)

print("Data saved to api_data.txt")
print(f"Content length: {len(data)} characters")
Data saved to api_data.txt
Content length: 429 characters

Sending POST Requests

To send data to a server using POST requests, combine urllib.request with urllib.parse ?

import urllib.parse
import urllib.request

# Prepare data to send
url = 'https://httpbin.org/post'
values = {'name': 'John Doe', 'language': 'Python'}

# Encode the data
data = urllib.parse.urlencode(values)
data = data.encode('ascii')

# Create request and send
req = urllib.request.Request(url, data)
with urllib.request.urlopen(req) as response:
    result = response.read().decode('utf-8')
    print("Response received successfully")

Error Handling

Always handle potential errors when making web requests ?

import urllib.request
import urllib.error

try:
    response = urllib.request.urlopen('https://httpbin.org/status/200')
    print(f"Status: {response.getcode()}")
    print("Request successful!")
except urllib.error.HTTPError as e:
    print(f"HTTP Error: {e.code}")
except urllib.error.URLError as e:
    print(f"URL Error: {e.reason}")
Status: 200
Request successful!

Key Methods and Attributes

Method/Attribute Description Example
read() Returns response content as bytes response.read()
getcode() Returns HTTP status code response.getcode()
geturl() Returns final URL after redirects response.geturl()
info() Returns headers information response.info()

Conclusion

The urllib.request module provides essential functionality for web scraping, API consumption, and HTTP communication in Python. Use it with proper error handling for robust internet-based applications.

Updated on: 2026-03-25T15:57:32+05:30

647 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements