How can I approach web scrapping by using Selenium and Python programming language?

187    Asked by ColinPayne in QA Testing , Asked on May 9, 2024

There is a scenario where I asked for a Task in which I need to extract data from a website by using selenium and Python for a data analysis project. This website has a dynamically loaded table that updates with new data every few seconds. How can I approach this scenario by using the selenium for web scrapping? 

Answered by Coleman Garvin

In the context of selenium, here is how you can approach this scenario:-

Identify the target element

First, you would need to inspect the webpage to identify the specific element that contains the dynamically updated data. You can use the browser developer tools to find the CSS selector or other locators for this element.

Implement a loop with refresh logic

You can use a loop to repeatedly fetch the data from the target element at regular intervals. You can achieve this by using the “while” loop or by just scheduling periodic tasks within the “schedule” or “time” module.

Capture updated data

Within the loop, you can use the selenium to extract the data from the Target element.

Handle exceptions and delay

You can implement error handling to handle any exceptions that may occur during the time of scraping, such as element not found or stake element reference.

Here is the example given of how you can go through with the process:-

From selenium import webdriver
Import time
# Initialize Chrome WebDriver
Driver = webdriver.Chrome()
Try:
    # Navigate to the target webpage
    Driver.get(https://example.com)
    # Define CSS selector or XPath for the target element (e.g., table)
    Target_element_selector = “table#dynamic-table”
    # Loop to scrape updated data every 5 seconds (adjust as needed)
    While True:
        # Find the target element
        Target_element = driver.find_element_by_css_selector(target_element_selector)
        # Extract data from the target element (replace with your scraping logic)
        Scraped_data = target_element.text
        Print(“Scraped Data:”, scraped_data)
        # Wait for 5 seconds before refreshing and scraping again
        Time.sleep(5)
Except Exception as e:
    Print(“An error occurred during scraping:”, e)
Finally:
    # Quit the WebDriver to release resources
    Driver.quit()
Here is the example given by using java programming language:-
Import org.openqa.selenium.By;
Import org.openqa.selenium.WebDriver;
Import org.openqa.selenium.WebElement;
Import org.openqa.selenium.chrome.ChromeDriver;
Import java.util.concurrent.TimeUnit;
Public class DynamicDataScraper {
    Public static void main(String[] args) {
        // Set the path to the ChromeDriver executable
        System.setProperty(“webdriver.chrome.driver”, “path_to_chromedriver.exe”); // Update with your ChromeDriver path
        // Initialize Chrome WebDriver
        WebDriver driver = new ChromeDriver();
        Try {
            // Navigate to the target webpage
            Driver.get(https://example.com);
            // Set an initial wait time to ensure page load
            Driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            // Define CSS selector or XPath for the target element (e.g., table)
            String targetElementSelector = “table#dynamic-table”;
            // Loop to scrape updated data every 5 seconds (adjust as needed)
            While (true) {
                // Find the target element
                WebElement targetElement = driver.findElement(By.cssSelector(targetElementSelector));
                // Extract data from the target element (replace with your scraping logic)
                String scrapedData = targetElement.getText();
                System.out.println(“Scraped Data: “ + scrapedData);
                // Wait for 5 seconds before refreshing and scraping again
                Thread.sleep(5000); // Sleep for 5 seconds (adjust as needed)
            }
        } catch (Exception e) {
            System.out.println(“An error occurred during scraping: “ + e.getMessage());
        } finally {
            // Quit the WebDriver to release resources
            Driver.quit();
        }
    }
}

Here is the example given in HTML:-




<meta</span> charset=”UTF-8”>

<meta</span> name=”viewport” content=”width=device-width, initial-scale=1.0”>

Dynamically Updated Data



  Dynamically Updated Data

 


   


     


     


     


   


   


     


     


     


Your Answer

ID Name Price
1 Product A $10