NEWScrapingAnt MCP for Claude Code, Cursor & Windsurf — try it free →
Skip to main content

252 posts tagged with "data extraction"

View All Tags

Python Requests: Ignore SSL Certificate Errors, and the Right Way

· 15 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

Python Requests: Ignore SSL Certificate Errors, and the Right Way

Updated 2026-09-16

Rewritten as a tested reference. Every call shown below was executed by the example package against a local HTTPS server with a self-signed certificate; the output blocks are what it printed (see "How the outputs were captured"). Four recipes from the 2024 version were wrong and are shown failing here: passing an ssl.SSLContext as verify=, REQUESTS_CA_BUNDLE="", "verify=False disables verification globally", and the "certificate pinning" example built on the same invalid verify= call.

You called requests.get() and got this:

requests.exceptions.SSLError: HTTPSConnectionPool(host='localhost', port=8443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate (_ssl.c:1010)')))

The two-line way to make it go away:

import requests, urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
response = requests.get("https://localhost:8443/", verify=False)

And the one-line way to fix it instead of hiding it, when you have the server's certificate or your company's CA file:

response = requests.get("https://localhost:8443/", verify="certs/localhost.pem")

The rest of this page shows what each option does, with the real output, including the recipes you will find elsewhere that do nothing or crash in current requests.

How to Ignore SSL Certificate Errors With Wget (and Trust One Instead)

· 15 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

How to Ignore SSL Certificate Errors With Wget (and Trust One Instead)

Updated 2026-09-16

Rewritten as a tested reference. Every command below was run by the example package against three local HTTPS servers (a self-signed certificate, an expired one, and one issued by a local internal CA) and the output is copied from that run: wget 1.25.0 built with OpenSSL on macOS, plus the same core cases on Debian's GnuTLS build of wget 1.21.3 in a container. The 2024 version presented SSL_CERT_FILE as a wget feature; measured, it works on the OpenSSL build and is ignored on the GnuTLS build. New: the error messages and their causes on both builds, .wgetrc, --ca-directory, --pinnedpubkey, the internal-CA case, exit codes. Gone: a stray "Meta Description" section, unsourced breach statistics, and a wrapper script.

The flag you are looking for, run against the package's self-signed test server (substitute your URL):

wget -nv -O- --no-check-certificate https://localhost:8443/index.html
WARNING: cannot verify localhost's certificate, issued by 'CN=localhost':
Self-signed certificate encountered.
<!doctype html><title>self-signed fixture</title><p>served over HTTPS</p>
<time> URL:https://localhost:8443/index.html [74/74] -> "-" [1]
exit=0

The download proceeds and the warning stays. The one-line way to make the error go away without switching verification off, when you have the server's certificate or your CA file:

wget -nv -O- --ca-certificate=certs/localhost.pem https://localhost:8443/index.html
<!doctype html><title>self-signed fixture</title><p>served over HTTPS</p>
<time> URL:https://localhost:8443/index.html [74/74] -> "-" [1]
exit=0

The rest of this page shows what each option does with the real output, how to read the different error messages, how to make a setting permanent, and what does and does not work depending on how your wget was built. Prefer curl? See How to ignore SSL certificate errors in cURL; the same problem in Python is in Python Requests: ignore SSL certificate errors.

Scrape a Dynamic Website with C++

· 16 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

Scrape a Dynamic Website with C++

Web scraping has become an indispensable tool for acquiring data from websites, especially in the era of big data and data-driven decision-making. However, the complexity of scraping has increased with the advent of dynamic websites, which generate content on-the-fly using JavaScript and AJAX. Unlike static websites, which serve pre-built HTML pages, dynamic websites respond to user interactions and real-time data updates, making traditional scraping techniques ineffective.

To navigate this landscape, developers need to understand the intricacies of client-side and server-side rendering, the role of JavaScript frameworks such as React, Angular, and Vue.js, and the importance of AJAX for asynchronous data loading. This knowledge is crucial for choosing the right tools and techniques to effectively scrape dynamic websites. In this report, we delve into the methodologies for scraping dynamic websites using C++, exploring essential libraries like libcurl, Gumbo, and Boost, and providing a detailed, step-by-step guide to building robust web scrapers.

Scrape a Dynamic Website with C#

· 16 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

Scrape a Dynamic Website with C#

Dynamic websites have become increasingly prevalent due to their ability to deliver personalized and interactive content to users. Unlike static websites, which serve pre-built HTML pages, dynamic websites generate content on-the-fly based on user interactions, database queries, or real-time data. This dynamic nature is achieved through the use of server-side programming languages such as PHP, Ruby, and Python, as well as client-side JavaScript frameworks like React, Angular, and Vue.js.

Dynamic websites are characterized by asynchronous content loading, client-side rendering, real-time updates, personalized content, and complex DOM structures. These features enhance user experience but also introduce significant challenges for web scraping. Traditional scraping tools that rely on static HTML parsing often fall short when dealing with dynamic websites, necessitating the use of more sophisticated methods and tools.

To effectively scrape dynamic websites using C#, developers must employ specialized tools such as Selenium WebDriver and PuppeteerSharp, which can interact with web pages as if they were real users, executing JavaScript and waiting for content to load. These tools, along with proper wait mechanisms and dynamic element location strategies, enable the extraction of data from even the most complex and interactive web applications.

Scrape a Dynamic Website with Go

· 16 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

Scrape a Dynamic Website with Go

Web scraping has become an essential technique for data extraction, particularly with the rise of dynamic websites that deliver content through AJAX and JavaScript. Traditional methods of web scraping often fall short when dealing with these modern web architectures, necessitating more advanced approaches. Using the Go programming language for web scraping offers several advantages, including high performance, robust concurrency support, and a growing ecosystem of libraries specifically designed for this task.

Go, often referred to as Golang, is a statically typed, compiled language that excels in performance and efficiency. Its compilation to machine code results in faster execution times compared to interpreted languages like Python. This is particularly beneficial for large-scale web scraping projects where speed and resource utilization are critical. Additionally, Go's built-in support for concurrency through goroutines enables developers to scrape multiple web pages concurrently, making it highly scalable.

This report delves into the techniques and best practices for scraping dynamic websites using Go. It covers essential topics such as identifying and mimicking AJAX requests, utilizing headless browsers, and handling infinite scrolling. Furthermore, it provides insights into managing browser dependencies, optimizing performance, and adhering to ethical scraping practices. By the end of this report, you will have a comprehensive understanding of how to effectively scrape dynamic websites using Go, leveraging its unique features to build efficient and scalable web scraping solutions.

Scrape a Dynamic Website with PHP

· 10 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

Scrape a Dynamic Website with PHP

Dynamic websites have become the norm in modern web development, providing interactive and personalized experiences by generating content on-the-fly based on user interactions, database queries, or real-time data. Unlike static websites that serve pre-built HTML pages, dynamic sites rely heavily on server-side processing and client-side JavaScript to deliver tailored content. This dynamic nature poses significant challenges when it comes to web scraping, as traditional methods of parsing static HTML fall short.

Dynamic websites often utilize sophisticated JavaScript frameworks such as React, Angular, and Vue.js, and technologies like AJAX to update content asynchronously without refreshing the page. This complexity requires advanced scraping techniques that can handle JavaScript execution, asynchronous loading, user interaction simulation, and more. To effectively scrape dynamic websites using PHP, developers need to leverage tools such as headless browsers, API-based solutions, and JavaScript engines.

This guide offers a comprehensive overview of the challenges and techniques involved in scraping dynamic websites with PHP. It explores various tools and methods, including Puppeteer, Selenium, Symfony Panther, and WebScrapingAPI, providing practical code examples and best practices to ensure successful data extraction.

How to read from MongoDB to Pandas

· 9 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

How to read from MongoDB to Pandas

The ability to efficiently read and manipulate data is crucial for effective data analysis and application development. MongoDB, a leading NoSQL database, is renowned for its flexibility and scalability, making it a popular choice for modern applications. However, to leverage the full potential of MongoDB data for analysis, it is essential to seamlessly integrate it with powerful data manipulation tools like Pandas in Python.

This comprehensive guide delves into the various methods of reading data from MongoDB into Pandas DataFrames, providing a detailed roadmap for developers and data analysts. We will explore the use of PyMongo, the official MongoDB driver for Python, which allows for straightforward interactions with MongoDB. Additionally, we will discuss PyMongoArrow, a tool designed for efficient data transfer between MongoDB and Pandas, offering significant performance improvements. For handling large datasets, we will cover chunking techniques and the use of MongoDB's Aggregation Framework to preprocess data before loading it into Pandas.

Guide to Scraping and Storing Data to MongoDB Using Python

· 15 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

Guide to Scraping and Storing Data to MongoDB Using Python

Data is a critical asset, and the ability to efficiently extract and store it is a valuable skill. Web scraping, the process of extracting data from websites, is a fundamental technique for data scientists, analysts, and developers. Python, with its powerful libraries such as BeautifulSoup and Scrapy, provides a robust environment for web scraping. MongoDB, a NoSQL database, complements this process by offering a flexible and scalable solution for storing the scraped data. This comprehensive guide will walk you through the steps of scraping web data using Python and storing it in MongoDB, leveraging the capabilities of BeautifulSoup, Scrapy, and PyMongo. Understanding these tools is not only essential for data extraction but also for efficiently managing and analyzing large datasets. This guide is designed to be SEO-friendly and includes detailed explanations and code samples to help you seamlessly integrate web scraping and data storage into your projects. (source, source, source, source, source)

Guide to Cleaning Scraped Data and Storing it in PostgreSQL Using Python

· 15 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

Guide to Cleaning Scraped Data and Storing it in PostgreSQL Using Python

In today's data-driven world, the ability to efficiently clean and store data is paramount for any data scientist or developer. Scraped data, often messy and inconsistent, requires meticulous cleaning before it can be effectively used for analysis or storage. Python, with its robust libraries such as Pandas, NumPy, and BeautifulSoup4, offers a powerful toolkit for data cleaning. PostgreSQL, a highly efficient open-source database, is an ideal choice for storing this cleaned data. This research report provides a comprehensive guide on setting up a Python environment for data cleaning, connecting to a PostgreSQL database, and ensuring data integrity through various cleaning techniques. With detailed code samples and explanations, this guide is designed to be both practical and SEO-friendly, helping readers navigate the complexities of data preprocessing and storage with ease (Python Official Website, Anaconda, GeeksforGeeks).

Crawlee for Python Tutorial with Examples

· 9 min read
Oleg Kulyk
Co-Founder @ ScrapingAnt

Crawlee for Python Tutorial with Examples

Web scraping has become an essential tool for data extraction in various industries, from market analysis to academic research. One of the most effective libraries for Python available today is Crawlee, which provides a robust framework for both simple and complex web scraping tasks. Crawlee supports various scraping scenarios, including dealing with static web pages using BeautifulSoup and handling JavaScript-rendered content with Playwright. In this tutorial, we will delve into how to set up and effectively use Crawlee for Python, providing clear examples and best practices to ensure efficient and scalable web scraping operations. This comprehensive guide aims to equip you with the knowledge to build your own web scrapers, whether you are just getting started or looking to implement advanced features. For more detailed documentation, you can visit the Crawlee Documentation and the Crawlee PyPI.