Photo Scrape Web Data Python

How to Scrape Web Data using Python

This article will walk you through the essentials of web scraping with Python. You’ll learn how to grab data from websites, clean it up, and store it for your own use. We’ll keep it practical, focusing on the tools and techniques that actually get the job done, without any unnecessary jargon or fluff.

Before we dive into the code, it’s important to get a grasp of what web scraping really is and why you might want to do it.

What is Web Scraping?

At its core, web scraping is the process of automatically extracting information from websites. Think of it as having a digital assistant that can visit web pages, read their content, and pull out specific pieces of data you’re interested in. This could be anything from product prices and customer reviews to news articles and statistics.

Why Would You Scrape Data?

People scrape web data for a variety of legitimate reasons. For instance, a small business might want to track competitor pricing to stay competitive. A researcher might need to gather large datasets for analysis. A developer might build a tool that summarizes information from several sources. The possibilities are vast, but it’s always good to remember that responsible scraping is key.

The Ethical and Legal Landscape

This is a crucial point. While web scraping can be incredibly useful, it’s not a free-for-all. You absolutely need to be mindful of the terms of service of the websites you’re scraping. Many sites explicitly forbid scraping. Always look for a robots.txt file (usually found at www.example.com/robots.txt) which indicates which parts of a site web crawlers are allowed to access. Respecting these guidelines and avoiding overwhelming a website with too many requests is paramount. Think of it like visiting someone’s house – you wouldn’t just start rummaging through their belongings.

Even if a website doesn’t explicitly forbid scraping, excessive requests can strain their servers and impact their service for other users. Being respectful and considerate should always be your guiding principle.

If you’re interested in enhancing your web scraping skills using Python, you might find it beneficial to explore related tools and software that can aid in your projects. For instance, you can check out this article on the best free drawing software for digital artists in 2023, which highlights various applications that can help you visualize your data or create compelling graphics for your web scraping results. You can read the article here: Best Free Drawing Software for Digital Artists in 2023.

Preparing Your Python Environment

To start scraping, you’ll need a few tools. Python itself is the foundation, and then you’ll install specific libraries that make the scraping process much smoother.

Installing Python

If you don’t already have Python installed, the first step is to get it. Head over to the official Python website (python.org) and download the latest stable version for your operating system. The installation process is usually straightforward.

Essential Libraries for Scraping

Once Python is set up, you’ll need some libraries. The two main players for basic web scraping are:

  • Requests: This library is fantastic for making HTTP requests. It’s how you’ll actually download the HTML content of a web page.
  • Beautiful Soup (bs4): This library is designed to parse HTML and XML documents. It creates a parse tree from page source code that can be used to extract data easily.

Installing Requests

Open your command prompt or terminal and run:

“`bash

pip install requests

“`

This command tells Python’s package installer, pip, to download and install the requests library.

Installing Beautiful Soup

Similarly, to install Beautiful Soup:

“`bash

pip install beautifulsoup4

“`

You might also need a parser. lxml is a popular and fast one:

“`bash

pip install lxml

“`

Setting Up Your Project Folder

It’s good practice to keep your scraping projects organized. Create a new folder for your project and store your Python scripts (.py files) within it. This helps prevent your projects from becoming a mess.

Fetching Web Page Content

Scrape Web Data Python

The journey begins with getting the raw ingredients – the HTML code of the web page. The requests library makes this surprisingly simple.

Making a GET Request

Every time you type a web address into your browser and hit Enter, your browser sends a GET request to the web server. The requests library allows you to mimic this.

Let’s say we want to get the HTML from a hypothetical website example.com. Your Python script would look something like this:

“`python

import requests

url = ‘http://example.com’ # Replace with the actual URL you want to scrape

try:

response = requests.get(url)

response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx)

html_content = response.text

print(html_content[:500]) # Print the first 500 characters to see what we got

except requests.exceptions.RequestException as e:

print(f”An error occurred: {e}”)

“`

In this snippet:

  • We import the requests library.
  • We define the url we’re interested in.
  • requests.get(url) sends the request and stores the server’s response in the response object.
  • response.raise_for_status() is a handy way to check if the request was successful. If the server returned an error (like a 404 Not Found or 500 Internal Server Error), this line will raise an exception, and our try...except block will catch it, preventing the script from crashing.
  • response.text gives us the content of the response as a string, which is usually the HTML of the page.

Understanding HTTP Status Codes

It’s worth noting that response.raise_for_status() looks at the HTTP status code. Codes in the 200 range (e.g., 200 OK) mean everything went well. Codes in the 400 range (e.g., 404 Not Found, 403 Forbidden) indicate an error on the client’s side (meaning, your request might be malformed, or you don’t have permission). Codes in the 500 range (e.g., 500 Internal Server Error) mean there was a problem on the server’s end.

Handling Headers

Websites often check the User-Agent header sent by your browser. This header tells the server what kind of browser you’re using (e.g., Chrome, Firefox). Some websites block requests that don’t have a legitimate-looking User-Agent.

You can include custom headers in your requests.get() call:

“`python

import requests

url = ‘http://example.com’

headers = {

‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36’

}

try:

response = requests.get(url, headers=headers)

response.raise_for_status()

html_content = response.text

print(“Successfully fetched content with custom headers.”)

except requests.exceptions.RequestException as e:

print(f”An error occurred: {e}”)

“`

By setting a common browser User-Agent, you make your scraping request look more like a regular user visiting the site, which can help avoid being blocked.

Parsing HTML with Beautiful Soup

Photo Scrape Web Data Python

Once you have the HTML content, you need to make sense of it. Beautiful Soup is your go-to tool for navigating and extracting data from this HTML structure.

Creating a Beautiful Soup Object

Beautiful Soup takes the raw HTML string and turns it into a navigable object.

“`python

from bs4 import BeautifulSoup

html_content is the string you got from requests.get(url).text

soup = BeautifulSoup(html_content, ‘lxml’) # ‘lxml’ is the parser recommended earlier

“`

This line creates a BeautifulSoup object named soup. The first argument is the HTML content, and the second argument specifies the parser to use.

Navigating the HTML Tree

Beautiful Soup treats the HTML as a tree structure. You can traverse this tree to find the specific elements you need.

Finding Elements by Tag Name

The most basic way to find elements is by their HTML tag (like

for paragraph,

for heading, for link).

“`python

Find the first tag</h1> <p>title_tag = soup.find(‘title’)</p> <p>if title_tag:</p> <p>print(f”Page Title: {title_tag.text}”)</p> <h1>Find the first </p> <h1> tag</h1> <p>h1_tag = soup.find(‘h1’)</p> <p>if h1_tag:</p> <p>print(f”First H1: {h1_tag.text}”)</p> <p>“`</p> <ul> <li><code>soup.find('tag_name')</code> returns the <em>first</em> occurrence of that tag.</li> <li><code>.text</code> is an attribute that extracts the text content within a tag, stripping out any nested HTML tags.</li> </ul> <h4>Finding All Occurrences of a Tag</h4> <p>If a page has multiple elements of the same type (like many paragraphs or links), you’ll use <code>find_all()</code>.</p> <p>“`python</p> <h1>Find all </p> <p> tags</h1> <p>all_paragraphs = soup.find_all(‘p’)</p> <p>print(f”Found {len(all_paragraphs)} paragraphs.”)</p> <h1>Print the text of the first 5 paragraphs if they exist</h1> <p>for i, p in enumerate(all_paragraphs[:5]):</p> <p>print(f”Paragraph {i+1}: {p.text.strip()}”) # .strip() removes leading/trailing whitespace</p> <p>“`</p> <h3>Filtering by Attributes</h3> <p>HTML elements often have attributes like <code>class</code> or <code>id</code> that uniquely identify them. Beautiful Soup allows you to search based on these attributes.</p> <h4>Finding by Class Name</h4> <p>This is extremely common, as developers often use CSS classes to style elements.</p> <p>“`python</p> <h1>Find all elements with the class ‘product-title’</h1> <p>product_titles = soup.find_all(class_=’product-title’) # Note the underscore after ‘class’</p> <p>for title in product_titles:</p> <p>print(title.text.strip())</p> <p>“`</p> <h4>Finding by ID</h4> <p>IDs should be unique on a page.</p> <p>“`python</p> <h1>Find the element with the ID ‘main-content’</h1> <p>main_content = soup.find(id=’main-content’)</p> <p>if main_content:</p> <p>print(“Found main content area.”)</p> <h1>You can then search within this specific section</h1> <h1>for example: find all paragraphs within main_content</h1> <p>paragraphs_in_main = main_content.find_all(‘p’)</p> <p>for p in paragraphs_in_main:</p> <p>print(p.text.strip())</p> <p>“`</p> <h4>Combining Tag and Attribute Filters</h4> <p>You can be very specific:</p> <p>“`python</p> <h1>Find all ‘a’ (link) tags that have a ‘href’ attribute starting with ‘/products/’</h1> <p>product_links = soup.find_all(‘a’, href=lambda href: href and href.startswith(‘/products/’))</p> <p>for link in product_links:</p> <p>print(link.get(‘href’)) # .get(‘attribute_name’) to get the value of an attribute</p> <p>“`</p> <h3>Extracting Data from Links</h3> <p>Links (<code><a></code> tags) are particularly useful because they often contain <code>href</code> attributes that point to other pages or resources.</p> <p>“`python</p> <h1>Find all links on the page</h1> <p>all_links = soup.find_all(‘a’)</p> <p>for link in all_links:</p> <p>href = link.get(‘href’)</p> <p>link_text = link.text.strip()</p> <p>if href: # Make sure href is not None</p> <p>print(f”Text: {link_text}, URL: {href}”)</p> <p>“`</p> <p>The <code>.get('href')</code> method safely retrieves the <code>href</code> attribute. If the attribute doesn’t exist, it returns <code>None</code> instead of causing an error.</p> <p>If you’re interested in enhancing your web scraping skills with Python, you might also want to explore how to select the right VPS hosting provider for your projects. A reliable VPS can significantly improve your scraping efficiency and data management. For more insights on this topic, check out this informative article on <a href="https://enicomp.com/how-to-choose-your-vps-hosting-provider-2023/">choosing your VPS hosting provider</a>.</p> <h2>Extracting Specific Data Fields</h2> <p><?xml encoding="UTF-8"></p> <table style="width:100%;border-collapse:collapse;border:2px solid #f2f2f2"> <tr style="display:table-row;vertical-align:inherit;border-color:inherit;line-height:40px"> <th style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">Step</th> <th style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">Description</th> </tr> <tr style="display:table-row;vertical-align:inherit;border-color:inherit;line-height:40px"> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">1</td> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">Identify the website to scrape</td> </tr> <tr style="display:table-row;vertical-align:inherit;border-color:inherit;line-height:40px"> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">2</td> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">Inspect the website’s HTML structure</td> </tr> <tr style="display:table-row;vertical-align:inherit;border-color:inherit;line-height:40px"> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">3</td> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">Choose a Python library for web scraping (e.g. BeautifulSoup, Scrapy)</td> </tr> <tr style="display:table-row;vertical-align:inherit;border-color:inherit;line-height:40px"> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">4</td> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">Write Python code to extract data from the website</td> </tr> <tr style="display:table-row;vertical-align:inherit;border-color:inherit;line-height:40px"> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">5</td> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">Handle data parsing and cleaning</td> </tr> <tr style="display:table-row;vertical-align:inherit;border-color:inherit;line-height:40px"> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">6</td> <td style="padding:12px;text-align:left;border-bottom:1px solid #e5e7eb;line-height:40px">Store the scraped data in a desired format (e.g. CSV, JSON)</td> </tr> </table> <p>Now that you can fetch and parse HTML, the next step is to extract the specific pieces of information you need. This involves carefully inspecting the HTML of the target website.</p> <h3>Inspecting Website HTML</h3> <p>This is arguably the most critical skill in web scraping. You need to understand how the data you want is structured within the HTML.</p> <h4>Using Browser Developer Tools</h4> <p>Every modern browser (Chrome, Firefox, Edge, Safari) comes with built-in Developer Tools.</p> <ol> <li><strong>Open the website</strong> you want to scrape in your browser.</li> <li><strong>Right-click</strong> on the specific piece of data you’re interested in (e.g., a product name, a price).</li> <li>Select <strong>“Inspect”</strong> or <strong>“Inspect Element”</strong>.</li> </ol> <p>This will open the Developer Tools, highlighting the HTML code for that element. You can then see its tag name, its classes, its IDs, and how it’s nested within the overall page structure. This is your blueprint for writing your Beautiful Soup selectors.</p> <h3>Targeting Data with CSS Selectors</h3> <p>Beautiful Soup supports CSS selectors, which are a powerful and concise way to select elements. You can use the <code>.select()</code> method for this.</p> <h4>Basic CSS Selectors</h4> <ul> <li><code>tagname</code>: Selects all elements with that tag name (e.g., <code>p</code>, <code>h2</code>).</li> <li><code>.classname</code>: Selects all elements with that class name (e.g., <code>.price</code>, <code>.product-description</code>).</li> <li><code>#idname</code>: Selects the element with that ID (e.g., <code>#main-nav</code>).</li> </ul> <h4>More Advanced Selectors</h4> <ul> <li><code>parent > child</code>: Selects direct children.</li> <li><code>ancestor descendant</code>: Selects descendants (any element nested within an ancestor).</li> <li><code>element1, element2</code>: Selects elements meeting either selector.</li> <li><code>element[attribute]</code>: Selects elements with a specific attribute.</li> <li><code>element[attribute="value"]</code>: Selects elements with a specific attribute and value.</li> </ul> <p>“`python</p> <h1>Using CSS selectors to find product names and prices</h1> <h1>Let’s assume product titles are inIf you’re interested in enhancing your web scraping skills with Python, you might also want to explore the best resources available for software testing. A related article that could provide valuable insights is <a href="https://enicomp.com/best-software-testing-books/">a comprehensive list of the best software testing books</a>. These books can help you understand the principles of testing, which is essential when you are scraping data to ensure its accuracy and reliability.</p> <h2> tags with class ‘product-item-title’</h1> <h1>and prices are in <span> tags with class ‘product-price’</h1> <p>product_elements = soup.select(‘div.product-item’) # Find all product containers</p> <p>for product in product_elements:</p> <p>title_tag = product.select_one(‘h2.product-item-title’) # select_one gets the first match</p> <p>price_tag = product.select_one(‘span.product-price’)</p> <p>product_name = title_tag.text.strip() if title_tag else “N/A”</p> <p>price = price_tag.text.strip() if price_tag else “N/A”</p> <p>print(f”Product: {product_name}, Price: {price}”)</p> <p>“`</p> <p>The <code>select_one()</code> method is similar to <code>find()</code>, returning only the first match for a given selector.</p> <h3>Handling Missing Data Gracefully</h3> <p></h2> <p><iframe data-placeholder-image="https://enicomp.com/wp-content/uploads/complianz/placeholders/youtubeWif4zLlruqo-maxresdefault.webp" data-category="marketing" data-service="youtube" class="cmplz-placeholder-element cmplz-iframe cmplz-iframe-styles cmplz-video " data-cmplz-target="src" data-src-cmplz="https://www.youtube.com/embed/Wif4zLlruqo" width="740" height="416" style="display: block;margin: 0 auto;" src="about:blank" frameBorder="0"><br /> </iframe></p> <p>Not all elements will be present on every page, or even on the same page if the structure varies slightly. Your scraping code should be robust enough to handle this without crashing.</p> <p>“`python</p> <h1>Example: Safely extracting a product description</h1> <p>description_tag = soup.select_one(‘div.product-details .description’) # Nested selector</p> <p>if description_tag:</p> <p>product_description = description_tag.text.strip()</p> <p>else:</p> <p>product_description = “No description available.”</p> <p>print(f”Description: {product_description}”)</p> <p>“`</p> <p>By checking if <code>description_tag</code> is not <code>None</code> before accessing its <code>.text</code> attribute, you prevent errors.</p> <h2>Data Cleaning and Structuring</h2> <p>Raw scraped data is rarely in a perfect format. You’ll often need to clean it up before you can use it effectively.</p> <h3>Removing Unwanted Characters and Whitespace</h3> <p>HTML can be messy. You might have extra spaces, newlines, or specific characters you don’t want.</p> <ul> <li><code>.strip()</code>: Removes leading and trailing whitespace.</li> <li><code>.replace('old', 'new')</code>: Replaces all occurrences of a substring.</li> <li>Regular expressions (<code>re</code> module): For more complex pattern matching and replacement.</li> </ul> <p>“`python</p> <p>import re</p> <p>dirty_string = ” \n $19.99 \n “</p> <p>cleaned_string = dirty_string.strip() # ” $19.99 “</p> <p>cleaned_string = cleaned_string.replace(‘$’, ”) # ” 19.99 “</p> <p>cleaned_string = cleaned_string.strip() # “19.99”</p> <h1>Using regex to remove non-digit and non-decimal point characters</h1> <p>price_string = “$ 19.99 USD”</p> <p>numeric_price = re.sub(r'[^\d.]’, ”, price_string) # “19.99”</p> <p>“`</p> <h3>Converting Data Types</h3> <p>Scraped data is often read as strings. You’ll need to convert it to appropriate types like integers or floats for calculations or comparisons.</p> <p>“`python</p> <p>price_str = “19.99”</p> <p>product_count_str = “150”</p> <p>try:</p> <p>price_float = float(price_str)</p> <p>product_count_int = int(product_count_str)</p> <p>print(f”Price as float: {price_float:.2f}”)</p> <p>print(f”Count as integer: {product_count_int}”)</p> <p>except ValueError as e:</p> <p>print(f”Error converting data: {e}”)</p> <p>“`</p> <h3>Handling Dates and Times</h3> <p>Dates and times can come in many formats. The <code>datetime</code> module in Python is excellent for parsing and manipulating them.</p> <p>“`python</p> <p>from datetime import datetime</p> <p>date_str_american = “10/26/2023”</p> <p>date_str_european = “26-10-2023”</p> <p>try:</p> <h1>“%m/%d/%Y” matches October 26, 2023</h1> <p>date_obj_american = datetime.strptime(date_str_american, “%m/%d/%Y”)</p> <p>print(f”Parsed American date: {date_obj_american.strftime(‘%Y-%m-%d’)}”) # Output as YYYY-MM-DD</p> <h1>“%d-%m-%Y” matches 26th October, 2023</h1> <p>date_obj_european = datetime.strptime(date_str_european, “%d-%m-%Y”)</p> <p>print(f”Parsed European date: {date_obj_european.strftime(‘%Y-%m-%d’)}”)</p> <p>except ValueError as e:</p> <p>print(f”Error parsing date: {e}”)</p> <p>“`</p> <h3>Structuring Data</h3> <p>Once cleaned, you’ll want to store your data in a well-organized format. A list of dictionaries is a very common and useful structure. Each dictionary represents one item (e.g., one product), and the keys are the attribute names (e.g., ‘name’, ‘price’).</p> <p>“`python</p> <p>scraped_products = [] <h1>Assuming you’ve extracted product_name and price for each product</h1> <p>product_name = “Gadget X”</p> <p>price = 19.99</p> <p>scraped_products.append({</p> <p>‘name’: product_name,</p> <p>‘price’: price</p> <p>})</p> <h1>When you have more products:</h1> <p>another_product_name = “Widget Y”</p> <p>another_price = 29.50</p> <p>scraped_products.append({</p> <p>‘name’: another_product_name,</p> <p>‘price’: another_price</p> <p>})</p> <p>print(scraped_products)</p> <p>“`</p> <h2>Storing Your Scraped Data</h2> <p>Having your data in a Python list of dictionaries is great, but you’ll likely want to save it persistently. Here are a few common ways to do this.</p> <h3>Saving to a CSV File</h3> <p>Comma-Separated Values (CSV) files are widely compatible and easy to work with in spreadsheets like Excel or Google Sheets.</p> <p>“`python</p> <p>import csv</p> <p>fieldnames = [‘name’, ‘price’] # The keys from your dictionaries</p> <p>with open(‘products.csv’, ‘w’, newline=”, encoding=’utf-8′) as csvfile:</p> <p>writer = csv.DictWriter(csvfile, fieldnames=fieldnames)</p> <p>writer.writeheader() # Writes the ‘name’, ‘price’ row</p> <p>for product_data in scraped_products:</p> <p>writer.writerow(product_data)</p> <p>print(“Data saved to products.csv”)</p> <p>“`</p> <ul> <li><code>newline=''</code>: Important for preventing extra blank rows in some operating systems.</li> <li><code>encoding='utf-8'</code>: Good practice for handling a wide range of characters.</li> <li><code>csv.DictWriter</code>: Writes dictionaries directly, mapping keys to CSV columns.</li> </ul> <h3>Storing in a JSON File</h3> <p>JavaScript Object Notation (JSON) is another popular format, especially for data that might be transmitted or used by web applications.</p> <p>“`python</p> <p>import json</p> <p>with open(‘products.json’, ‘w’, encoding=’utf-8′) as jsonfile:</p> <p>json.dump(scraped_products, jsonfile, indent=4, ensure_ascii=False)</p> <p>print(“Data saved to products.json”)</p> <p>“`</p> <ul> <li><code>indent=4</code>: Makes the JSON file human-readable with nice indentation.</li> <li><code>ensure_ascii=False</code>: Allows non-ASCII characters (like <code>é</code> or <code>ñ</code>) to be written directly, rather than as escape sequences.</li> </ul> <h3>Saving to a Database (Briefly)</h3> <p>For larger or more complex datasets, a database is often the best solution. Python has excellent libraries for interacting with various databases.</p> <ul> <li><strong>SQLite:</strong> A lightweight, file-based database that’s great for smaller projects. Python’s <code>sqlite3</code> module is built-in.</li> <li><strong>PostgreSQL, MySQL, etc.:</strong> For more robust, client-server databases, you’d use libraries like <code>psycopg2</code> (for PostgreSQL) or <code>mysql.connector</code> (for MySQL).</li> </ul> <p>The general process involves:</p> <ol> <li>Connecting to the database.</li> <li>Creating tables if they don’t exist.</li> <li>Executing <code>INSERT</code> statements to add your scraped data.</li> </ol> <p>This is a more advanced topic, but it’s the logical next step for serious data collection.</p> <h2>Advanced Considerations and Best Practices</h2> <p>As you get more comfortable, you’ll encounter more complex scenarios and need to refine your approach.</p> <h3>Handling Pagination</h3> <p>Most websites display data across multiple pages. You’ll need to find the “next page” link and loop through all pages.</p> <ol> <li><strong>Inspect the “Next” button:</strong> Find its HTML structure and any associated link (e.g., <code><a></code> tag with <code>rel="next"</code> or a specific class).</li> <li><strong>Extract the URL:</strong> Get the <code>href</code> attribute of the “next” link.</li> <li><strong>Construct the full URL:</strong> If the <code>href</code> is relative (e.g., <code>/page/2</code>), you’ll need to combine it with the base URL of the site. Python’s <code>urljoin</code> from the <code>urllib.parse</code> module is helpful here.</li> <li><strong>Loop:</strong> Repeat the process of fetching, parsing, and extracting data until there’s no “next” link.</li> </ol> <h3>Rate Limiting and Delays</h3> <p>To avoid overwhelming the server and to be a good web citizen, introduce delays between your requests.</p> <p>“`python</p> <p>import time</p> <h1>… inside your loop for fetching pages or items …</h1> <p>time.sleep(2) # Pause for 2 seconds</p> <p>“`</p> <p>A pause of 1-5 seconds is common. More aggressive scraping might require more sophisticated strategies to avoid detection.</p> <h3>Using Proxies</h3> <p>If you’re making a very large number of requests, or if you’re concerned about your IP address being blocked, you can use proxies. Proxies act as intermediaries, so the website sees the proxy’s IP address instead of yours. Managing proxies can be complex and often involves paid services.</p> <h3>Handling JavaScript-Rendered Content</h3> <p>Many modern websites load content dynamically using JavaScript after the initial HTML page has loaded. The <code>requests</code> library only fetches the initial HTML. For sites reliant on JavaScript, you’ll need tools that can execute JavaScript.</p> <ul> <li><strong>Selenium:</strong> This is a powerful browser automation tool that can control a real web browser (like Chrome or Firefox). It can click buttons, fill forms, and wait for JavaScript to render content. However, it’s slower and more resource-intensive than <code>requests</code> + Beautiful Soup.</li> </ul> <p>“`python</p> <h1>Example snippet using Selenium</h1> <p>from selenium import webdriver</p> <p>from selenium.webdriver.common.by import By</p> <p>driver = webdriver.Chrome() # Or webdriver.Firefox() etc.</p> <p>driver.get(“http://example.com/dynamic-page”)</p> <h1>Wait for an element to be present (optional but recommended)</h1> <p>from selenium.webdriver.support.ui import WebDriverWait</p> <p>from selenium.webdriver.support import expected_conditions as EC</p> <p>element = WebDriverWait(driver, 10).until(</p> <p>EC.presence_of_element_located((By.ID, “some-dynamic-content”))</p> <p>)</p> <p>html_content = driver.page_source # Get the rendered HTML</p> <p>driver.quit() # Close the browser</p> <h1>Now you can pass html_content to Beautiful Soup</h1> <p>soup = BeautifulSoup(html_content, ‘lxml’)</p> <p>“`</p> <h3>Building Robust Scrapers</h3> <ul> <li><strong>Error Handling:</strong> Use <code>try-except</code> blocks extensively for network errors, parsing errors, and missing data.</li> <li><strong>Logging:</strong> Instead of just printing errors, use Python’s <code>logging</code> module to record errors and important events to a file. This is invaluable for debugging long-running scripts.</li> <li><strong>Configuration:</strong> Store URLs, user agents, and other settings in a separate configuration file (like YAML or JSON) rather than hardcoding them.</li> <li><strong>Modularity:</strong> Break your code into functions for fetching, parsing, cleaning, and saving. This makes your scraper easier to read, test, and maintain.</li> </ul> <p>By following these practical steps and best practices, you can effectively scrape web data using Python. Remember to always scrape responsibly and ethically.</p> <p></p> <h2>FAQs</h2> <p></p> <h3>What is web scraping?</h3> <p>Web scraping is the process of extracting data from websites. It involves using a program to access and gather information from web pages, which can then be used for various purposes such as analysis, research, or data collection.</p> <h3>Why use Python for web scraping?</h3> <p>Python is a popular programming language for web scraping due to its simplicity, readability, and a wide range of libraries and tools specifically designed for web scraping, such as BeautifulSoup and Scrapy.</p> <h3>What are the common challenges in web scraping?</h3> <p>Common challenges in web scraping include handling dynamic content, dealing with anti-scraping measures, ensuring ethical and legal compliance, and managing the volume of data being scraped.</p> <h3>What are the ethical considerations when web scraping?</h3> <p>Ethical considerations in web scraping include respecting website terms of service, not overloading servers with requests, obtaining consent when necessary, and ensuring that the data being scraped is used responsibly and in compliance with privacy laws.</p> <h3>What are some best practices for web scraping using Python?</h3> <p>Best practices for web scraping using Python include understanding and respecting website policies, using appropriate libraries and tools, handling errors and exceptions gracefully, and being mindful of the impact of scraping on the target website.</p> <div class="clear"></div> </div> <footer class="entry-meta"> <div class="entry-tax"><span>Tags: No tags</span></div> <div class="aux-single-post-share"> <div class="aux-tooltip-socials aux-tooltip-dark aux-socials aux-icon-left aux-medium aux-tooltip-social-no-text" > <span class="aux-icon auxicon-share" ></span> </div> </div> </footer> </div> <nav class="aux-next-prev-posts nav-skin-thumb-arrow"> <section class="np-prev-section has-nav-thumb" > <a href="https://enicomp.com/3d-printers-for-home-use-bambu-lab-speed/"> <div class="np-arrow"> <div class="aux-hover-slide aux-arrow-nav aux-outline"> <span class="aux-svg-arrow aux-medium-left"></span> <span class="aux-hover-arrow aux-svg-arrow aux-medium-left"></span> </div> <img width="80" height="80" src="https://enicomp.com/wp-content/uploads/2026/03/image-719-80x80.jpg" class="auxin-attachment auxin-featured-image attachment-80x80" alt="Photo 3D Printers" /> </div> <p class="np-nav-text">Previous Post</p> <h4 class="np-title">3D Printers for Home Use: Bambu Lab Speed</h4> </a> </section> <section class="np-next-section has-nav-thumb" > <a href="https://enicomp.com/spotify-hifi-will-lossless-audio-ever-launch/"> <div class="np-arrow"> <div class="aux-arrow-nav aux-hover-slide aux-outline"> <span class="aux-svg-arrow aux-medium-right"></span> <span class="aux-hover-arrow aux-svg-arrow aux-medium-right"></span> </div> <img width="80" height="80" src="https://enicomp.com/wp-content/uploads/2026/03/image-723-80x80.jpg" class="auxin-attachment auxin-featured-image attachment-80x80" alt="Photo Spotify HiFi" /> </div> <p class="np-nav-text">Next Post</p> <h4 class="np-title">Spotify HiFi: Will Lossless Audio Ever Launch?</h4> </a> </section> </nav> </article> </div><!-- end content --> </div><!-- end primary --> <aside class="aux-sidebar aux-sidebar-primary"> <div class="sidebar-inner"> <div class="sidebar-content"> <div class="aux-widget-area"><section id="block-4" class=" aux-open widget-container widget_block"> <h2 class="wp-block-heading">POPULAR</h2> </section><section id="block-33" class=" aux-open widget-container widget_block"> <h2 class="wp-block-heading">CATEGORIES</h2> </section><section id="categories-3" class=" aux-open widget-container widget_categories"><h3 class="widget-title">Categories</h3> <ul> <li class="cat-item cat-item-162"><a href="https://enicomp.com/category/5g-wireless-communication-technologies/">5G, Wireless & Communication Technologies</a> (177) <ul class='children'> <li class="cat-item cat-item-199"><a href="https://enicomp.com/category/5g-wireless-communication-technologies/5g-innovations/">5G Innovations</a> (13) </li> <li class="cat-item cat-item-200"><a href="https://enicomp.com/category/5g-wireless-communication-technologies/wireless-communication-trends/">Wireless Communication Trends</a> (13) </li> </ul> </li> <li class="cat-item cat-item-34"><a href="https://enicomp.com/category/article/">Article</a> (343) </li> <li class="cat-item cat-item-134"><a href="https://enicomp.com/category/augmented-reality-virtual-reality/">Augmented Reality & Virtual Reality</a> (671) <ul class='children'> <li class="cat-item cat-item-178"><a href="https://enicomp.com/category/augmented-reality-virtual-reality/metaverse/">Metaverse</a> (155) </li> <li class="cat-item cat-item-177"><a href="https://enicomp.com/category/augmented-reality-virtual-reality/virtual-workplaces/">Virtual Workplaces</a> (35) </li> <li class="cat-item cat-item-179"><a href="https://enicomp.com/category/augmented-reality-virtual-reality/vr-ar-games/">VR & AR Games</a> (34) </li> </ul> </li> <li class="cat-item cat-item-132"><a href="https://enicomp.com/category/cybersecurity-privacy/">Cybersecurity & Tech Ethics</a> (670) <ul class='children'> <li class="cat-item cat-item-185"><a href="https://enicomp.com/category/cybersecurity-privacy/cyber-threats-solutions/">Cyber Threats & Solutions</a> (3) </li> <li class="cat-item cat-item-184"><a href="https://enicomp.com/category/cybersecurity-privacy/ethics-in-ai/">Ethics in AI</a> (33) </li> <li class="cat-item cat-item-183"><a href="https://enicomp.com/category/cybersecurity-privacy/privacy-protection/">Privacy Protection</a> (32) </li> </ul> </li> <li class="cat-item cat-item-164"><a href="https://enicomp.com/category/drones-robotics-automation/">Drones, Robotics & Automation</a> (373) <ul class='children'> <li class="cat-item cat-item-206"><a href="https://enicomp.com/category/drones-robotics-automation/automation-in-industry/">Automation in Industry</a> (33) </li> <li class="cat-item cat-item-204"><a href="https://enicomp.com/category/drones-robotics-automation/consumer-drones/">Consumer Drones</a> (33) </li> <li class="cat-item cat-item-205"><a href="https://enicomp.com/category/drones-robotics-automation/industrial-robotics/">Industrial Robotics</a> (33) </li> </ul> </li> <li class="cat-item cat-item-161"><a href="https://enicomp.com/category/edtech-educational-innovations/">EdTech & Educational Innovations</a> (232) <ul class='children'> <li class="cat-item cat-item-203"><a href="https://enicomp.com/category/edtech-educational-innovations/edtech-tools/">EdTech Tools</a> (18) </li> <li class="cat-item cat-item-201"><a href="https://enicomp.com/category/edtech-educational-innovations/online-learning-platforms/">Online Learning Platforms</a> (4) </li> <li class="cat-item cat-item-202"><a href="https://enicomp.com/category/edtech-educational-innovations/virtual-classrooms/">Virtual Classrooms</a> (34) </li> </ul> </li> <li class="cat-item cat-item-165"><a href="https://enicomp.com/category/emerging-technologies/">Emerging Technologies</a> (1,383) <ul class='children'> <li class="cat-item cat-item-52"><a href="https://enicomp.com/category/emerging-technologies/artificial-intelligence/">Artificial intelligence & Machine Learning</a> (448) </li> <li class="cat-item cat-item-133"><a href="https://enicomp.com/category/emerging-technologies/blockchain-cryptocurrencies/">Blockchain & Cryptocurrencies</a> (415) </li> <li class="cat-item cat-item-138"><a href="https://enicomp.com/category/emerging-technologies/general-tech-innovations-emerging-trends/">General Tech Innovations & Emerging Trends</a> (159) </li> <li class="cat-item cat-item-158"><a href="https://enicomp.com/category/emerging-technologies/quantum-computing-emerging-technologies/">Quantum Computing & Emerging Technologies</a> (128) </li> <li class="cat-item cat-item-38"><a href="https://enicomp.com/category/emerging-technologies/tech/">Tech</a> (200) </li> </ul> </li> <li class="cat-item cat-item-157"><a href="https://enicomp.com/category/fintech-digital-finance/">FinTech & Digital Finance</a> (334) <ul class='children'> <li class="cat-item cat-item-181"><a href="https://enicomp.com/category/fintech-digital-finance/defi-blockchain-finance/">DeFi & Blockchain Finance</a> (5) </li> <li class="cat-item cat-item-182"><a href="https://enicomp.com/category/fintech-digital-finance/mobile-banking/">Mobile Banking</a> (3) </li> </ul> </li> <li class="cat-item cat-item-14"><a href="https://enicomp.com/category/frontpage-article/">Frontpage Article</a> (1) </li> <li class="cat-item cat-item-160"><a href="https://enicomp.com/category/gaming-interactive-entertainment/">Gaming & Interactive Entertainment</a> (268) <ul class='children'> <li class="cat-item cat-item-192"><a href="https://enicomp.com/category/gaming-interactive-entertainment/esports-online-competitions/">eSports & Online Competitions</a> (3) </li> <li class="cat-item cat-item-190"><a href="https://enicomp.com/category/gaming-interactive-entertainment/game-reviews/">Game Reviews</a> (3) </li> </ul> </li> <li class="cat-item cat-item-167"><a href="https://enicomp.com/category/health-biotech-innovations/">Health & Biotech Innovations</a> (490) <ul class='children'> <li class="cat-item cat-item-168"><a href="https://enicomp.com/category/health-biotech-innovations/ai-in-healthcare/">AI in Healthcare</a> (3) </li> <li class="cat-item cat-item-169"><a href="https://enicomp.com/category/health-biotech-innovations/biotech-trends/">Biotech Trends</a> (4) </li> <li class="cat-item cat-item-137"><a href="https://enicomp.com/category/health-biotech-innovations/wearable-technology-health/">Wearable Health Devices</a> (393) </li> </ul> </li> <li class="cat-item cat-item-16"><a href="https://enicomp.com/category/news/">News</a> (97) </li> <li class="cat-item cat-item-15"><a href="https://enicomp.com/category/reviews/">Reviews</a> (122) </li> <li class="cat-item cat-item-170"><a href="https://enicomp.com/category/smart-home-iot/">Smart Home & IoT</a> (338) <ul class='children'> <li class="cat-item cat-item-172"><a href="https://enicomp.com/category/smart-home-iot/connected-devices/">Connected Devices</a> (3) </li> <li class="cat-item cat-item-171"><a href="https://enicomp.com/category/smart-home-iot/home-automation/">Home Automation</a> (4) </li> <li class="cat-item cat-item-173"><a href="https://enicomp.com/category/smart-home-iot/robotics-for-home/">Robotics for Home</a> (33) </li> <li class="cat-item cat-item-37"><a href="https://enicomp.com/category/smart-home-iot/smartphone/">SmartPhone</a> (48) </li> </ul> </li> <li class="cat-item cat-item-156"><a href="https://enicomp.com/category/space-aerospace-technologies/">Space & Aerospace Technologies</a> (230) <ul class='children'> <li class="cat-item cat-item-198"><a href="https://enicomp.com/category/space-aerospace-technologies/aerospace-innovations/">Aerospace Innovations</a> (4) </li> <li class="cat-item cat-item-197"><a href="https://enicomp.com/category/space-aerospace-technologies/commercial-spaceflight/">Commercial Spaceflight</a> (3) </li> <li class="cat-item cat-item-196"><a href="https://enicomp.com/category/space-aerospace-technologies/space-exploration/">Space Exploration</a> (62) </li> </ul> </li> <li class="cat-item cat-item-135"><a href="https://enicomp.com/category/sustainable-green-technology/">Sustainable Technology</a> (541) <ul class='children'> <li class="cat-item cat-item-175"><a href="https://enicomp.com/category/sustainable-green-technology/electric-vehicles-mobility/">Electric Vehicles & Mobility</a> (4) </li> <li class="cat-item cat-item-176"><a href="https://enicomp.com/category/sustainable-green-technology/energy-efficiency/">Energy Efficiency</a> (3) </li> <li class="cat-item cat-item-174"><a href="https://enicomp.com/category/sustainable-green-technology/green-tech-innovations/">Green Tech Innovations</a> (156) </li> </ul> </li> <li class="cat-item cat-item-159"><a href="https://enicomp.com/category/tech-careers-jobs/">Tech Careers & Jobs</a> (226) <ul class='children'> <li class="cat-item cat-item-194"><a href="https://enicomp.com/category/tech-careers-jobs/career-paths-in-tech/">Career Paths in Tech</a> (5) </li> <li class="cat-item cat-item-195"><a href="https://enicomp.com/category/tech-careers-jobs/remote-work-trends/">Remote Work Trends</a> (3) </li> <li class="cat-item cat-item-193"><a href="https://enicomp.com/category/tech-careers-jobs/skills-for-tech-jobs/">Skills for Tech Jobs</a> (3) </li> </ul> </li> <li class="cat-item cat-item-186"><a href="https://enicomp.com/category/tech-guides-tutorials/">Tech Guides & Tutorials</a> (786) <ul class='children'> <li class="cat-item cat-item-188"><a href="https://enicomp.com/category/tech-guides-tutorials/diy-tech-projects/">DIY Tech Projects</a> (3) </li> <li class="cat-item cat-item-187"><a href="https://enicomp.com/category/tech-guides-tutorials/getting-started-with-tech/">Getting Started with Tech</a> (60) </li> <li class="cat-item cat-item-39"><a href="https://enicomp.com/category/tech-guides-tutorials/laptop-pc/">Laptop & PC</a> (58) </li> <li class="cat-item cat-item-136"><a href="https://enicomp.com/category/tech-guides-tutorials/productivity-everyday-tech-tips/">Productivity & Everyday Tech Tips</a> (209) </li> <li class="cat-item cat-item-35"><a href="https://enicomp.com/category/tech-guides-tutorials/social-media/">Social Media</a> (64) </li> <li class="cat-item cat-item-103"><a href="https://enicomp.com/category/tech-guides-tutorials/software/">Software</a> (194) </li> <li class="cat-item cat-item-189"><a href="https://enicomp.com/category/tech-guides-tutorials/software-how-to/">Software How-to</a> (3) </li> </ul> </li> <li class="cat-item cat-item-1"><a href="https://enicomp.com/category/uncategorized/">Uncategorized</a> (146) </li> </ul> </section><section id="block-39" class=" aux-open widget-container widget_block"><script type="text/rocketlazyloadscript" async data-rocket-src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1483166631165229" crossorigin="anonymous"></script> <!-- Vertical1 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-1483166631165229" data-ad-slot="2223016924" data-ad-format="auto" data-full-width-responsive="true"></ins> <script type="text/rocketlazyloadscript"> (adsbygoogle = window.adsbygoogle || []).push({}); </script></section><section id="block-40" class=" aux-open widget-container widget_block"><script type="text/rocketlazyloadscript" async data-rocket-src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1483166631165229" crossorigin="anonymous"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-1483166631165229" data-ad-slot="3324345608"></ins> <script type="text/rocketlazyloadscript"> (adsbygoogle = window.adsbygoogle || []).push({}); </script></section></div> </div><!-- end sidebar-content --> </div><!-- end sidebar-inner --> </aside><!-- end primary siderbar --> </div><!-- end container --> </div><!-- end wrapper --> </main><!-- end main --> <footer class="aux-elementor-footer" itemscope="itemscope" itemtype="https://schema.org/WPFooter" role="contentinfo" > <div data-rocket-location-hash="4843edb510fe93d21711c27a796500ba" class="aux-wrapper"> <footer data-elementor-type="footer" data-elementor-id="3335" class="elementor elementor-3335" data-elementor-post-type="elementor_library"> <section class="elementor-section elementor-top-section elementor-element elementor-element-b3923f6 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="b3923f6" data-element_type="section" data-e-type="section"> <div class="elementor-container elementor-column-gap-no"> <div class="aux-parallax-section elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-695bb13" data-id="695bb13" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-68ea3fd elementor-widget elementor-widget-aux_simple_svg" data-id="68ea3fd" data-element_type="widget" data-e-type="widget" data-widget_type="aux_simple_svg.default"> <div class="aux-widget-container aux-simple-svg-container"> <div class="aux-widget-container-inner"> <div class="aux-the-svg"><img width="1042" height="413" src="https://enicomp.com/wp-content/uploads/2021/10/Dot_Pattern-1.svg" title="demo-attachment-2696-Dot_Pattern-1" alt="demo-attachment-2696-Dot_Pattern-1" loading="lazy" /></div> </div> </div> </div> </div> </div> </div> </section> <section class="elementor-section elementor-top-section elementor-element elementor-element-590f982 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="590f982" data-element_type="section" data-e-type="section"> <div class="elementor-container elementor-column-gap-no"> <div class="aux-parallax-section elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a2c72db" data-id="a2c72db" data-element_type="column" data-e-type="column" data-settings="{"background_background":"classic"}"> <div class="elementor-widget-wrap elementor-element-populated"> <section class="elementor-section elementor-inner-section elementor-element elementor-element-03878a4 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="03878a4" data-element_type="section" data-e-type="section"> <div class="elementor-container elementor-column-gap-no"> <div class="aux-parallax-section elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-90b1f6e" data-id="90b1f6e" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-6a26d26 aux-appear-watch-animation aux-slide-from-bot elementor-widget elementor-widget-aux_modern_heading" data-id="6a26d26" data-element_type="widget" data-e-type="widget" data-widget_type="aux_modern_heading.default"> <section class="aux-widget-modern-heading"> <div class="aux-widget-inner"><h2 class="aux-modern-heading-primary">Enicomp Media Newsletter</h2><div class="aux-modern-heading-description"><p>Get The Latest Technology, Innovations And Companys News Delivered Right To Your Inbox.</p></div></div> </section> </div> <div class="elementor-element elementor-element-0b1ebb9 aux-appear-watch-animation aux-fade-in-up elementor-widget elementor-widget-aux_mailchimp" data-id="0b1ebb9" data-element_type="widget" data-e-type="widget" data-widget_type="aux_mailchimp.default"> <div class="elementor-alert elementor-alert-danger" role="alert"> <span class="elementor-alert-title"> "MailChimp" Plugin is Not Activated! </span> <span class="elementor-alert-description"> In order to use this element, you need to install and activate this plugin. </span> </div> </div> </div> </div> <div class="aux-parallax-section elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-6b4d9b2" data-id="6b4d9b2" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </section> </div> </div> </div> </section> <section class="elementor-section elementor-top-section elementor-element elementor-element-68cb338 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="68cb338" data-element_type="section" data-e-type="section" data-settings="{"background_background":"classic"}"> <div class="elementor-container elementor-column-gap-no"> <div class="aux-parallax-section elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-41a5890" data-id="41a5890" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <section class="elementor-section elementor-inner-section elementor-element elementor-element-26c55fc elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="26c55fc" data-element_type="section" data-e-type="section"> <div class="elementor-container elementor-column-gap-no"> <div class="aux-parallax-section elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-ab49190" data-id="ab49190" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-9f04ff9 aux-appear-watch-animation aux-fade-in-up elementor-widget elementor-widget-aux_logo" data-id="9f04ff9" data-element_type="widget" data-e-type="widget" data-widget_type="aux_logo.default"> <div class="aux-widget-logo"><a class="aux-logo-anchor aux-has-logo" title="Enicomp Media" href="https://enicomp.com/"><img width="535" height="85" src="https://enicomp.com/wp-content/uploads/2023/06/Logo_enicomp.png" class="aux-attachment aux-featured-image attachment-535x85 aux-attachment-id-4208 " alt="Logo_enicomp" data-ratio="6.29" data-original-w="535" /></a><a class="aux-logo-anchor aux-logo-sticky aux-logo-hidden aux-has-logo" title="Enicomp Media" href="https://enicomp.com/"><img width="535" height="85" src="https://enicomp.com/wp-content/uploads/2023/06/Logo_enicomp.png" class="aux-attachment aux-featured-image attachment-535x85 aux-attachment-id-4208 " alt="Logo_enicomp" data-ratio="6.29" data-original-w="535" /></a><section class="aux-logo-text"><h3 class="site-title"><a href="https://enicomp.com/" title="Enicomp Media">Enicomp Media</a></h3><p class="site-description">Technology, gadget, social media, marketing</p></section></div> </div> </div> </div> <div class="aux-parallax-section elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-e8b3f8e" data-id="e8b3f8e" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-d2847ea elementor-widget__width-auto aux-appear-watch-animation aux-slide-from-top elementor-widget elementor-widget-aux_simple_svg" data-id="d2847ea" data-element_type="widget" data-e-type="widget" data-widget_type="aux_simple_svg.default"> <div class="aux-widget-container aux-simple-svg-container"> <div class="aux-widget-container-inner"> <div class="aux-the-svg"><img width="956" height="74" src="https://enicomp.com/wp-content/uploads/2021/10/White-Dot-Pattern-Footer.svg" title="demo-attachment-184-White-Dot-Pattern-Footer" alt="demo-attachment-184-White-Dot-Pattern-Footer" loading="lazy" /></div> </div> </div> </div> </div> </div> </div> </section> <section class="elementor-section elementor-inner-section elementor-element elementor-element-7e22c96 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7e22c96" data-element_type="section" data-e-type="section"> <div class="elementor-container elementor-column-gap-no"> <div class="aux-parallax-section elementor-column elementor-col-25 elementor-inner-column elementor-element elementor-element-d0a691c" data-id="d0a691c" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-f391180 elementor-widget elementor-widget-aux_modern_heading" data-id="f391180" data-element_type="widget" data-e-type="widget" data-widget_type="aux_modern_heading.default"> <section class="aux-widget-modern-heading"> <div class="aux-widget-inner"><h2 class="aux-modern-heading-primary">Categories</h2></div> </section> </div> <div class="elementor-element elementor-element-526b798 elementor-widget elementor-widget-aux_icon_list" data-id="526b798" data-element_type="widget" data-e-type="widget" data-widget_type="aux_icon_list.default"> <section class="widget-container aux-widget-icon-list aux-parent-aub53272d0"><div class="widget-inner"><div class="aux-widget-icon-list-inner"><ul class="aux-icon-list-items aux-direction-horizontal"><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-b4d829e elementor-repeater-item-b4d829e"><a class="aux-icon-list-link" href="https://enicomp.com/category/news/"><span class="aux-icon-list-text">News</span></a></li><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-32ff701 elementor-repeater-item-32ff701"><a class="aux-icon-list-link" href="https://enicomp.com/category/tech/"><span class="aux-icon-list-text">Tech</span></a></li><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-04577c8 elementor-repeater-item-04577c8"><a class="aux-icon-list-link" href="https://enicomp.com/category/social-media/"><span class="aux-icon-list-text">Social Media</span></a></li><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-ae8a3db elementor-repeater-item-ae8a3db"><a class="aux-icon-list-link" href="https://enicomp.com/category/artificial-intelligence/"><span class="aux-icon-list-text">Artificial intelligence</span></a></li></ul></div></div></section><!-- widget-container --> </div> </div> </div> <div class="aux-parallax-section elementor-column elementor-col-25 elementor-inner-column elementor-element elementor-element-191cfbc" data-id="191cfbc" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-eb1b1d3 elementor-widget elementor-widget-aux_icon_list" data-id="eb1b1d3" data-element_type="widget" data-e-type="widget" data-widget_type="aux_icon_list.default"> <section class="widget-container aux-widget-icon-list aux-parent-auccf87d79"><div class="widget-inner"><div class="aux-widget-icon-list-inner"><ul class="aux-icon-list-items aux-direction-vertical"><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-b4d829e elementor-repeater-item-b4d829e"><a class="aux-icon-list-link" href="https://enicomp.com/contact-us/"><span class="aux-icon-list-text">About Us</span></a></li></ul></div></div></section><!-- widget-container --> </div> </div> </div> <div class="aux-parallax-section elementor-column elementor-col-25 elementor-inner-column elementor-element elementor-element-aa25a71" data-id="aa25a71" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-fcaa04d elementor-widget elementor-widget-aux_icon_list" data-id="fcaa04d" data-element_type="widget" data-e-type="widget" data-widget_type="aux_icon_list.default"> <section class="widget-container aux-widget-icon-list aux-parent-au584c50d1"><div class="widget-inner"><div class="aux-widget-icon-list-inner"><ul class="aux-icon-list-items aux-direction-vertical"><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-b4d829e elementor-repeater-item-b4d829e"><a class="aux-icon-list-link" href="#"><span class="aux-icon-list-text">Newsletter</span></a></li><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-9945e99 elementor-repeater-item-9945e99"><a class="aux-icon-list-link" href="#"><span class="aux-icon-list-text">Subscribe</span></a></li></ul></div></div></section><!-- widget-container --> </div> </div> </div> <div class="aux-parallax-section elementor-column elementor-col-25 elementor-inner-column elementor-element elementor-element-21af10f" data-id="21af10f" data-element_type="column" data-e-type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-a31c635 elementor-widget elementor-widget-aux_modern_heading" data-id="a31c635" data-element_type="widget" data-e-type="widget" data-widget_type="aux_modern_heading.default"> <section class="aux-widget-modern-heading"> <div class="aux-widget-inner"><h2 class="aux-modern-heading-primary">Join us</h2></div> </section> </div> <div class="elementor-element elementor-element-a4dde57 elementor-widget elementor-widget-aux_icon_list" data-id="a4dde57" data-element_type="widget" data-e-type="widget" data-widget_type="aux_icon_list.default"> <section class="widget-container aux-widget-icon-list aux-parent-au1d9b362b"><div class="widget-inner"><div class="aux-widget-icon-list-inner"><ul class="aux-icon-list-items aux-direction-horizontal"><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-eb00be0 elementor-repeater-item-eb00be0"><a class="aux-icon-list-link" href="https://www.facebook.com/enicompmedia"><svg aria-hidden="true" class="aux-icon-list-icon e-font-icon-svg e-fab-facebook-f" viewBox="0 0 320 512" xmlns="http://www.w3.org/2000/svg"><path d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"></path></svg></a></li><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-fcf70aa elementor-repeater-item-fcf70aa"><a class="aux-icon-list-link" href="http://sales@enicomp.com"><i aria-hidden="true" class="aux-icon-list-icon auxicon auxicon-email-mail-streamline"></i></a></li><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-f0baa79 elementor-repeater-item-f0baa79"><a class="aux-icon-list-link" href="https://www.youtube.com/@enicompmedia"><svg aria-hidden="true" class="aux-icon-list-icon e-font-icon-svg e-fab-youtube" viewBox="0 0 576 512" xmlns="http://www.w3.org/2000/svg"><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg></a></li><li class="aux-icon-list-item aux-list-item-has-icon aux-icon-list-item-8615ede elementor-repeater-item-8615ede"><span class="aux-icon-list-text">List Item</span></li></ul></div></div></section><!-- widget-container --> </div> </div> </div> </div> </section> <div class="elementor-element elementor-element-b2cf29c elementor-widget elementor-widget-aux_copyright" data-id="b2cf29c" data-element_type="widget" data-e-type="widget" data-widget_type="aux_copyright.default"> <small>© 2026.Enicomp Media All rights reserved.| Web design: <a href="https://enicomp.eu">enicomp.eu</a></small> </div> </div> </div> </div> </section> </footer> </div><!-- end of wrapper --> </footer><!-- end footer --> </div><!--! end of #inner-body --> <div data-rocket-location-hash="4f672658b8e51c1addf5ad940da1b766" class="aux-hidden-blocks"> <section id="offmenu" class="aux-offcanvas-menu aux-pin-left" > <div data-rocket-location-hash="08a0aecbc471e92c02eb2362596789a6" class="aux-panel-close"> <div class="aux-close aux-cross-symbol aux-thick-medium"></div> </div> <div data-rocket-location-hash="976fb9f23e3c93ab03ee506faf336d24" class="offcanvas-header"> </div> <div data-rocket-location-hash="838adb68a8bbaa949780229d56d1d196" class="offcanvas-content"> </div> <div data-rocket-location-hash="3f1e35e96a8033f2a93791e56d78dc3a" class="offcanvas-footer"> </div> </section> <!-- offcanvas section --> <section id="offcart" class="aux-offcanvas-menu aux-offcanvas-cart aux-pin-left" > <div data-rocket-location-hash="f9823bc7c5ded74041d13ac14ea573e6" class="aux-panel-close"> <div class="aux-close aux-cross-symbol aux-thick-medium"></div> </div> <div data-rocket-location-hash="8c6b140cde987e3b44a1d65832ab9498" class="offcanvas-header"> Shopping Basket </div> <div data-rocket-location-hash="0fe220e4e4aa35c89a0ef5555986520c" class="aux-cart-wrapper aux-elegant-cart aux-offcart-content"> </div> </section> <!-- cartcanvas section --> <section data-rocket-location-hash="7d41ebe46d3df676cbff016871cbd8f2" id="fs-menu-search" class="aux-fs-popup aux-fs-menu-layout-center aux-indicator"> <div data-rocket-location-hash="cb1ac0cc77dcf0c3c0f8d4750d5b1621" class="aux-panel-close"> <div class="aux-close aux-cross-symbol aux-thick-medium"></div> </div> <div data-rocket-location-hash="ba22aace4e0100940042e28e634bfa1f" class="aux-fs-menu"> </div> <div data-rocket-location-hash="e8c3317fdf909bc91ae6d795cbba3874" class="aux-fs-search"> <div class="aux-search-section "> <div class="aux-search-form "> <form action="https://enicomp.com/" method="get" > <div class="aux-search-input-form"> <input type="text" class="aux-search-field" placeholder="Type here.." name="s" autocomplete="off" /> </div> <input type="submit" class="aux-black aux-search-submit aux-uppercase" value="Search" > </form> </div><!-- end searchform --> </div> </div> </section> <!-- fullscreen search and menu --> <section data-rocket-location-hash="13030819fad3af4080f05cd1f3d74ec3" id="fs-search" class="aux-fs-popup aux-search-overlay has-ajax-form"> <div class="aux-panel-close"> <div class="aux-close aux-cross-symbol aux-thick-medium"></div> </div> <div data-rocket-location-hash="47648a63a0193c09465d1db041958f5c" class="aux-search-field"> <div class="aux-search-section aux-404-search"> <div class="aux-search-form aux-iconic-search"> <form action="https://enicomp.com/" method="get" > <div class="aux-search-input-form"> <input type="text" class="aux-search-field" placeholder="Search..." name="s" autocomplete="off" /> </div> <div class="aux-submit-icon-container auxicon-search-4 "> <input type="submit" class="aux-iconic-search-submit" value="Search" > </div> </form> </div><!-- end searchform --> </div> </div> </section> <!-- fullscreen search--> <div data-rocket-location-hash="5253c0bb1177fd9635e82e349fb8316d" class="aux-scroll-top"></div> </div> <div data-rocket-location-hash="62273244c0b59dc0970438deea868511" class="aux-goto-top-btn aux-align-btn-right"><div data-rocket-location-hash="a58b5aaf03aef79fe4c2d98ebe314427" class="aux-hover-slide aux-arrow-nav aux-round aux-outline"> <span class="aux-overlay"></span> <span class="aux-svg-arrow aux-h-small-up"></span> <span class="aux-hover-arrow aux-svg-arrow aux-h-small-up aux-white"></span></div></div> <!-- outputs by wp_footer --> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/phlox-pro-child/*","/wp-content/themes/phlox-pro/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <!-- Consent Management powered by Complianz | GDPR/CCPA Cookie Consent https://wordpress.org/plugins/complianz-gdpr --> <div id="cmplz-cookiebanner-container"><div class="cmplz-cookiebanner cmplz-hidden banner-1 bottom-right-view-preferences optin cmplz-bottom-right cmplz-categories-type-view-preferences" aria-modal="true" data-nosnippet="true" role="dialog" aria-live="polite" aria-labelledby="cmplz-header-1-optin" aria-describedby="cmplz-message-1-optin"> <div class="cmplz-header"> <div class="cmplz-logo"></div> <div class="cmplz-title" id="cmplz-header-1-optin">Manage Cookie Consent</div> <div class="cmplz-close" tabindex="0" role="button" aria-label="Close dialog"> <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="times" class="svg-inline--fa fa-times fa-w-11" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 352 512"><path fill="currentColor" d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"></path></svg> </div> </div> <div class="cmplz-divider cmplz-divider-header"></div> <div class="cmplz-body"> <div class="cmplz-message" id="cmplz-message-1-optin">To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.</div> <!-- categories start --> <div class="cmplz-categories"> <details class="cmplz-category cmplz-functional" > <summary> <span class="cmplz-category-header"> <span class="cmplz-category-title">Functional</span> <span class='cmplz-always-active'> <span class="cmplz-banner-checkbox"> <input type="checkbox" id="cmplz-functional-optin" data-category="cmplz_functional" class="cmplz-consent-checkbox cmplz-functional" size="40" value="1"/> <label class="cmplz-label" for="cmplz-functional-optin" tabindex="0"><span class="screen-reader-text">Functional</span></label> </span> Always active </span> <span class="cmplz-icon cmplz-open"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" height="18" ><path d="M224 416c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L224 338.8l169.4-169.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-192 192C240.4 412.9 232.2 416 224 416z"/></svg> </span> </span> </summary> <div class="cmplz-description"> <span class="cmplz-description-functional">The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.</span> </div> </details> <details class="cmplz-category cmplz-preferences" > <summary> <span class="cmplz-category-header"> <span class="cmplz-category-title">Preferences</span> <span class="cmplz-banner-checkbox"> <input type="checkbox" id="cmplz-preferences-optin" data-category="cmplz_preferences" class="cmplz-consent-checkbox cmplz-preferences" size="40" value="1"/> <label class="cmplz-label" for="cmplz-preferences-optin" tabindex="0"><span class="screen-reader-text">Preferences</span></label> </span> <span class="cmplz-icon cmplz-open"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" height="18" ><path d="M224 416c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L224 338.8l169.4-169.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-192 192C240.4 412.9 232.2 416 224 416z"/></svg> </span> </span> </summary> <div class="cmplz-description"> <span class="cmplz-description-preferences">The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.</span> </div> </details> <details class="cmplz-category cmplz-statistics" > <summary> <span class="cmplz-category-header"> <span class="cmplz-category-title">Statistics</span> <span class="cmplz-banner-checkbox"> <input type="checkbox" id="cmplz-statistics-optin" data-category="cmplz_statistics" class="cmplz-consent-checkbox cmplz-statistics" size="40" value="1"/> <label class="cmplz-label" for="cmplz-statistics-optin" tabindex="0"><span class="screen-reader-text">Statistics</span></label> </span> <span class="cmplz-icon cmplz-open"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" height="18" ><path d="M224 416c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L224 338.8l169.4-169.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-192 192C240.4 412.9 232.2 416 224 416z"/></svg> </span> </span> </summary> <div class="cmplz-description"> <span class="cmplz-description-statistics">The technical storage or access that is used exclusively for statistical purposes.</span> <span class="cmplz-description-statistics-anonymous">The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.</span> </div> </details> <details class="cmplz-category cmplz-marketing" > <summary> <span class="cmplz-category-header"> <span class="cmplz-category-title">Marketing</span> <span class="cmplz-banner-checkbox"> <input type="checkbox" id="cmplz-marketing-optin" data-category="cmplz_marketing" class="cmplz-consent-checkbox cmplz-marketing" size="40" value="1"/> <label class="cmplz-label" for="cmplz-marketing-optin" tabindex="0"><span class="screen-reader-text">Marketing</span></label> </span> <span class="cmplz-icon cmplz-open"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" height="18" ><path d="M224 416c-8.188 0-16.38-3.125-22.62-9.375l-192-192c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L224 338.8l169.4-169.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-192 192C240.4 412.9 232.2 416 224 416z"/></svg> </span> </span> </summary> <div class="cmplz-description"> <span class="cmplz-description-marketing">The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.</span> </div> </details> </div><!-- categories end --> </div> <div class="cmplz-links cmplz-information"> <a class="cmplz-link cmplz-manage-options cookie-statement" href="#" data-relative_url="#cmplz-manage-consent-container">Manage options</a> <a class="cmplz-link cmplz-manage-third-parties cookie-statement" href="#" data-relative_url="#cmplz-cookies-overview">Manage services</a> <a class="cmplz-link cmplz-manage-vendors tcf cookie-statement" href="#" data-relative_url="#cmplz-tcf-wrapper">Manage {vendor_count} vendors</a> <a class="cmplz-link cmplz-external cmplz-read-more-purposes tcf" target="_blank" rel="noopener noreferrer nofollow" href="https://cookiedatabase.org/tcf/purposes/">Read more about these purposes</a> </div> <div class="cmplz-divider cmplz-footer"></div> <div class="cmplz-buttons"> <button class="cmplz-btn cmplz-accept">Accept</button> <button class="cmplz-btn cmplz-deny">Deny</button> <button class="cmplz-btn cmplz-view-preferences">View preferences</button> <button class="cmplz-btn cmplz-save-preferences">Save preferences</button> <a class="cmplz-btn cmplz-manage-options tcf cookie-statement" href="#" data-relative_url="#cmplz-manage-consent-container">View preferences</a> </div> <div class="cmplz-links cmplz-documents"> <a class="cmplz-link cookie-statement" href="#" data-relative_url="">{title}</a> <a class="cmplz-link privacy-statement" href="#" data-relative_url="">{title}</a> <a class="cmplz-link impressum" href="#" data-relative_url="">{title}</a> </div> </div> </div> <div id="cmplz-manage-consent" data-nosnippet="true"><button class="cmplz-btn cmplz-hidden cmplz-manage-consent manage-consent-1">Manage consent</button> </div><!-- Social Wall JS --> <script type="text/rocketlazyloadscript" data-rocket-type="text/javascript"> </script> <!-- YouTube Feeds JS --> <script type="text/rocketlazyloadscript" data-rocket-type="text/javascript"> </script> <script type="text/rocketlazyloadscript"> const lazyloadRunObserver = () => { const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` ); const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => { entries.forEach( ( entry ) => { if ( entry.isIntersecting ) { let lazyloadBackground = entry.target; if( lazyloadBackground ) { lazyloadBackground.classList.add( 'e-lazyloaded' ); } lazyloadBackgroundObserver.unobserve( entry.target ); } }); }, { rootMargin: '200px 0px 200px 0px' } ); lazyloadBackgrounds.forEach( ( lazyloadBackground ) => { lazyloadBackgroundObserver.observe( lazyloadBackground ); } ); }; const events = [ 'DOMContentLoaded', 'elementor/lazyload/observe', ]; events.forEach( ( event ) => { document.addEventListener( event, lazyloadRunObserver ); } ); </script> <link rel='stylesheet' id='elementor-post-3338-css' href='https://enicomp.com/wp-content/uploads/elementor/css/post-3338.css?ver=1774152306' media='all' /> <link rel='stylesheet' id='cffstyles-css' href='https://enicomp.com/wp-content/plugins/custom-facebook-feed-pro/assets/css/cff-style.min.css?ver=4.7.5' media='all' /> <link data-minify="1" rel='stylesheet' id='auxin-elementor-widgets-css' href='https://enicomp.com/wp-content/cache/min/1/wp-content/plugins/auxin-elements/admin/assets/css/elementor-widgets.css?ver=1774152306' media='all' /> <link rel='stylesheet' id='mediaelement-css' href='https://enicomp.com/wp-includes/js/mediaelement/mediaelementplayer-legacy.min.css?ver=4.2.17' media='all' /> <link rel='stylesheet' id='wp-mediaelement-css' href='https://enicomp.com/wp-includes/js/mediaelement/wp-mediaelement.min.css?ver=1928048241ea381de9804cbcc8e2c997' media='all' /> <link data-minify="1" rel='stylesheet' id='font-awesome-5-all-css' href='https://enicomp.com/wp-content/cache/min/1/wp-content/plugins/elementor/assets/lib/font-awesome/css/all.min.css?ver=1774152306' media='all' /> <link rel='stylesheet' id='font-awesome-4-shim-css' href='https://enicomp.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/v4-shims.min.css?ver=3.35.7' media='all' /> <link rel='stylesheet' id='sby-common-styles-css' href='https://enicomp.com/wp-content/plugins/youtube-feed-pro/css/https://enicomp.com/wp-content/plugins/youtube-feed-pro/public/build/css/sb-youtube-common.css?ver=2.6.1' media='all' /> <link rel='stylesheet' id='sby-styles-css' href='https://enicomp.com/wp-content/plugins/youtube-feed-pro/css/https://enicomp.com/wp-content/plugins/youtube-feed-pro/public/build/css/sb-youtube.css?ver=2.6.1' media='all' /> <link data-minify="1" rel='stylesheet' id='elementor-gf-local-roboto-css' href='https://enicomp.com/wp-content/cache/min/1/wp-content/uploads/elementor/google-fonts/css/roboto.css?ver=1774152306' media='all' /> <script type="text/rocketlazyloadscript" data-minify="1" data-rocket-src="https://enicomp.com/wp-content/cache/min/1/wp-content/plugins/custom-facebook-feed-pro/admin/assets/js/builders-preview-handler.js?ver=1769252720" id="cff-builders-handler-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-includes/js/imagesloaded.min.js?ver=5.0.0" id="imagesloaded-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-includes/js/masonry.min.js?ver=4.2.2" id="masonry-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-minify="1" data-rocket-src="https://enicomp.com/wp-content/cache/min/1/wp-content/themes/phlox-pro/js/solo/select2/select2.full.js?ver=1770707572" id="select2-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-minify="1" data-rocket-src="https://enicomp.com/wp-content/cache/min/1/wp-content/themes/phlox-pro/js/solo/perfect-scrollbar/perfect-scrollbar.js?ver=1770707572" id="perfect-scrollbar-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/themes/phlox-pro/js/plugins.min.js?ver=5.17.12" id="auxin-plugins-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/themes/phlox-pro/js/scripts.min.js?ver=5.17.12" id="auxin-scripts-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-minify="1" data-rocket-src="https://enicomp.com/wp-content/cache/min/1/wp-content/plugins/auxin-elements/admin/assets/js/elementor/widgets.js?ver=1769252720" id="auxin-elementor-widgets-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" id="mediaelement-core-js-before"> var mejsL10n = {"language":"en","strings":{"mejs.download-file":"Download File","mejs.install-flash":"You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/","mejs.fullscreen":"Fullscreen","mejs.play":"Play","mejs.pause":"Pause","mejs.time-slider":"Time Slider","mejs.time-help-text":"Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.","mejs.live-broadcast":"Live Broadcast","mejs.volume-help-text":"Use Up/Down Arrow keys to increase or decrease volume.","mejs.unmute":"Unmute","mejs.mute":"Mute","mejs.volume-slider":"Volume Slider","mejs.video-player":"Video Player","mejs.audio-player":"Audio Player","mejs.captions-subtitles":"Captions/Subtitles","mejs.captions-chapters":"Chapters","mejs.none":"None","mejs.afrikaans":"Afrikaans","mejs.albanian":"Albanian","mejs.arabic":"Arabic","mejs.belarusian":"Belarusian","mejs.bulgarian":"Bulgarian","mejs.catalan":"Catalan","mejs.chinese":"Chinese","mejs.chinese-simplified":"Chinese (Simplified)","mejs.chinese-traditional":"Chinese (Traditional)","mejs.croatian":"Croatian","mejs.czech":"Czech","mejs.danish":"Danish","mejs.dutch":"Dutch","mejs.english":"English","mejs.estonian":"Estonian","mejs.filipino":"Filipino","mejs.finnish":"Finnish","mejs.french":"French","mejs.galician":"Galician","mejs.german":"German","mejs.greek":"Greek","mejs.haitian-creole":"Haitian Creole","mejs.hebrew":"Hebrew","mejs.hindi":"Hindi","mejs.hungarian":"Hungarian","mejs.icelandic":"Icelandic","mejs.indonesian":"Indonesian","mejs.irish":"Irish","mejs.italian":"Italian","mejs.japanese":"Japanese","mejs.korean":"Korean","mejs.latvian":"Latvian","mejs.lithuanian":"Lithuanian","mejs.macedonian":"Macedonian","mejs.malay":"Malay","mejs.maltese":"Maltese","mejs.norwegian":"Norwegian","mejs.persian":"Persian","mejs.polish":"Polish","mejs.portuguese":"Portuguese","mejs.romanian":"Romanian","mejs.russian":"Russian","mejs.serbian":"Serbian","mejs.slovak":"Slovak","mejs.slovenian":"Slovenian","mejs.spanish":"Spanish","mejs.swahili":"Swahili","mejs.swedish":"Swedish","mejs.tagalog":"Tagalog","mejs.thai":"Thai","mejs.turkish":"Turkish","mejs.ukrainian":"Ukrainian","mejs.vietnamese":"Vietnamese","mejs.welsh":"Welsh","mejs.yiddish":"Yiddish"}}; //# sourceURL=mediaelement-core-js-before </script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-includes/js/mediaelement/mediaelement-and-player.min.js?ver=4.2.17" id="mediaelement-core-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-includes/js/mediaelement/mediaelement-migrate.min.js?ver=1928048241ea381de9804cbcc8e2c997" id="mediaelement-migrate-js" data-rocket-defer defer></script> <script id="mediaelement-js-extra"> var _wpmejsSettings = {"pluginPath":"/wp-includes/js/mediaelement/","classPrefix":"mejs-","stretching":"auto","audioShortcodeLibrary":"mediaelement","videoShortcodeLibrary":"mediaelement"}; //# sourceURL=mediaelement-js-extra </script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-includes/js/mediaelement/wp-mediaelement.min.js?ver=1928048241ea381de9804cbcc8e2c997" id="wp-mediaelement-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/auxin-elements/public/assets/js/plugins.min.js?ver=2.17.15" id="auxin-elements-plugins-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-minify="1" data-rocket-src="https://enicomp.com/wp-content/cache/min/1/wp-content/plugins/auxin-elements/public/assets/js/scripts.js?ver=1769252720" id="auxin-elements-scripts-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/elementor/assets/lib/jquery-numerator/jquery-numerator.min.js?ver=0.2.1" id="jquery-numerator-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-minify="1" data-rocket-src="https://enicomp.com/wp-content/cache/min/1/wp-content/plugins/auxin-pro-tools/public/assets/js/pro-tools.js?ver=1769252720" id="auxin-pro-tools-pro-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-minify="1" data-rocket-src="https://enicomp.com/wp-content/cache/min/1/wp-content/plugins/cff-extensions/cff-carousel/js/carousel.js?ver=1769252720" id="cff_carousel_js-js" data-rocket-defer defer></script> <script id="sb-analytics-scripts-js-extra"> var sbAnalytics = {"nonce":"589149a617","postId":"33794","captureEventUrl":"https://enicomp.com/wp-json/sb/analytics/v1/capture","trackingCountAsNEvents":"1"}; //# sourceURL=sb-analytics-scripts-js-extra </script> <script type="text/rocketlazyloadscript" data-minify="1" data-rocket-src="https://enicomp.com/wp-content/cache/min/1/wp-content/plugins/sb-analytics/build/tracking.js?ver=1769252720" id="sb-analytics-scripts-js" data-rocket-defer defer></script> <script id="cffscripts-js-extra"> var cffOptions = {"placeholder":"https://enicomp.com/wp-content/plugins/custom-facebook-feed-pro/assets/img/placeholder.png","resized_url":"https://enicomp.com/wp-content/uploads/sb-facebook-feed-images/"}; var cffOptions = {"placeholder":"https://enicomp.com/wp-content/plugins/custom-facebook-feed-pro/assets/img/placeholder.png","resized_url":"https://enicomp.com/wp-content/uploads/sb-facebook-feed-images/","nonce":"a0929497c5"}; //# sourceURL=cffscripts-js-extra </script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/custom-facebook-feed-pro/assets/js/cff-scripts.min.js?ver=4.7.5" id="cffscripts-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" id="rocket-browser-checker-js-after"> "use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}var RocketBrowserCompatibilityChecker=function(){function RocketBrowserCompatibilityChecker(options){_classCallCheck(this,RocketBrowserCompatibilityChecker),this.passiveSupported=!1,this._checkPassiveOption(this),this.options=!!this.passiveSupported&&options}return _createClass(RocketBrowserCompatibilityChecker,[{key:"_checkPassiveOption",value:function(self){try{var options={get passive(){return!(self.passiveSupported=!0)}};window.addEventListener("test",null,options),window.removeEventListener("test",null,options)}catch(err){self.passiveSupported=!1}}},{key:"initRequestIdleCallback",value:function(){!1 in window&&(window.requestIdleCallback=function(cb){var start=Date.now();return setTimeout(function(){cb({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-start))}})},1)}),!1 in window&&(window.cancelIdleCallback=function(id){return clearTimeout(id)})}},{key:"isDataSaverModeOn",value:function(){return"connection"in navigator&&!0===navigator.connection.saveData}},{key:"supportsLinkPrefetch",value:function(){var elem=document.createElement("link");return elem.relList&&elem.relList.supports&&elem.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype}},{key:"isSlowConnection",value:function(){return"connection"in navigator&&"effectiveType"in navigator.connection&&("2g"===navigator.connection.effectiveType||"slow-2g"===navigator.connection.effectiveType)}}]),RocketBrowserCompatibilityChecker}(); //# sourceURL=rocket-browser-checker-js-after </script> <script id="rocket-preload-links-js-extra"> var RocketPreloadLinksConfig = {"excludeUris":"/(?:.+/)?feed(?:/(?:.+/?)?)?$|/(?:.+/)?embed/|/(index.php/)?(.*)wp-json(/.*|$)|/refer/|/go/|/recommend/|/recommends/","usesTrailingSlash":"1","imageExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php","fileExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php|html|htm","siteUrl":"https://enicomp.com","onHoverDelay":"100","rateThrottle":"3"}; //# sourceURL=rocket-preload-links-js-extra </script> <script type="text/rocketlazyloadscript" id="rocket-preload-links-js-after"> (function() { "use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e=function(){function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}}();function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var t=function(){function n(e,t){i(this,n),this.browser=e,this.config=t,this.options=this.browser.options,this.prefetched=new Set,this.eventTime=null,this.threshold=1111,this.numOnHover=0}return e(n,[{key:"init",value:function(){!this.browser.supportsLinkPrefetch()||this.browser.isDataSaverModeOn()||this.browser.isSlowConnection()||(this.regex={excludeUris:RegExp(this.config.excludeUris,"i"),images:RegExp(".("+this.config.imageExt+")$","i"),fileExt:RegExp(".("+this.config.fileExt+")$","i")},this._initListeners(this))}},{key:"_initListeners",value:function(e){-1<this.config.onHoverDelay&&document.addEventListener("mouseover",e.listener.bind(e),e.listenerOptions),document.addEventListener("mousedown",e.listener.bind(e),e.listenerOptions),document.addEventListener("touchstart",e.listener.bind(e),e.listenerOptions)}},{key:"listener",value:function(e){var t=e.target.closest("a"),n=this._prepareUrl(t);if(null!==n)switch(e.type){case"mousedown":case"touchstart":this._addPrefetchLink(n);break;case"mouseover":this._earlyPrefetch(t,n,"mouseout")}}},{key:"_earlyPrefetch",value:function(t,e,n){var i=this,r=setTimeout(function(){if(r=null,0===i.numOnHover)setTimeout(function(){return i.numOnHover=0},1e3);else if(i.numOnHover>i.config.rateThrottle)return;i.numOnHover++,i._addPrefetchLink(e)},this.config.onHoverDelay);t.addEventListener(n,function e(){t.removeEventListener(n,e,{passive:!0}),null!==r&&(clearTimeout(r),r=null)},{passive:!0})}},{key:"_addPrefetchLink",value:function(i){return this.prefetched.add(i.href),new Promise(function(e,t){var n=document.createElement("link");n.rel="prefetch",n.href=i.href,n.onload=e,n.onerror=t,document.head.appendChild(n)}).catch(function(){})}},{key:"_prepareUrl",value:function(e){if(null===e||"object"!==(void 0===e?"undefined":r(e))||!1 in e||-1===["http:","https:"].indexOf(e.protocol))return null;var t=e.href.substring(0,this.config.siteUrl.length),n=this._getPathname(e.href,t),i={original:e.href,protocol:e.protocol,origin:t,pathname:n,href:t+n};return this._isLinkOk(i)?i:null}},{key:"_getPathname",value:function(e,t){var n=t?e.substring(this.config.siteUrl.length):e;return n.startsWith("/")||(n="/"+n),this._shouldAddTrailingSlash(n)?n+"/":n}},{key:"_shouldAddTrailingSlash",value:function(e){return this.config.usesTrailingSlash&&!e.endsWith("/")&&!this.regex.fileExt.test(e)}},{key:"_isLinkOk",value:function(e){return null!==e&&"object"===(void 0===e?"undefined":r(e))&&(!this.prefetched.has(e.href)&&e.origin===this.config.siteUrl&&-1===e.href.indexOf("?")&&-1===e.href.indexOf("#")&&!this.regex.excludeUris.test(e.href)&&!this.regex.images.test(e.href))}}],[{key:"run",value:function(){"undefined"!=typeof RocketPreloadLinksConfig&&new n(new RocketBrowserCompatibilityChecker({capture:!0,passive:!0}),RocketPreloadLinksConfig).init()}}]),n}();t.run(); }()); //# sourceURL=rocket-preload-links-js-after </script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-consent-mode-bc2e26cfa69fcd4a8261.js" id="googlesitekit-consent-mode-js" data-rocket-defer defer></script> <script type="text/plain" data-service="facebook" data-category="marketing" defer data-cmplz-src="https://enicomp.com/wp-content/plugins/pixelyoursite/dist/scripts/jquery.bind-first-0.2.3.min.js?ver=0.2.3" id="jquery-bind-first-js"></script> <script type="text/plain" data-service="facebook" data-category="marketing" defer data-cmplz-src="https://enicomp.com/wp-content/plugins/pixelyoursite/dist/scripts/js.cookie-2.1.3.min.js?ver=2.1.3" id="js-cookie-pys-js"></script> <script type="text/plain" data-service="facebook" data-category="marketing" defer data-cmplz-src="https://enicomp.com/wp-content/plugins/pixelyoursite/dist/scripts/tld.min.js?ver=2.3.1" id="js-tld-js"></script> <script type="text/plain" data-service="facebook" data-category="marketing" id="pys-js-extra"> var pysOptions = {"staticEvents":[],"dynamicEvents":[],"triggerEvents":[],"triggerEventTypes":[],"ga":{"trackingIds":["G-DJ04P8N7CP"],"commentEventEnabled":true,"downloadEnabled":true,"formEventEnabled":true,"crossDomainEnabled":false,"crossDomainAcceptIncoming":false,"crossDomainDomains":[],"isDebugEnabled":[],"serverContainerUrls":{"G-DJ04P8N7CP":{"enable_server_container":"","server_container_url":"","transport_url":""}},"additionalConfig":{"G-DJ04P8N7CP":{"first_party_collection":true}},"disableAdvertisingFeatures":false,"disableAdvertisingPersonalization":false,"wooVariableAsSimple":true,"custom_page_view_event":false},"debug":"","siteUrl":"https://enicomp.com","ajaxUrl":"https://enicomp.com/wp-admin/admin-ajax.php","ajax_event":"9a3d171a2a","enable_remove_download_url_param":"1","cookie_duration":"7","last_visit_duration":"60","enable_success_send_form":"","ajaxForServerEvent":"1","ajaxForServerStaticEvent":"1","useSendBeacon":"1","send_external_id":"1","external_id_expire":"180","track_cookie_for_subdomains":"1","google_consent_mode":"1","gdpr":{"ajax_enabled":false,"all_disabled_by_api":false,"facebook_disabled_by_api":false,"analytics_disabled_by_api":false,"google_ads_disabled_by_api":false,"pinterest_disabled_by_api":false,"bing_disabled_by_api":false,"reddit_disabled_by_api":false,"externalID_disabled_by_api":false,"facebook_prior_consent_enabled":true,"analytics_prior_consent_enabled":true,"google_ads_prior_consent_enabled":null,"pinterest_prior_consent_enabled":true,"bing_prior_consent_enabled":true,"cookiebot_integration_enabled":false,"cookiebot_facebook_consent_category":"marketing","cookiebot_analytics_consent_category":"statistics","cookiebot_tiktok_consent_category":"marketing","cookiebot_google_ads_consent_category":"marketing","cookiebot_pinterest_consent_category":"marketing","cookiebot_bing_consent_category":"marketing","consent_magic_integration_enabled":false,"real_cookie_banner_integration_enabled":false,"cookie_notice_integration_enabled":false,"cookie_law_info_integration_enabled":false,"analytics_storage":{"enabled":true,"value":"granted","filter":false},"ad_storage":{"enabled":true,"value":"granted","filter":false},"ad_user_data":{"enabled":true,"value":"granted","filter":false},"ad_personalization":{"enabled":true,"value":"granted","filter":false}},"cookie":{"disabled_all_cookie":false,"disabled_start_session_cookie":false,"disabled_advanced_form_data_cookie":false,"disabled_landing_page_cookie":false,"disabled_first_visit_cookie":false,"disabled_trafficsource_cookie":false,"disabled_utmTerms_cookie":false,"disabled_utmId_cookie":false},"tracking_analytics":{"TrafficLanding":"http://undefined","TrafficUtms":[],"TrafficUtmsId":[]},"GATags":{"ga_datalayer_type":"default","ga_datalayer_name":"dataLayerPYS"},"woo":{"enabled":false},"edd":{"enabled":false},"cache_bypass":"1774214886"}; //# sourceURL=pys-js-extra </script> <script type="text/plain" data-service="facebook" data-category="marketing" defer data-cmplz-src="https://enicomp.com/wp-content/plugins/pixelyoursite/dist/scripts/public.js?ver=11.2.0.4" id="pys-js"></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/uploads/phlox-pro/custom.js?ver=6.1" id="auxin-custom-js-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=3.35.7" id="elementor-webpack-runtime-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=3.35.7" id="elementor-frontend-modules-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.3" id="jquery-ui-core-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" id="elementor-frontend-js-before"> var elementorFrontendConfig = {"environmentMode":{"edit":false,"wpPreview":false,"isScriptDebug":false},"i18n":{"shareOnFacebook":"Share on Facebook","shareOnTwitter":"Share on Twitter","pinIt":"Pin it","download":"Download","downloadImage":"Download image","fullscreen":"Fullscreen","zoom":"Zoom","share":"Share","playVideo":"Play Video","previous":"Previous","next":"Next","close":"Close","a11yCarouselPrevSlideMessage":"Previous slide","a11yCarouselNextSlideMessage":"Next slide","a11yCarouselFirstSlideMessage":"This is the first slide","a11yCarouselLastSlideMessage":"This is the last slide","a11yCarouselPaginationBulletMessage":"Go to slide"},"is_rtl":false,"breakpoints":{"xs":0,"sm":480,"md":768,"lg":1025,"xl":1440,"xxl":1600},"responsive":{"breakpoints":{"mobile":{"label":"Mobile Portrait","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Landscape","value":880,"default_value":880,"direction":"max","is_enabled":false},"tablet":{"label":"Tablet Portrait","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet Landscape","value":1200,"default_value":1200,"direction":"max","is_enabled":false},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":false},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":false}},"hasCustomBreakpoints":false},"version":"3.35.7","is_static":false,"experimentalFeatures":{"e_font_icon_svg":true,"additional_custom_breakpoints":true,"e_optimized_markup":true,"home_screen":true,"global_classes_should_enforce_capabilities":true,"e_variables":true,"cloud-library":true,"e_opt_in_v4_page":true,"e_components":true,"e_interactions":true,"e_editor_one":true,"import-export-customization":true,"e_pro_variables":true},"urls":{"assets":"https:\/\/enicomp.com\/wp-content\/plugins\/elementor\/assets\/","ajaxurl":"https:\/\/enicomp.com\/wp-admin\/admin-ajax.php","uploadUrl":"https:\/\/enicomp.com\/wp-content\/uploads"},"nonces":{"floatingButtonsClickTracking":"ce4c5d97e4"},"swiperClass":"swiper","settings":{"page":[],"editorPreferences":[]},"kit":{"active_breakpoints":["viewport_mobile","viewport_tablet"],"global_image_lightbox":"yes","lightbox_enable_counter":"yes","lightbox_enable_fullscreen":"yes","lightbox_enable_zoom":"yes","lightbox_enable_share":"yes","lightbox_title_src":"title","lightbox_description_src":"description"},"post":{"id":33794,"title":"How%20to%20Scrape%20Web%20Data%20using%20Python","excerpt":"","featuredImage":"https:\/\/enicomp.com\/wp-content\/uploads\/2026\/03\/image-721-1030x720.jpg"}}; //# sourceURL=elementor-frontend-js-before </script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=3.35.7" id="elementor-frontend-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-events-provider-contact-form-7-83c32a029ed2cf5b6a82.js" id="googlesitekit-events-provider-contact-form-7-js" defer></script> <script id="cmplz-cookiebanner-js-extra"> var complianz = {"prefix":"cmplz_","user_banner_id":"1","set_cookies":[],"block_ajax_content":"","banner_version":"130","version":"7.5.0","store_consent":"1","do_not_track_enabled":"","consenttype":"optin","region":"eu","geoip":"1","dismiss_timeout":"","disable_cookiebanner":"","soft_cookiewall":"","dismiss_on_scroll":"","cookie_expiry":"365","url":"https://enicomp.com/wp-json/complianz/v1/","locale":"lang=en&locale=en_US","set_cookies_on_root":"","cookie_domain":"","current_policy_id":"34","cookie_path":"/","categories":{"statistics":"statistics","marketing":"marketing"},"tcf_active":"","placeholdertext":"\u003Cdiv class=\"cmplz-blocked-content-notice-body\"\u003EClick 'I agree' to enable {service}\u00a0\u003Cdiv class=\"cmplz-links\"\u003E\u003Ca href=\"#\" class=\"cmplz-link cookie-statement\"\u003E{title}\u003C/a\u003E\u003C/div\u003E\u003C/div\u003E\u003Cbutton class=\"cmplz-accept-service\"\u003EI agree\u003C/button\u003E","css_file":"https://enicomp.com/wp-content/uploads/complianz/css/banner-{banner_id}-{type}.css?v=130","page_links":{"eu":{"cookie-statement":{"title":"Cookie Policy ","url":"https://enicomp.com/cookie-policy-eu/"}},"uk":{"cookie-statement":{"title":"","url":"https://enicomp.com/how-blockchain-based-micro-credentials-are-reshaping-continuing-education/"},"privacy-statement-children":{"title":"","url":"https://enicomp.com/how-blockchain-based-micro-credentials-are-reshaping-continuing-education/"}}},"tm_categories":"","forceEnableStats":"","preview":"","clean_cookies":"1","aria_label":"Click button to enable {service}"}; //# sourceURL=cmplz-cookiebanner-js-extra </script> <script type="text/rocketlazyloadscript" defer data-rocket-src="https://enicomp.com/wp-content/plugins/complianz-gdpr-premium/cookiebanner/js/complianz.min.js?ver=1743844464" id="cmplz-cookiebanner-js"></script> <script type="text/rocketlazyloadscript" id="cmplz-cookiebanner-js-after"> if ('undefined' != typeof window.jQuery) { jQuery(document).ready(function ($) { $(document).on('elementor/popup/show', () => { let rev_cats = cmplz_categories.reverse(); for (let key in rev_cats) { if (rev_cats.hasOwnProperty(key)) { let category = cmplz_categories[key]; if (cmplz_has_consent(category)) { document.querySelectorAll('[data-category="' + category + '"]').forEach(obj => { cmplz_remove_placeholder(obj); }); } } } let services = cmplz_get_services_on_page(); for (let key in services) { if (services.hasOwnProperty(key)) { let service = services[key].service; let category = services[key].category; if (cmplz_has_service_consent(service, category)) { document.querySelectorAll('[data-service="' + service + '"]').forEach(obj => { cmplz_remove_placeholder(obj); }); } } } }); }); } document.addEventListener("cmplz_enable_category", function(consentData) { var category = consentData.detail.category; var services = consentData.detail.services; var blockedContentContainers = []; let selectorVideo = '.cmplz-elementor-widget-video-playlist[data-category="'+category+'"],.elementor-widget-video[data-category="'+category+'"]'; let selectorGeneric = '[data-cmplz-elementor-href][data-category="'+category+'"]'; for (var skey in services) { if (services.hasOwnProperty(skey)) { let service = skey; selectorVideo +=',.cmplz-elementor-widget-video-playlist[data-service="'+service+'"],.elementor-widget-video[data-service="'+service+'"]'; selectorGeneric +=',[data-cmplz-elementor-href][data-service="'+service+'"]'; } } document.querySelectorAll(selectorVideo).forEach(obj => { let elementService = obj.getAttribute('data-service'); if ( cmplz_is_service_denied(elementService) ) { return; } if (obj.classList.contains('cmplz-elementor-activated')) return; obj.classList.add('cmplz-elementor-activated'); if ( obj.hasAttribute('data-cmplz_elementor_widget_type') ){ let attr = obj.getAttribute('data-cmplz_elementor_widget_type'); obj.classList.removeAttribute('data-cmplz_elementor_widget_type'); obj.classList.setAttribute('data-widget_type', attr); } if (obj.classList.contains('cmplz-elementor-widget-video-playlist')) { obj.classList.remove('cmplz-elementor-widget-video-playlist'); obj.classList.add('elementor-widget-video-playlist'); } obj.setAttribute('data-settings', obj.getAttribute('data-cmplz-elementor-settings')); blockedContentContainers.push(obj); }); document.querySelectorAll(selectorGeneric).forEach(obj => { let elementService = obj.getAttribute('data-service'); if ( cmplz_is_service_denied(elementService) ) { return; } if (obj.classList.contains('cmplz-elementor-activated')) return; if (obj.classList.contains('cmplz-fb-video')) { obj.classList.remove('cmplz-fb-video'); obj.classList.add('fb-video'); } obj.classList.add('cmplz-elementor-activated'); obj.setAttribute('data-href', obj.getAttribute('data-cmplz-elementor-href')); blockedContentContainers.push(obj.closest('.elementor-widget')); }); /** * Trigger the widgets in Elementor */ for (var key in blockedContentContainers) { if (blockedContentContainers.hasOwnProperty(key) && blockedContentContainers[key] !== undefined) { let blockedContentContainer = blockedContentContainers[key]; if (elementorFrontend.elementsHandler) { elementorFrontend.elementsHandler.runReadyTrigger(blockedContentContainer) } var cssIndex = blockedContentContainer.getAttribute('data-placeholder_class_index'); blockedContentContainer.classList.remove('cmplz-blocked-content-container'); blockedContentContainer.classList.remove('cmplz-placeholder-' + cssIndex); } } }); //# sourceURL=cmplz-cookiebanner-js-after </script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/elementor/assets/lib/font-awesome/js/v4-shims.min.js?ver=3.35.7" id="font-awesome-4-shim-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=3.35.1" id="elementor-pro-webpack-runtime-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-includes/js/dist/hooks.min.js?ver=dd5603f07f9220ed27f1" id="wp-hooks-js"></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-includes/js/dist/i18n.min.js?ver=c26c3dc7bed366793375" id="wp-i18n-js"></script> <script type="text/rocketlazyloadscript" id="wp-i18n-js-after"> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); //# sourceURL=wp-i18n-js-after </script> <script type="text/rocketlazyloadscript" id="elementor-pro-frontend-js-before"> var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/enicomp.com\/wp-admin\/admin-ajax.php","nonce":"ff49f5ac41","urls":{"assets":"https:\/\/enicomp.com\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/enicomp.com\/wp-json\/"},"settings":{"lazy_load_background_images":true},"popup":{"hasPopUps":false},"shareButtonsNetworks":{"facebook":{"title":"Facebook","has_counter":true},"twitter":{"title":"Twitter"},"linkedin":{"title":"LinkedIn","has_counter":true},"pinterest":{"title":"Pinterest","has_counter":true},"reddit":{"title":"Reddit","has_counter":true},"vk":{"title":"VK","has_counter":true},"odnoklassniki":{"title":"OK","has_counter":true},"tumblr":{"title":"Tumblr"},"digg":{"title":"Digg"},"skype":{"title":"Skype"},"stumbleupon":{"title":"StumbleUpon","has_counter":true},"mix":{"title":"Mix"},"telegram":{"title":"Telegram"},"pocket":{"title":"Pocket","has_counter":true},"xing":{"title":"XING","has_counter":true},"whatsapp":{"title":"WhatsApp"},"email":{"title":"Email"},"print":{"title":"Print"},"x-twitter":{"title":"X"},"threads":{"title":"Threads"}},"facebook_sdk":{"lang":"en_US","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/enicomp.com\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}}; //# sourceURL=elementor-pro-frontend-js-before </script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=3.35.1" id="elementor-pro-frontend-js" data-rocket-defer defer></script> <script type="text/rocketlazyloadscript" data-rocket-src="https://enicomp.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=3.35.1" id="pro-elements-handlers-js" data-rocket-defer defer></script> <!-- end wp_footer --> <script>var rocket_beacon_data = {"ajax_url":"https:\/\/enicomp.com\/wp-admin\/admin-ajax.php","nonce":"f8c8516ccc","url":"https:\/\/enicomp.com\/how-to-scrape-web-data-using-python","is_mobile":false,"width_threshold":1600,"height_threshold":700,"delay":500,"debug":null,"status":{"atf":true,"lrc":true,"preload_fonts":true,"preconnect_external_domain":true},"elements":"img, video, picture, p, main, div, li, svg, section, header, span","lrc_threshold":1800,"preload_fonts_exclusions":["api.fontshare.com","cdn.fontshare.com"],"processed_extensions":["woff2","woff","ttf"],"external_font_exclusions":[],"preconnect_external_domain_elements":["link","script","iframe"],"preconnect_external_domain_exclusions":["static.cloudflareinsights.com","rel=\"profile\"","rel=\"preconnect\"","rel=\"dns-prefetch\"","rel=\"icon\""]}</script><script data-name="wpr-wpr-beacon" src='https://enicomp.com/wp-content/plugins/wp-rocket/assets/js/wpr-beacon.min.js' async></script><script>(()=>{class RocketElementorPreload{constructor(){this.deviceMode=document.createElement("span"),this.deviceMode.id="elementor-device-mode-wpr",this.deviceMode.setAttribute("class","elementor-screen-only"),document.body.appendChild(this.deviceMode)}t(){let t=getComputedStyle(this.deviceMode,":after").content.replace(/"/g,"");this.animationSettingKeys=this.i(t),document.querySelectorAll(".elementor-invisible[data-settings]").forEach(t=>{const e=t.getBoundingClientRect();if(e.bottom>=0&&e.top<=window.innerHeight)try{this.o(t)}catch(t){}})}o(t){const e=JSON.parse(t.dataset.settings),i=e.m||e.animation_delay||0,n=e[this.animationSettingKeys.find(t=>e[t])];if("none"===n)return void t.classList.remove("elementor-invisible");t.classList.remove(n),this.currentAnimation&&t.classList.remove(this.currentAnimation),this.currentAnimation=n;let o=setTimeout(()=>{t.classList.remove("elementor-invisible"),t.classList.add("animated",n),this.l(t,e)},i);window.addEventListener("rocket-startLoading",function(){clearTimeout(o)})}i(t="mobile"){const e=[""];switch(t){case"mobile":e.unshift("_mobile");case"tablet":e.unshift("_tablet");case"desktop":e.unshift("_desktop")}const i=[];return["animation","_animation"].forEach(t=>{e.forEach(e=>{i.push(t+e)})}),i}l(t,e){this.i().forEach(t=>delete e[t]),t.dataset.settings=JSON.stringify(e)}static run(){const t=new RocketElementorPreload;requestAnimationFrame(t.t.bind(t))}}document.addEventListener("DOMContentLoaded",RocketElementorPreload.run)})();</script></body> </html> <!-- Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com --> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me -->