With this code, you can easily generate some fake-html code.
pip install faker
import random | |
from faker import Faker | |
class HTMLGenerator: | |
""" | |
A class to generate random HTML content using Faker library. | |
""" | |
def __init__(self, language='en_US'): | |
""" | |
Initialize the HTMLGenerator with a specified language. | |
:param language: Language code for Faker, defaults to 'en_US'. \n | |
Other choices: `en_GB`, `zh_CN`, `ja_JP`, `ko_KR`, `de_DE`, `fr_FR`, `es_ES`, `it_IT`, etc. | |
""" | |
self.fake = Faker(language) | |
self.html_elements = [ | |
self.generate_title, | |
self.generate_paragraphs, | |
self.generate_headers, | |
self.generate_unordered_list, | |
self.generate_ordered_list, | |
self.generate_description_list, | |
self.generate_blockquotes, | |
self.generate_code, | |
self.generate_preformatted_code, | |
self.generate_table, | |
self.generate_images, | |
self.generate_videos, | |
self.generate_audios, | |
self.generate_iframe, | |
self.insert_inline_elements, | |
] | |
def generate_html(self, target_length=1000, max_elements=10): | |
""" | |
Generate random HTML content up to a target length and maximum number of elements. | |
:param target_length: Target length of the HTML content | |
:param max_elements: Maximum number of HTML elements to generate | |
:return: Generated HTML content as a string | |
""" | |
random.shuffle(self.html_elements) | |
html_output = "" | |
current_length = 0 | |
num_elements = 0 | |
while current_length < target_length and num_elements < max_elements: | |
for element in self.html_elements: | |
if random.random() < 0.5: | |
element_html = element() | |
current_length += len(element_html) | |
html_output += element_html | |
num_elements += 1 | |
if current_length >= target_length or num_elements >= max_elements: | |
break | |
if random.random() < 0.6: | |
html_output = self.insert_css(html_output) | |
if random.random() < 0.6: | |
html_output = self.insert_js(html_output) | |
return html_output | |
def generate_title(self): | |
"""Generate a random title (h1) element.""" | |
return f"<h1>{self.fake.sentence()}</h1>\n" | |
def generate_paragraphs(self, num_paragraphs=1, min_sentences=2, max_sentences=10): | |
""" | |
Generate random paragraphs. | |
:param num_paragraphs: Number of paragraphs to generate | |
:param min_sentences: Minimum number of sentences per paragraph | |
:param max_sentences: Maximum number of sentences per paragraph | |
:return: HTML string containing paragraphs | |
""" | |
paragraphs_html = "" | |
for _ in range(num_paragraphs): | |
num_sentences = random.randint(min_sentences, max_sentences) | |
paragraph = self.fake.paragraph(nb_sentences=num_sentences) | |
paragraphs_html += f"<p>{paragraph}</p>\n" | |
return paragraphs_html | |
def generate_headers(self, num_headers=1, min_level=2, max_level=6): | |
""" | |
Generate random header elements (h2-h6). | |
:param num_headers: Number of headers to generate | |
:param min_level: Minimum header level (2-6) | |
:param max_level: Maximum header level (2-6) | |
:return: HTML string containing headers | |
""" | |
headers_html = "" | |
for _ in range(num_headers): | |
header_level = random.randint(min_level, max_level) | |
header_text = self.fake.sentence() | |
headers_html += f"<h{header_level}>{header_text}</h{header_level}>\n" | |
return headers_html | |
def generate_unordered_list(self, num_items=3, min_items=2, max_items=8): | |
""" | |
Generate a random unordered list. | |
:param num_items: Number of list items to generate | |
:param min_items: Minimum number of list items | |
:param max_items: Maximum number of list items | |
:return: HTML string containing an unordered list | |
""" | |
num_items = min(num_items, random.randint(min_items, max_items)) | |
ul_html = "<ul>\n" | |
for _ in range(num_items): | |
ul_html += f" <li>{self.fake.sentence()}</li>\n" | |
ul_html += "</ul>\n" | |
return ul_html | |
def generate_ordered_list(self, num_items=3, min_items=2, max_items=8): | |
""" | |
Generate a random ordered list. | |
:param num_items: Number of list items to generate | |
:param min_items: Minimum number of list items | |
:param max_items: Maximum number of list items | |
:return: HTML string containing an ordered list | |
""" | |
num_items = min(num_items, random.randint(min_items, max_items)) | |
ol_html = "<ol>\n" | |
for _ in range(num_items): | |
ol_html += f" <li>{self.fake.sentence()}</li>\n" | |
ol_html += "</ol>\n" | |
return ol_html | |
def generate_description_list(self, num_items=3, min_items=2, max_items=8): | |
""" | |
Generate a random description list. | |
:param num_items: Number of list items to generate | |
:param min_items: Minimum number of list items | |
:param max_items: Maximum number of list items | |
:return: HTML string containing a description list | |
""" | |
num_items = min(num_items, random.randint(min_items, max_items)) | |
dl_html = "<dl>\n" | |
for _ in range(num_items): | |
dt = self.fake.word() | |
dd = self.fake.sentence() | |
dl_html += f" <dt>{dt}</dt>\n" | |
dl_html += f" <dd>{dd}</dd>\n" | |
dl_html += "</dl>\n" | |
return dl_html | |
def generate_blockquotes(self, num_quotes=1, min_quotes=1, max_quotes=3): | |
""" | |
Generate random blockquotes. | |
:param num_quotes: Number of blockquotes to generate | |
:param min_quotes: Minimum number of blockquotes | |
:param max_quotes: Maximum number of blockquotes | |
:return: HTML string containing blockquotes | |
""" | |
num_quotes = min(num_quotes, random.randint(min_quotes, max_quotes)) | |
blockquotes_html = "" | |
for _ in range(num_quotes): | |
blockquotes_html += f"<blockquote>{self.fake.sentence()}</blockquote>\n" | |
return blockquotes_html | |
def generate_code(self): | |
"""Generate a random inline code element.""" | |
return f"<code>{self.fake.text()}</code>\n" | |
def generate_preformatted_code(self): | |
"""Generate a random preformatted code block.""" | |
return f"<pre><code>{self.fake.text()}</code></pre>\n" | |
def generate_table(self, num_rows=2, num_cols=2, max_rows=6, max_cols=4): | |
""" | |
Generate a random table. | |
:param num_rows: Number of rows in the table | |
:param num_cols: Number of columns in the table | |
:param max_rows: Maximum number of rows | |
:param max_cols: Maximum number of columns | |
:return: HTML string containing a table | |
""" | |
num_rows = min(num_rows, random.randint(1, max_rows)) | |
num_cols = min(num_cols, random.randint(1, max_cols)) | |
table_html = "<table>\n" | |
for _ in range(num_rows): | |
table_html += " <tr>\n" | |
for _ in range(num_cols): | |
table_html += f" <td>{self.fake.word()}</td>\n" | |
table_html += " </tr>\n" | |
table_html += "</table>\n" | |
return table_html | |
def generate_images(self, num_images=1, min_images=1, max_images=3): | |
""" | |
Generate random image elements. | |
:param num_images: Number of images to generate | |
:param min_images: Minimum number of images | |
:param max_images: Maximum number of images | |
:return: HTML string containing image elements | |
""" | |
num_images = min(num_images, random.randint(min_images, max_images)) | |
images_html = "" | |
for _ in range(num_images): | |
img_url = self.fake.image_url() | |
img_alt = self.fake.word() | |
images_html += f'<img src="{img_url}" alt="{img_alt}">\n' | |
return images_html | |
def generate_videos(self, num_videos=1, min_videos=0, max_videos=2): | |
""" | |
Generate random video elements. | |
:param num_videos: Number of videos to generate | |
:param min_videos: Minimum number of videos | |
:param max_videos: Maximum number of videos | |
:return: HTML string containing video elements | |
""" | |
num_videos = min(num_videos, random.randint(min_videos, max_videos)) | |
videos_html = "" | |
for _ in range(num_videos): | |
video_url = self.fake.url() | |
videos_html += f'<video src="{video_url}" controls></video>\n' | |
return videos_html | |
def generate_audios(self, num_audios=1, min_audios=0, max_audios=2): | |
""" | |
Generate random audio elements. | |
:param num_audios: Number of audio elements to generate | |
:param min_audios: Minimum number of audio elements | |
:param max_audios: Maximum number of audio elements | |
:return: HTML string containing audio elements | |
""" | |
num_audios = min(num_audios, random.randint(min_audios, max_audios)) | |
audios_html = "" | |
for _ in range(num_audios): | |
audio_url = self.fake.url() | |
audios_html += f'<audio src="{audio_url}" controls></audio>\n' | |
return audios_html | |
def generate_iframe(self, num_iframes=1, min_iframes=0, max_iframes=2): | |
""" | |
Generate random iframe elements. | |
:param num_iframes: Number of iframes to generate | |
:param min_iframes: Minimum number of iframes | |
:param max_iframes: Maximum number of iframes | |
:return: HTML string containing iframe elements | |
""" | |
num_iframes = min(num_iframes, random.randint(min_iframes, max_iframes)) | |
iframes_html = "" | |
for _ in range(num_iframes): | |
iframe_url = self.fake.url() | |
width = random.randint(200, 800) | |
height = random.randint(150, 600) | |
iframes_html += f'<iframe src="{iframe_url}" width="{width}" height="{height}" frameborder="0"></iframe>\n' | |
return iframes_html | |
def insert_inline_elements(self, paragraph=None): | |
""" | |
Insert random inline elements (links, bold, italic) into a paragraph. | |
:param paragraph: Paragraph to insert inline elements into (if None, generates a new paragraph) | |
:return: HTML string with inserted inline elements | |
""" | |
if paragraph is None: | |
paragraph = self.generate_paragraphs(num_paragraphs=1) | |
if random.random() < 0.3: | |
link_url = self.fake.url() | |
link_text = self.fake.word() | |
paragraph = paragraph.replace(link_text, f'<a href="{link_url}">{link_text}</a>', 1) | |
if random.random() < 0.3: | |
paragraph = paragraph.replace(self.fake.word(), f"<b>{self.fake.word()}</b>", 1) | |
if random.random() < 0.3: | |
paragraph = paragraph.replace(self.fake.word(), f"<i>{self.fake.word()}</i>", 1) | |
return paragraph | |
def insert_css(self, html): | |
""" | |
Insert random CSS styles into the HTML content. | |
:param html: HTML content to insert CSS into | |
:return: HTML string with inserted CSS | |
""" | |
css_code = f""" | |
body {{ | |
background-color: {self.fake.hex_color()}; | |
color: {self.fake.hex_color()}; | |
}} | |
""" | |
return f"<style>{css_code}</style>\n{html}" | |
def insert_js(self, html): | |
""" | |
Insert random JavaScript code into the HTML content. | |
:param html: HTML content to insert JavaScript into | |
:return: HTML string with inserted JavaScript | |
""" | |
js_code = f""" | |
function {self.fake.word()}() {{ | |
let {self.fake.word()} = {str(self.fake.random_int(1, 100))}; | |
console.log({self.fake.word()}); | |
}} | |
""" | |
return f"{html}\n<script>{js_code}</script>" |