<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ScrapingBee – The Best Web Scraping API</title><link>https://www.scrapingbee.com/</link><description>Recent content on ScrapingBee – The Best Web Scraping API</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 23 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://www.scrapingbee.com/index.xml" rel="self" type="application/rss+xml"/><item><title>How to handle infinite scroll pages in C#</title><link>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-c/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-c/</guid><description>&lt;p>Nowadays, most websites use different methods and techniques to decrease the load and data served to their clients’ devices. One of these techniques is the infinite scroll.&lt;/p>
&lt;p>In this tutorial, we will see how we can scrape &lt;a href="https://www.scrapingbee.com/blog/infinite-scroll-puppeteer/" >infinite scroll&lt;/a> web pages using a &lt;a href="https://www.scrapingbee.com/documentation/js-scenario/" >js_scenario&lt;/a>, specifically the &lt;code>scroll_y&lt;/code> and &lt;code>scroll_x&lt;/code> features. And we will use &lt;a href="https://demo.scrapingbee.com/infinite_scroll.html" >this page&lt;/a> as a demo. Only 9 boxes are loaded when we first open the page, but as soon as we scroll to the end of it, we will load 9 more, and that will keep happening each time we scroll to the bottom of the page.&lt;/p></description></item><item><title>Adding items to an eCommerce shopping cart</title><link>https://www.scrapingbee.com/tutorials/adding-items-to-an-ecommerce-shopping-cart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/adding-items-to-an-ecommerce-shopping-cart/</guid><description>&lt;p>Here is a quick tutorial on how you may add items to a shopping cart on eCommerce websites using ScrapingBee API via a JS scenario on Python.&lt;/p>
&lt;p>1. You would need to identify any CSS selector that uniquely identifies the button or 'add to cart' element you wish to click. This can be done via the inspect element option on any browser, more details can be found on this tutorial:&lt;br>&lt;a href="https://www.scrapingbee.com/tutorials/how-to-extract-css-selectors-using-chrome/" >https://www.scrapingbee.com/tutorials/how-to-extract-css-selectors-using-chrome/&lt;/a>&lt;/p></description></item><item><title>Data extraction in C#</title><link>https://www.scrapingbee.com/tutorials/data-extraction-in-c/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/data-extraction-in-c/</guid><description>&lt;p>One of the most important features of ScrapingBee, is the ability to extract exact data without need to post-process the request’s content using external libraries.&lt;/p>
&lt;p>We can use this feature by specifying an additional parameter with the name &lt;code>extract_rules&lt;/code>. We specify the label of elements we want to extract, their CSS Selectors and ScrapingBee will do the rest!&lt;/p>
&lt;p>Let’s say that we want to extract the title &amp;amp; the subtitle of the &lt;a href="https://www.scrapingbee.com/documentation/data-extraction/" >data extraction documentation page&lt;/a>. Their CSS selectors are &lt;code>h1&lt;/code> and &lt;code>span.text-[20px]&lt;/code> respectively. To make sure that they’re the correct ones, you can use the JavaScript function: &lt;code>document.querySelector(&amp;quot;CSS_SELECTOR&amp;quot;)&lt;/code> in that page’s developer tool’s console.&lt;/p></description></item><item><title>How to extract content from a Shadow DOM</title><link>https://www.scrapingbee.com/tutorials/how-to-extract-content-from-a-shadow-dom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-extract-content-from-a-shadow-dom/</guid><description>&lt;p>Certain websites may hide all of their page content inside a shadow root, which makes scraping them quite challenging. This is because most scrapers cannot directly access HTML content embedded within a shadow root. Here is a guide on how you can extract such data via ScrapingBee.&lt;/p>
&lt;hr>
&lt;p>We will use a quite popular site as an example: &lt;a href="http://www.msn.com/" >www.msn.com&lt;/a>&lt;br>If you inspect any article on this page, let’s use this &lt;a href="https://www.msn.com/en-us/lifestyle/lifestyle-buzz/kate-middleton-and-prince-william-s-new-home-forest-lodge-almost-went-to-a-different-royal-couple/ar-AA1KNPyI?ocid=hpmsn&amp;amp;amp;cvid=68a6f93e8ed04131b40f3dc49ecfba6c&amp;amp;amp;ei=18" >one&lt;/a>. You can see that all of its contents are inside a shadow root:&lt;br>&lt;img src="https://www.scrapingbee.com/uploads/image-11.png" alt="">&lt;/p></description></item><item><title>How to extract curl requests from Chrome</title><link>https://www.scrapingbee.com/tutorials/how-to-extract-curl-requests-from-chrome/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-extract-curl-requests-from-chrome/</guid><description>&lt;ol>
&lt;li>Open the &lt;a href="https://developer.chrome.com/docs/devtools/network/" >Network&lt;/a> tab in the &lt;a href="https://developer.chrome.com/docs/devtools/overview/" >DevTools&lt;/a>&lt;/li>
&lt;li>Right click (or Ctrl-click) a request&lt;/li>
&lt;li>Click &amp;quot;Copy&amp;quot; → &amp;quot;Copy as cURL&amp;quot;&lt;/li>
&lt;li>You can now paste it in the relevant &lt;a href="https://www.scrapingbee.com/curl-converter/" >curl converter&lt;/a> to translate it in the language you want&lt;/li>
&lt;/ol>
&lt;img src="https://www.scrapingbee.com/uploads/cleanshot-2022-08-08-at-16-54-342x.png" width="984" height="1228" /></description></item><item><title>How to extract curl requests from Firefox</title><link>https://www.scrapingbee.com/tutorials/how-to-extract-curl-requests-from-firefox/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-extract-curl-requests-from-firefox/</guid><description>&lt;ol>
&lt;li>Open the &lt;a href="https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor" >Network Monitor&lt;/a> tab in the &lt;a href="https://developer.mozilla.org/en-US/docs/Tools" >Developer Tools&lt;/a>&lt;/li>
&lt;li>Right click (or Ctrl-click) a request&lt;/li>
&lt;li>Click &amp;quot;Copy&amp;quot; → &amp;quot;Copy as cURL&amp;quot;&lt;/li>
&lt;li>You can now paste it in the relevant &lt;a href="https://www.scrapingbee.com/curl-converter/" >curl converter&lt;/a> to translate it in the language you want&lt;/li>
&lt;/ol>
&lt;img src="https://www.scrapingbee.com/uploads/cleanshot-2022-08-08-at-17-01-292x.png" width="2314" height="676" /></description></item><item><title>How to extract curl requests from Safari</title><link>https://www.scrapingbee.com/tutorials/how-to-extract-curl-requests-from-safari/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-extract-curl-requests-from-safari/</guid><description>&lt;ol>
&lt;li>Open the &lt;a href="https://support.apple.com/en-us/guide/safari-developer/dev1f3525e58/mac" >Network&lt;/a> tab in the &lt;a href="https://support.apple.com/en-us/guide/safari-developer/dev073038698/mac" >Developer Tools&lt;/a>&lt;/li>
&lt;li>Right click (or Ctrl-click or two-finger click) a request&lt;/li>
&lt;li>Click &amp;quot;Copy as cURL&amp;quot; in the dropdown menu&lt;/li>
&lt;li>You can now paste it in the relevant &lt;a href="https://www.scrapingbee.com/curl-converter/" >curl converter&lt;/a> to translate it in the language you want&lt;/li>
&lt;/ol>
&lt;img src="https://www.scrapingbee.com/uploads/cleanshot-2022-08-08-at-16-48-052x.png" width="1508" height="446" /></description></item><item><title>How to remove any element from the HTML response</title><link>https://www.scrapingbee.com/tutorials/how-to-remove-any-element-from-the-html-response/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-remove-any-element-from-the-html-response/</guid><description>&lt;p>Sometimes you may need to remove specific HTML elements from the page's content, either to get cleaner results for your &lt;a href="https://www.scrapingbee.com/documentation/data-extraction/" >data extraction rules&lt;/a>, or to simply delete unnecessary content from your response.&lt;/p>
&lt;p>To achieve that using ScrapingBee, you can use a&lt;a href="https://www.scrapingbee.com/documentation/js-scenario/" >JavaScript Scenario&lt;/a>, with an evaluate instruction and execute this custom JS code:&lt;/p>
&lt;pre tabindex="0">&lt;code>document.querySelectorAll(&amp;#34;ELEMENT-CSS-SELECTOR&amp;#34;).forEach(function(e){e.remove();});​
&lt;/code>&lt;/pre>&lt;p>For example, to remove all of the &amp;lt;style&amp;gt; elements from the response, you can use this JavaScript Scenario:&lt;/p></description></item><item><title>Scrolling and loading more content via a JS scenario</title><link>https://www.scrapingbee.com/tutorials/scrolling-and-loading-more-content-via-a-js-scenario/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/scrolling-and-loading-more-content-via-a-js-scenario/</guid><description>&lt;p>Certain websites may require you to scroll in order to load more results on the page or within a specific element. &lt;br>&lt;br>&lt;img src="https://www.scrapingbee.com/uploads/image-1.png" alt="">&lt;br>&lt;br>This is a quick guide on how to achieve different scrolling behaviors using JavaScript scenario.&lt;br>&lt;strong>*Note that the JavaScript Scenario has a maximum execution time limit of 40 seconds. Requests exceeding this limit will result in a timeout:&lt;/strong> &lt;a href="https://www.scrapingbee.com/documentation/js-scenario/#timeout" >&lt;strong>https://www.scrapingbee.com/documentation/js-scenario/#timeout&lt;/strong>&lt;/a>&lt;/p>
&lt;hr>
&lt;h3 id="1-scrolling-a-specific-element">1. Scrolling a Specific Element&lt;/h3>
&lt;p>Some page elements, such as tables or graphs, may contain content that only becomes visible after scrolling. &lt;br>&lt;img src="https://www.scrapingbee.com/uploads/image-8.png" alt="">&lt;/p></description></item><item><title>Scrolling via page API</title><link>https://www.scrapingbee.com/tutorials/scrolling-via-page-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/scrolling-via-page-api/</guid><description>&lt;p>Some pages load more content only after you click “Load more results” or scroll and wait. In reality, the page often fetches additional results from its own API. If ScrapingBee can’t load those results, you can target the site’s API URL directly. &lt;br>&lt;br>Here’s how to do that using this URL as an example: &lt;a href="https://www.reuters.com/technology" >https://www.reuters.com/technology&lt;/a>&lt;br>&lt;img src="https://www.scrapingbee.com/uploads/image-2.png" alt="">&lt;br>&lt;strong>*Note that the JavaScript Scenario has a maximum execution time limit of 40 seconds. Requests exceeding this limit will result in a timeout:&lt;/strong> &lt;a href="https://www.scrapingbee.com/documentation/js-scenario/#timeout" >&lt;strong>https://www.scrapingbee.com/documentation/js-scenario/#timeout&lt;/strong>&lt;/a>&lt;/p></description></item><item><title>Make concurrent requests in C#</title><link>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-c/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-c/</guid><description>&lt;p>Our API is designed to allow you to have multiple concurrent scraping operations. That means you can speed up scraping for hundreds, thousands or even millions of pages per day, depending on your plan.&lt;/p>
&lt;p>The more concurrent requests limit you have the more calls you can have active in parallel, and the faster you can scrape.&lt;/p>
&lt;pre tabindex="0">&lt;code>using System;
using System.IO;
using System.Net;
using System.Web;
using System.Threading;

namespace test {
 class test{

 private static string BASE_URL = &amp;#34;https://app.scrapingbee.com/api/v1/?&amp;#34;;
 private static string API_KEY = &amp;#34;YOUR-API-KEY&amp;#34;;

 public static string Get(string uri)
 {
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
 request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

 using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
 using(Stream stream = response.GetResponseStream())
 using(StreamReader reader = new StreamReader(stream))
 {
 return reader.ReadToEnd();
 }
 }

 public static bool Scrape(string uri, string path) {
 Console.WriteLine(&amp;#34;Scraping &amp;#34; + uri);
 var query = HttpUtility.ParseQueryString(string.Empty);
 query[&amp;#34;api_key&amp;#34;] = API_KEY;
 query[&amp;#34;url&amp;#34;] = uri;
 string queryString = query.ToString(); // Transforming the URL queries to string

 string output = Get(BASE_URL+queryString); // Make the request
 try {
 using (StreamWriter sw = File.CreateText(path))
 {
 sw.Write(output);
 }
 return true;
 } catch {return false;}
 }

 public static void Main(string[] args) {
 Thread thread1 = new Thread(() =&amp;gt; Scrape(&amp;#34;https://scrapingbee.com/blog&amp;#34;, &amp;#34;./scrapingbeeBlog.html&amp;#34;));
 Thread thread2 = new Thread(() =&amp;gt; Scrape(&amp;#34;https://scrapingbee.com/documentation&amp;#34;, &amp;#34;./scrapingbeeDocumentation.html&amp;#34;));
 thread1.Start();
 thread2.Start();

 }
 }
}
&lt;/code>&lt;/pre></description></item><item><title>Make concurrent requests in Go</title><link>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-go/</guid><description>&lt;p>Our API is designed to allow you to have multiple concurrent scraping operations. That means you can speed up scraping for hundreds, thousands or even millions of pages per day, depending on your plan.&lt;/p>
&lt;p>The more concurrent requests limit you have the more calls you can have active in parallel, and the faster you can scrape.&lt;/p>
&lt;p>Making concurrent requests in GoLang is as easy as adding a “go” keyword before our scraping functions! The code below will make two concurrent requests to ScrapingBee’s pages, and save the content in an HTML file.&lt;/p></description></item><item><title>Make concurrent requests in NodeJS</title><link>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-nodejs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-nodejs/</guid><description>&lt;p>Our API is designed to allow you to have multiple concurrent scraping operations. That means you can speed up scraping for hundreds, thousands or even millions of pages per day, depending on your plan.&lt;/p>
&lt;p>The more concurrent requests limit you have the more calls you can have active in parallel, and the faster you can scrape.&lt;/p>
&lt;p>Making concurrent requests in NodeJS is very straightforward using Cluster module. The code below will make two concurrent requests to ScrapingBee’s pages, and save the content in an HTML file.&lt;/p></description></item><item><title>Make concurrent requests in PHP</title><link>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-php/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-php/</guid><description>&lt;p>Our API is designed to allow you to have multiple concurrent scraping operations. That means you can speed up scraping for hundreds, thousands or even millions of pages per day, depending on your plan.&lt;/p>
&lt;p>The more concurrent requests limit you have the more calls you can have active in parallel, and the faster you can scrape.&lt;/p>
&lt;p>Making concurrent requests in PHP is as easy as creating threads for our scraping functions! The code below will make two concurrent requests to ScrapingBee’s pages and display the HTML content of each page:&lt;/p></description></item><item><title>Make concurrent requests in Python</title><link>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-python/</guid><description>&lt;p>Our API is designed to allow you to have multiple concurrent scraping operations. That means you can speed up scraping for hundreds, thousands or even millions of pages per day, depending on your plan.&lt;/p>
&lt;p>The more concurrent requests limit you have the more calls you can have active in parallel, and the faster you can scrape.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> concurrent.futures
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> time
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> scrapingbee &lt;span style="color:#f92672">import&lt;/span> ScrapingBeeClient &lt;span style="color:#75715e"># Importing SPB&amp;#39;s client&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>client &lt;span style="color:#f92672">=&lt;/span> ScrapingBeeClient(api_key&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#39;YOUR-API-KEY&amp;#39;&lt;/span>) &lt;span style="color:#75715e"># Initialize the client with your API Key, and using screenshot_full_page parameter to take a screenshot!&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>MAX_RETRIES &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">5&lt;/span> &lt;span style="color:#75715e"># Setting the maximum number of retries if we have failed requests to 5.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>MAX_THREADS &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>urls &lt;span style="color:#f92672">=&lt;/span> [&lt;span style="color:#e6db74">&amp;#34;http://scrapingbee.com/blog&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;http://reddit.com/&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">scrape&lt;/span>(url):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">for&lt;/span> _ &lt;span style="color:#f92672">in&lt;/span> range(MAX_RETRIES):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> response &lt;span style="color:#f92672">=&lt;/span> client&lt;span style="color:#f92672">.&lt;/span>get(url, params&lt;span style="color:#f92672">=&lt;/span>{&lt;span style="color:#e6db74">&amp;#39;screenshot&amp;#39;&lt;/span>: &lt;span style="color:#66d9ef">True&lt;/span>}) &lt;span style="color:#75715e"># Scrape!&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> response&lt;span style="color:#f92672">.&lt;/span>ok: &lt;span style="color:#75715e"># If we get a successful request&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">with&lt;/span> open(&lt;span style="color:#e6db74">&amp;#34;./&amp;#34;&lt;/span>&lt;span style="color:#f92672">+&lt;/span>str(time&lt;span style="color:#f92672">.&lt;/span>time())&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#e6db74">&amp;#34;screenshot.png&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wb&amp;#34;&lt;/span>) &lt;span style="color:#66d9ef">as&lt;/span> f:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f&lt;span style="color:#f92672">.&lt;/span>write(response&lt;span style="color:#f92672">.&lt;/span>content) &lt;span style="color:#75715e"># Save the screenshot in the file &amp;#34;screenshot.png&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">break&lt;/span> &lt;span style="color:#75715e"># Then get out of the retry loop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>: &lt;span style="color:#75715e"># If we get a failed request, then we continue the loop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(response&lt;span style="color:#f92672">.&lt;/span>content)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">with&lt;/span> concurrent&lt;span style="color:#f92672">.&lt;/span>futures&lt;span style="color:#f92672">.&lt;/span>ThreadPoolExecutor(max_workers&lt;span style="color:#f92672">=&lt;/span>MAX_THREADS) &lt;span style="color:#66d9ef">as&lt;/span> executor:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> executor&lt;span style="color:#f92672">.&lt;/span>map(scrape, urls)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Make concurrent requests in Ruby</title><link>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-ruby/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/make-concurrent-requests-in-ruby/</guid><description>&lt;p>Our API is designed to allow you to have multiple concurrent scraping operations. That means you can speed up scraping for hundreds, thousands or even millions of pages per day, depending on your plan.&lt;/p>
&lt;p>The more concurrent requests limit you have the more calls you can have active in parallel, and the faster you can scrape.&lt;/p>
&lt;p>Making concurrent requests in Ruby is as easy as creating threads for our scraping functions! The code below will make two concurrent requests to ScrapingBee’s pages and display the HTML content of each page:&lt;/p></description></item><item><title>Retry failed requests in C#</title><link>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-c/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-c/</guid><description>&lt;p>For most websites, your first requests will always be successful, however, it’s inevitable that some of them will fail. For these failed requests, the API will return a 500 status code and won’t charge you for the request.&lt;/p>
&lt;p>In this case, we can make our code retry to make the requests until we reach a maximum number of retries that we set:&lt;/p>
&lt;pre tabindex="0">&lt;code>using System;
using System.IO;
using System.Net;
using System.Web;
using System.Collections.Generic;

namespace test {
 class test{

 private static string BASE_URL = @&amp;#34;https://app.scrapingbee.com/api/v1/?&amp;#34;;
 private static string API_KEY = &amp;#34;YOUR-API-KEY&amp;#34;;

 public static Dictionary&amp;lt;string, dynamic&amp;gt; Get(string uri)
 {
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
 request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

 using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
 using(Stream stream = response.GetResponseStream())
 using(StreamReader reader = new StreamReader(stream))
 {
 Dictionary&amp;lt;string, dynamic&amp;gt; OutputList = new Dictionary&amp;lt;string, dynamic&amp;gt;();
 OutputList.Add(&amp;#34;StatusCode&amp;#34;, response.StatusCode);
 OutputList.Add(&amp;#34;Response&amp;#34;, reader.ReadToEnd());
 return OutputList;
 }
 }

 public static void Main(string[] args) {

 var query = HttpUtility.ParseQueryString(string.Empty);
 query[&amp;#34;api_key&amp;#34;] = API_KEY;
 query[&amp;#34;url&amp;#34;] = @&amp;#34;https://scrapingbee.com/blog&amp;#34;;
 string queryString = query.ToString(); // Transforming the URL queries to string

 const int MAX_RETRIES = 5; // Set the maximum number of retries we&amp;#39;re looking to execute

 for (int i = 0; i &amp;lt; MAX_RETRIES; i++) {
 try {

 var output = Get(BASE_URL+queryString); // Make the request
 var StatusCode = output[&amp;#34;StatusCode&amp;#34;];
 var content = output[&amp;#34;Response&amp;#34;];

 if (StatusCode == HttpStatusCode.OK) { // If the response is 200/OK
 string path = @&amp;#34;./ScrapingBeeBlog.html&amp;#34;; // Output file
 // Create a file to write to.
 using (StreamWriter sw = File.CreateText(path))
 {
 sw.Write(output);
 }
 Console.WriteLine(&amp;#34;Done!&amp;#34;);
 break;
 } else {
 Console.WriteLine(&amp;#34;Failed request; Status code: &amp;#34; + StatusCode);
 Console.WriteLine(&amp;#34;Retrying...&amp;#34;);
 }

 } catch (Exception ex) {
 Console.WriteLine(&amp;#34;An error has occured:&amp;#34; + ex.Message);
 Console.WriteLine(&amp;#34;Retrying...&amp;#34;);
 }

 }

 }
 }
}
&lt;/code>&lt;/pre></description></item><item><title>Retry failed requests in Go</title><link>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-go/</guid><description>&lt;p>For most websites, your first requests will always be successful, however, it’s inevitable that some of them will fail. For these failed requests, the API will return a 500 status code and won’t charge you for the request.&lt;/p>
&lt;p>In this case, we can make our code retry to make the requests until we reach a maximum number of retries that we set:&lt;/p>
&lt;pre tabindex="0">&lt;code>package main

import (
 &amp;#34;fmt&amp;#34;
 &amp;#34;io&amp;#34;
 &amp;#34;net/http&amp;#34;
 &amp;#34;os&amp;#34;
)

const API_KEY = &amp;#34;YOUR-API-KEY&amp;#34;
const SCRAPINGBEE_URL = &amp;#34;https://app.scrapingbee.com/api/v1&amp;#34;

func save_page_to_html(target_url string, file_path string) (interface{}, error) { // Using sync.Waitgroup to wait for goroutines to finish

 req, err := http.NewRequest(&amp;#34;GET&amp;#34;, SCRAPINGBEE_URL, nil)
 if err != nil {
 return nil, fmt.Errorf(&amp;#34;Failed to build the request: %s&amp;#34;, err)
 }

 q := req.URL.Query()
 q.Add(&amp;#34;api_key&amp;#34;, API_KEY)
 q.Add(&amp;#34;url&amp;#34;, target_url)
 req.URL.RawQuery = q.Encode()

 client := &amp;amp;http.Client{}
 resp, err := client.Do(req)
 if err != nil {
 return nil, fmt.Errorf(&amp;#34;Failed to request ScrapingBee: %s&amp;#34;, err)
 }
 defer resp.Body.Close()

 if resp.StatusCode != http.StatusOK {
 return nil, fmt.Errorf(&amp;#34;Error request response with status code %d&amp;#34;, resp.StatusCode)
 }

 bodyBytes, err := io.ReadAll(resp.Body)

 file, err := os.Create(file_path)
 if err != nil {
 return nil, fmt.Errorf(&amp;#34;Couldn&amp;#39;t create the file &amp;#34;, err)
 }

 l, err := file.Write(bodyBytes) // Write content to the file.
 if err != nil {
 file.Close()
 return nil, fmt.Errorf(&amp;#34;Couldn&amp;#39;t write content to the file &amp;#34;, err)
 }
 err = file.Close()
 if err != nil {
 return nil, fmt.Errorf(&amp;#34;Couldn&amp;#39;t close the file &amp;#34;, err)
 }

 return l, nil
}

func main() {

 MAX_RETRIES := 5 // Set a maximum number of retries

 target_url := &amp;#34;https://www.scrapingbee.com&amp;#34;

 for i := 0; i &amp;lt; MAX_RETRIES; i++ {
 saved_screenshot, err := save_page_to_html(target_url,&amp;#34;./scrapingbee.html&amp;#34;)
 if err != nil {
 fmt.Println(err)
 fmt.Println(&amp;#34;Retrying...&amp;#34;)
 } else {
 fmt.Println(&amp;#34;Done!&amp;#34;, saved_screenshot)
 break
 }
 }

}
&lt;/code>&lt;/pre></description></item><item><title>Retry failed requests in PHP</title><link>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-php/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-php/</guid><description>&lt;p>For most websites, your first requests will always be successful, however, it’s inevitable that some of them will fail. For these failed requests, the API will return a 500 status code and won’t charge you for the request.&lt;/p>
&lt;p>In this case, we can make our code retry to make the requests until we reach a maximum number of retries that we set:&lt;/p>
&lt;pre tabindex="0">&lt;code>&amp;lt;?php

// Get cURL resource
$ch = curl_init();

// Set base url &amp;amp; API key
$BASE_URL = &amp;#34;https://app.scrapingbee.com/api/v1/?&amp;#34;;
$API_KEY = &amp;#34;YOUR-API-KEY&amp;#34;;

// Set max retries:
$MAX_RETRIES = 5;

// Set parameters
$parameters = array(
 &amp;#39;api_key&amp;#39; =&amp;gt; $API_KEY,
 &amp;#39;url&amp;#39; =&amp;gt; &amp;#39;https://www.scrapingbee.com&amp;#39; // The URL to scrape
);
// Building the URL query
$query = http_build_query($parameters);

// Set the URL for cURL
curl_setopt($ch, CURLOPT_URL, $BASE_URL.$query);

// Set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, &amp;#39;GET&amp;#39;);

// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

for ($i = 0; $i &amp;lt; $MAX_RETRIES; $i++) {

 // Send the request and save response to $response
 $response = curl_exec($ch);

 // Stop if fails
 if (!$response) {
 die(&amp;#39;Error: &amp;#34;&amp;#39; . curl_error($ch) . &amp;#39;&amp;#34; - Code: &amp;#39; . curl_errno($ch));
 }

 $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 echo &amp;#39;HTTP Status Code: &amp;#39; . $status_code . PHP_EOL;

 // If it&amp;#39;s a successful request (200 or 404 status code):
 if (in_array($status_code, array(200, 404))) {
 echo &amp;#39;Response Body: &amp;#39; . $response . PHP_EOL;
 break;
 } else {
 echo &amp;#39;Retrying...&amp;#39;;
 }

}

// Close curl resource to free up system resources
curl_close($ch);
?&amp;gt;
&lt;/code>&lt;/pre></description></item><item><title>Retry failed requests in Python</title><link>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-python/</guid><description>&lt;p>For most websites, your first requests will always be successful, however, it’s inevitable that some of them will fail. For these failed requests, the API will return a 500 status code and won’t charge you for the request.&lt;/p>
&lt;p>In this case, we can make our code retry to make the requests until we reach a maximum number of retries that we set:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> scrapingbee &lt;span style="color:#f92672">import&lt;/span> ScrapingBeeClient &lt;span style="color:#75715e"># Importing SPB&amp;#39;s client&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>client &lt;span style="color:#f92672">=&lt;/span> ScrapingBeeClient(api_key&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#39;YOUR-API-KEY&amp;#39;&lt;/span>) &lt;span style="color:#75715e"># Initialize the client with your API Key, and using screenshot_full_page parameter to take a screenshot!&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>MAX_RETRIES &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">5&lt;/span> &lt;span style="color:#75715e"># Setting the maximum number of retries if we have failed requests to 5.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">for&lt;/span> _ &lt;span style="color:#f92672">in&lt;/span> range(MAX_RETRIES):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> response &lt;span style="color:#f92672">=&lt;/span> client&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;http://scrapingbee.com/blog&amp;#34;&lt;/span>, params&lt;span style="color:#f92672">=&lt;/span>{&lt;span style="color:#e6db74">&amp;#39;screenshot&amp;#39;&lt;/span>: &lt;span style="color:#66d9ef">True&lt;/span>}) &lt;span style="color:#75715e"># Scrape!&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">if&lt;/span> response&lt;span style="color:#f92672">.&lt;/span>ok: &lt;span style="color:#75715e"># If we get a successful request&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">with&lt;/span> open(&lt;span style="color:#e6db74">&amp;#34;./screenshot.png&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wb&amp;#34;&lt;/span>) &lt;span style="color:#66d9ef">as&lt;/span> f:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f&lt;span style="color:#f92672">.&lt;/span>write(response&lt;span style="color:#f92672">.&lt;/span>content) &lt;span style="color:#75715e"># Save the screenshot in the file &amp;#34;screenshot.png&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">break&lt;/span> &lt;span style="color:#75715e"># Then get out of the retry loop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">else&lt;/span>: &lt;span style="color:#75715e"># If we get a failed request, then we continue the loop&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(response&lt;span style="color:#f92672">.&lt;/span>content)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Retry failed requests in Ruby</title><link>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-ruby/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/retry-failed-requests-in-ruby/</guid><description>&lt;p>For most websites, your first requests will always be successful, however, it’s inevitable that some of them will fail. For these failed requests, the API will return a 500 status code and won’t charge you for the request.&lt;/p>
&lt;p>In this case, we can make our code retry to make the requests until we reach a maximum number of retries that we set:&lt;/p>
&lt;pre tabindex="0">&lt;code>require &amp;#39;net/http&amp;#39;
require &amp;#39;net/https&amp;#39;
require &amp;#39;addressable/uri&amp;#39;

# Classic (GET)
def send_request(user_url)
 uri = Addressable::URI.parse(&amp;#34;https://app.scrapingbee.com/api/v1/&amp;#34;)
 api_key = &amp;#34;YOUR-API-KEY&amp;#34;
 uri.query_values = {
 &amp;#39;api_key&amp;#39; =&amp;gt; api_key,
 &amp;#39;url&amp;#39; =&amp;gt; user_url
 }
 uri = URI(uri)

 # Create client
 http = Net::HTTP.new(uri.host, uri.port)
 http.use_ssl = true
 http.verify_mode = OpenSSL::SSL::VERIFY_PEER

 # Create Request
 req = Net::HTTP::Get.new(uri)

 # Fetch Request
 res = http.request(req)

 # Return Response
 return res
rescue StandardError =&amp;gt; e
 puts &amp;#34;HTTP Request failed (#{ e.message })&amp;#34;
end

max_retries = 5
for a in 1..max_retries do
 request = send_request(&amp;#34;https://scrapingbee.com&amp;#34;)
 if not [404, 200].include?(request.code)
 puts &amp;#34;Request failed - Status Code: #{ request.code }&amp;#34;
 puts &amp;#34;Retrying...&amp;#34;
 else
 puts &amp;#34;Successful request - Status Code: #{ request.code }&amp;#34;
 puts request.body
 break
 end
end
&lt;/code>&lt;/pre>&lt;p> &lt;/p></description></item><item><title>Getting started with ScrapingBee and C#</title><link>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbee-and-c/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbee-and-c/</guid><description>&lt;p>In this tutorial, we will see how you can use ScrapingBee’s API with C#, and use it to scrape web pages. As such, we will cover these topics:&lt;/p>
&lt;ul>
&lt;li>General structure of an API request&lt;/li>
&lt;li>Create your first API request.&lt;/li>
&lt;/ul>
&lt;p>Let’s get started!&lt;/p>
&lt;h3 id="1-general-structure-of-an-api-request">1. General structure of an API request&lt;/h3>
&lt;p>The general structure of an API request made in C# will always look like this:&lt;/p>
&lt;pre tabindex="0">&lt;code>using System;
using System.IO;
using System.Net;
using System.Web;
namespace test {
 class test{

 private static string BASE_URL = @&amp;#34;https://app.scrapingbee.com/api/v1/&amp;#34;;
 private static string API_KEY = &amp;#34;YOUR-API-KEY&amp;#34;;

 public static string Get(string url)
 {
 string uri = BASE_URL + &amp;#34;?api_key=&amp;#34; + API_KEY + &amp;#34;&amp;amp;url=&amp;#34; + url;
 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
 request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

 using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
 using(Stream stream = response.GetResponseStream())
 using(StreamReader reader = new StreamReader(stream))
 {
 return reader.ReadToEnd();
 }
 }
 }
}
&lt;/code>&lt;/pre>&lt;p>And you can do whatever you want with the response variable! For example:&lt;/p></description></item><item><title>Getting started with ScrapingBee and Go</title><link>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbee-and-go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbee-and-go/</guid><description>&lt;p>In this tutorial, we will see how you can use ScrapingBee’s API with GoLang, and use it to scrape web pages. As such, we will cover these topics:&lt;/p>
&lt;ul>
&lt;li>General structure of an API request&lt;/li>
&lt;li>Create your first API request.&lt;/li>
&lt;/ul>
&lt;p>Let’s get started!&lt;/p>
&lt;h3 id="1-general-structure-of-an-api-request">1. General structure of an API request&lt;/h3>
&lt;p>The general structure of an API request made in Go will always look like this:&lt;/p>
&lt;pre tabindex="0">&lt;code>package main

import (
 &amp;#34;fmt&amp;#34;
 &amp;#34;io/ioutil&amp;#34;
 &amp;#34;net/http&amp;#34;
 &amp;#34;net/url&amp;#34;
)
func get_request() *http.Response {
 // Create client
 client := &amp;amp;http.Client{}

 my_url := url.QueryEscape(&amp;#34;YOUR-URL&amp;#34;) // Encoding the URL
 // Create request
 req, err := http.NewRequest(&amp;#34;GET&amp;#34;, &amp;#34;https://app.scrapingbee.com/api/v1/?api_key=YOUR-API-KEY&amp;amp;url=&amp;#34;+my_url, nil) // Create the request the request

 parseFormErr := req.ParseForm()
 if parseFormErr != nil {
 fmt.Println(parseFormErr)
 }

 // Fetch Request
 resp, err := client.Do(req)

 if err != nil {
 fmt.Println(&amp;#34;Failure : &amp;#34;, err)
 }

 return resp // Return the response
}
&lt;/code>&lt;/pre>&lt;p>And you can do whatever you want with the response variable! For example:&lt;/p></description></item><item><title>Getting started with ScrapingBee and PHP</title><link>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbee-and-php/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbee-and-php/</guid><description>&lt;p>In this tutorial, we will see how you can use ScrapingBee’s API with PHP, and use it to scrape web pages. As such, we will cover these topics:&lt;/p>
&lt;ul>
&lt;li>General structure of an API request&lt;/li>
&lt;li>Create your first API request.&lt;/li>
&lt;/ul>
&lt;p>Let’s get started!&lt;/p>
&lt;h3 id="1-general-structure-of-an-api-request">1. General structure of an API request&lt;/h3>
&lt;p>The general structure of an API request made in PHP will always look like this:&lt;/p>
&lt;pre tabindex="0">&lt;code>
&amp;lt;?php

// Get cURL resource
$ch = curl_init();

// Set base url &amp;amp; API key
$BASE_URL = &amp;#34;https://app.scrapingbee.com/api/v1/?&amp;#34;;
$API_KEY = &amp;#34;YOUR-API-KEY&amp;#34;;

// Set parameters
$parameters = array(
 &amp;#39;api_key&amp;#39; =&amp;gt; $API_KEY,
 &amp;#39;url&amp;#39; =&amp;gt; &amp;#39;YOUR-URL&amp;#39; // The URL to scrape
);
// Building the URL query
$query = http_build_query($parameters);

// Set the URL for cURL
curl_setopt($ch, CURLOPT_URL, $BASE_URL.$query);

// Set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, &amp;#39;GET&amp;#39;);

// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// Send the request and save response to $response
$response = curl_exec($ch);

// Stop if fails
if (!$response) {
 die(&amp;#39;Error: &amp;#34;&amp;#39; . curl_error($ch) . &amp;#39;&amp;#34; - Code: &amp;#39; . curl_errno($ch));
}

// Do what you want with the response here

// Close curl resource to free up system resources
curl_close($ch);
?&amp;gt;
&lt;/code>&lt;/pre>&lt;p>And you can do whatever you want with the response variable! For example:&lt;/p></description></item><item><title>Getting started with ScrapingBee and Ruby</title><link>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbee-and-ruby/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbee-and-ruby/</guid><description>&lt;p>In this tutorial, we will see how you can use ScrapingBee’s API with Ruby, and use it to scrape web pages. As such, we will cover these topics:&lt;/p>
&lt;ul>
&lt;li>General structure of an API request&lt;/li>
&lt;li>Create your first API request.&lt;/li>
&lt;/ul>
&lt;p>Let’s get started!&lt;/p>
&lt;h3 id="1-general-structure-of-an-api-request">1. General structure of an API request&lt;/h3>
&lt;p>The general structure of an API request made in Ruby will always look like this:&lt;/p>
&lt;pre tabindex="0">&lt;code>require &amp;#39;net/http&amp;#39;
require &amp;#39;net/https&amp;#39;

# Classic (GET)
def send_request
 api_key = &amp;#34;YOUR-API-KEY&amp;#34;
 user_url = &amp;#34;YOUR-URL&amp;#34;

 uri = URI(&amp;#39;https://app.scrapingbee.com/api/v1/?api_key=&amp;#39;+api_key+&amp;#39;&amp;amp;url=&amp;#39;+user_url)

 # Create client
 http = Net::HTTP.new(uri.host, uri.port)
 http.use_ssl = true
 http.verify_mode = OpenSSL::SSL::VERIFY_PEER

 # Create Request
 req = Net::HTTP::Get.new(uri)

 # Fetch Request
 res = http.request(req)

 # Return Response
 return res
rescue StandardError =&amp;gt; e
 puts &amp;#34;HTTP Request failed (#{ e.message })&amp;#34;
end
&lt;/code>&lt;/pre>&lt;p>And you can do whatever you want with the response variable! For example:&lt;/p></description></item><item><title>Getting started with ScrapingBee's NodeJS SDK</title><link>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbees-nodejs-sdk/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbees-nodejs-sdk/</guid><description>&lt;p>In this tutorial, we will see how you can integrate ScrapingBee’s API with NodeJS using our Software Development Kit (SDK), and use it to scrape web pages. As such, we will cover these topics:&lt;/p>
&lt;ul>
&lt;li>Install ScrapingBee’s NodeJS SDK&lt;/li>
&lt;li>Create your first API request. Let’s get started!&lt;/li>
&lt;/ul>
&lt;h3 id="1-install-the-sdk">1. Install the SDK&lt;/h3>
&lt;p>Before using an SDK, we will have to install the SDK. And we can do that using this command: &lt;code>npm install scrapingbee&lt;/code>.&lt;/p></description></item><item><title>Getting started with ScrapingBee's Python SDK</title><link>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbees-python-sdk/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/getting-started-with-scrapingbees-python-sdk/</guid><description>&lt;p>In this tutorial, we will see how you can integrate ScrapingBee’s API with Python using our Software Development Kit (SDK), and use it to scrape web pages. As such, we will cover these topics:&lt;/p>
&lt;ul>
&lt;li>Install ScrapingBee’s Python SDK&lt;/li>
&lt;li>Create your first API request.&lt;/li>
&lt;/ul>
&lt;p>Let's get started!&lt;/p>
&lt;h3 id="1-install-the-sdk">1. Install the SDK&lt;/h3>
&lt;p>Before using an SDK, we will have to install the SDK. And we can do that using this command:&lt;/p>
&lt;p>&lt;code>pip install scrapingbee&lt;/code>&lt;/p></description></item><item><title>How to find all URLs on a domain's website (multiple methods)</title><link>https://www.scrapingbee.com/blog/how-to-find-all-urls-on-a-domains-website-multiple-methods/</link><pubDate>Sun, 23 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-find-all-urls-on-a-domains-website-multiple-methods/</guid><description>&lt;p>Finding all the URLs on a website is one of the most vital tasks in any web-scraping workflow. In this tutorial, we'll walk through multiple ways to find all URLs on a domain: from using Google search tricks, to exploring pro-level SEO tools like ScreamingFrog, and even crafting a Python script to pull URLs at scale from a sitemap. Don't worry, we've got you covered on building a clean list of URLs to scrape (and as a bonus, we'll even show you how to grab some data along the way).&lt;/p></description></item><item><title>The best Python HTTP clients for web scraping</title><link>https://www.scrapingbee.com/blog/best-python-http-clients/</link><pubDate>Sat, 15 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-python-http-clients/</guid><description>&lt;p>Alright, let's set the stage. When you start looking for the &lt;strong>best Python HTTP clients&lt;/strong> for web scraping, you quickly realize the ecosystem is absolutely overflowing. A quick Github search pulls up more than &lt;em>1,800 results&lt;/em>, which is enough to make anyone go: &amp;quot;bro, what the hell am I even looking at?&amp;quot;&lt;/p>
&lt;p>And yeah, choosing the right one depends on your setup more than people admit. Scraping on a single machine? Whole cluster of hungry workers? Keeping things dead simple? Or chasing raw speed like your scraper is training for the Olympics? A tiny web app pinging a microservice once in a while needs a totally different tool than a script hammering endpoints all day long. Add to that the classic concern: &amp;quot;will this library still exist six months from now, or will it vanish like half of my side projects?&amp;quot;&lt;/p></description></item><item><title>How to download an image with Python?</title><link>https://www.scrapingbee.com/blog/download-image-python/</link><pubDate>Fri, 14 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/download-image-python/</guid><description>&lt;p>If you've ever tried to Python download image from URL, you already know the theory looks stupidly simple: call &lt;code>requests.get()&lt;/code> and boom — image saved. Except that's not how the real world usually works. Sites block bots, images hide behind JavaScript, redirects go in circles, and bulk downloads crumble if you're not streaming, retrying, or handling files properly.&lt;/p>
&lt;p>This guide takes the actually useful route: how to stream images safely, name files without creating a junkyard, avoid duplicates, scale to thousands of downloads, and bring in ScrapingBee when a site decides to get spicy. By the end, you'll have a toolkit that works on real websites, not toy examples.&lt;/p></description></item><item><title>How to send a POST with Python Requests?</title><link>https://www.scrapingbee.com/blog/how-to-send-post-python-requests/</link><pubDate>Tue, 11 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-send-post-python-requests/</guid><description>&lt;p>When you're working with APIs or automating web-related tasks, sooner or later you'll need to send data instead of just fetching it. That's where a &lt;strong>POST request in Python&lt;/strong> comes in. It's the basic move for things like logging into a service, submitting a web form, or sending JSON to an API endpoint.&lt;/p>
&lt;p>Using the &lt;code>requests&lt;/code> library keeps things clean and human-friendly. No browser automation, no Selenium gymnastics, no pretending to click buttons. You just send a POST request in Python, wait for the response, and continue on. It's readable, dependable, and more or less the default way most developers handle HTTP in Python these days.&lt;/p></description></item><item><title>How to use a proxy with HttpClient in C#</title><link>https://www.scrapingbee.com/blog/csharp-httpclient-proxy/</link><pubDate>Sun, 09 Nov 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/csharp-httpclient-proxy/</guid><description>&lt;p>In this article, we'll walk through how to use a C# HttpClient proxy. HttpClient is built into .NET and supports async by default, so it's the standard way to send requests through a proxy.&lt;/p>
&lt;p>Developers often use proxies to stay anonymous, avoid IP blocks, or just control where the traffic goes. Whatever your reason, by the end of this article you'll know how to work with both authenticated and unauthenticated proxies in HttpClient.&lt;/p></description></item><item><title>Web scraping in C#: From basics to production-ready code (2025)</title><link>https://www.scrapingbee.com/blog/web-scraping-csharp/</link><pubDate>Fri, 31 Oct 2025 10:22:27 +0200</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-csharp/</guid><description>&lt;p>So, you wanna do &lt;em>C# web scraping&lt;/em> without losing your sanity? This guide's got you! We'll go from zero to a working scraper that actually does something useful: fetching real HTML, parsing it cleanly, and saving the data to a nice CSV file.&lt;/p>
&lt;p>You'll learn how to use HtmlAgilityPack for parsing, CsvHelper for export, and ScrapingBee as your all-in-one backend that handles headless browsers, proxies, and JavaScript. Yeah, all the messy stuff nobody wants to deal with manually.&lt;/p></description></item><item><title>Dynamic Web Page Scraping With Python</title><link>https://www.scrapingbee.com/blog/web-scraping-dynamic-content/</link><pubDate>Sun, 26 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-dynamic-content/</guid><description>&lt;p>Modern websites love to render content in the browser through dynamic and interactive JavaScript elements. However, because of that, static scrapers and parsers that work so well with Python become ineffective as they miss prices, reviews, and stock states that appear after client-side rendering.&lt;/p>
&lt;p>As a necessary addition to reach the desired information, the new iteration of data collection tools tries to capture dynamic web scraping with Python through headless browsers for clicking on JavaScript elements on the site. However, even then, mimicking real user behavior and customizing the connection until it opens access to our data source requires a lot of technical proficiency, even with tools like Selenium or Puppeteer.&lt;/p></description></item><item><title>Web crawling with Python made easy: From setup to first scrape</title><link>https://www.scrapingbee.com/blog/crawling-python/</link><pubDate>Sun, 26 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/crawling-python/</guid><description>&lt;p>&lt;strong>Web crawling with Python&lt;/strong> sounds fancy, but it's really just teaching your computer how to browse the web for you. Instead of clicking links and copying data by hand, you write a script that does it automatically: visiting pages, collecting info, and moving on to the next one.&lt;/p>
&lt;p>In this guide, we'll go step by step through the whole process. We'll start from a tiny script using &lt;code>requests&lt;/code> and &lt;code>BeautifulSoup&lt;/code>, then level up to a scalable crawler built with Scrapy. You'll also see how to clean your data, follow links safely, and use ScrapingBee to handle tricky sites with JavaScript or anti-bot rules.&lt;/p></description></item><item><title>Guide to Puppeteer Scraping for Efficient Data Extraction</title><link>https://www.scrapingbee.com/blog/puppeteer-scraping/</link><pubDate>Sat, 25 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/puppeteer-scraping/</guid><description>&lt;p>Puppeteer scraping lets you automate real browsers to open tabs, visit desired web pages, and extract public data. But how do you use this Node.js library without prior experience?&lt;/p>
&lt;p>In this guide, we will show you how to set up Puppeteer, navigate pages, extract data with $eval/$$eval/XPath, paginate, and export results. You’ll also see where Puppeteer hits limits at scale and how our HTML API unlocks consistent access to protected websites with the ability to rotate IP addresses and bypass anti-bot systems. Stay tuned, and you will have a working Puppeteer scraper in just a few minutes!&lt;/p></description></item><item><title>Price Scraper With ScrapingBee</title><link>https://www.scrapingbee.com/blog/price-scraper/</link><pubDate>Fri, 24 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/price-scraper/</guid><description>&lt;p>Building a multi-functional price scraper is one of the best ways to extract data from competitor platforms and study their pricing strategies. Because most e-commerce businesses use automated connections for competitive analysis, finding a reliable way to access website data and study market trends is one of the best ways to outshine competitors.&lt;/p>
&lt;p>However, researching and analyzing data takes a lot of time, so having the best tools for scraping prices provides a big advantage. In this guide, we will show you how to access web data and start scraping websites with our intuitive HTML API. Stick around to build your first price scraping tool in just a few minutes!&lt;/p></description></item><item><title>API for dummies: Start building your first API today</title><link>https://www.scrapingbee.com/blog/api-for-dummies-learning-api/</link><pubDate>Thu, 23 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/api-for-dummies-learning-api/</guid><description>&lt;p>If you've been hunting for an easy &lt;strong>API for dummies guide&lt;/strong> that finally explains what all the fuss is about, you're in the right place. Ever wondered how your favorite apps and websites manage to talk to each other so smoothly? That's where APIs come in.&lt;/p>
&lt;p>API stands for Application Programming Interface, but don't let that technical name scare you off. In plain English, an API is like a bridge that lets different software systems exchange data or use each other's features without needing to know what's happening behind the scenes.&lt;/p></description></item><item><title>Web Scraping With LangChain &amp; ScrapingBee</title><link>https://www.scrapingbee.com/blog/langchain-web-scraper/</link><pubDate>Thu, 23 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/langchain-web-scraper/</guid><description>&lt;p>Having a Langchain scraper enables developers to build powerful data pipelines that start with real-time data extraction and end with structured outputs for tasks, like embeddings and retrieval-augmented generation (RAG). To accommodate these benefits, our HTML API simplifies the road towards desired public content via JavaScript rendering, anti-bot bypassing, and content cleanup—so LangChain can process the result into usable text.&lt;/p>
&lt;p>In this guide, we will cover the steps and integration details that will help us combine LangChain with our Python SDK, combining these two tools in a Python project. Let's get straight to it!&lt;/p></description></item><item><title>HTML Web Scraping Tutorial</title><link>https://www.scrapingbee.com/blog/html-scraping/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/html-scraping/</guid><description>&lt;p>Over the last two decades, HTML scraping has transformed how we approach market research. While the internet continues to reimagine how we extract and analyze information, we have many different ways to scrape HTML, all of which are different in their approach and complexity.&lt;/p>
&lt;p>In this tutorial, we will show how to combine the basics of traditional HTML data collection with the powerful extraction capabilities of our &lt;a href="https://www.scrapingbee.com" target="_blank" >scraping API&lt;/a>. This approach will help you create a clear and consistent method for automated data extractions. Let's dive in!&lt;/p></description></item><item><title>Cloudflare Scraper: How to Bypass Cloudflare With ScrapingBee API</title><link>https://www.scrapingbee.com/blog/cloudflare-scraper/</link><pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/cloudflare-scraper/</guid><description>&lt;p>Having an effective Cloudflare scraper opens a whole new world of public data that you can extract with automated connections. Because basic scrapers fail to utilize dynamic fingerprinting methods and proxy rotation, they cannot access many protected platforms due to rate limits, IP blocks, and CAPTCHA challenges.&lt;/p>
&lt;p>In this guide, we try to help upcoming businesses and freelancers to reliably fetch pages protected by Cloudflare using our beginner-friendly HTML API. Here, we will explain the common JavaScript rendering challenges, device fingerprinting issues, and how our Python SDK resolves them under the hood through the provided API parameters. Follow the steps to build a small, testable proof of concept before scaling.&lt;/p></description></item><item><title>Automated Web Scraping - Benefits and Tips</title><link>https://www.scrapingbee.com/blog/automated-web-scraping/</link><pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/automated-web-scraping/</guid><description>&lt;p>Looking for ways to automate web scraping tools to quickly collect public data online? In the data-driven world, manual aggregation methods cannot compete with the speed of automated growth. Manual scraping is way too slow, error-prone, and not scalable.&lt;/p>
&lt;p>Automated web scraping solutions remove the need for monotonous and inefficient tasks, allowing our bots and APIs to do what they do best – execute a recurring set of instructions at far greater speeds. In this guide, we will discuss the necessity of automated connections for data extraction and include some actionable tips that will get you started without prior programming knowledge. Let's get to work!&lt;/p></description></item><item><title>How to master Selenium web scraping in 2025</title><link>https://www.scrapingbee.com/blog/selenium-python/</link><pubDate>Sat, 18 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/selenium-python/</guid><description>&lt;p>&lt;strong>Selenium web scraping&lt;/strong> is still one of the most dependable ways to extract data from dynamic, JavaScript-heavy websites. In 2025, it's smoother and faster than ever.&lt;/p>
&lt;p>Selenium is a browser automation toolkit with bindings for all major programming languages, including Python, which we'll focus on here. It talks to browsers through the WebDriver protocol, giving you control over Chrome, Firefox, Safari, or even remote setups. Originally built for testing, Selenium has grown into a full automation tool that can click, type, scroll, and extract data just like a real user.&lt;/p></description></item><item><title>How to parse HTML in Python: A step-by-step guide for beginners</title><link>https://www.scrapingbee.com/blog/python-html-parsers/</link><pubDate>Thu, 16 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/python-html-parsers/</guid><description>&lt;p>If you've ever tried to pull data from a website (prices, titles, reviews, links, whatever) you've probably hit that wall called &lt;strong>how to parse HTML in Python&lt;/strong>. The web runs on HTML, and turning messy markup into clean, structured data is one of those rites of passage every dev goes through sooner or later.&lt;/p>
&lt;p>This guide walks you through the whole thing, step by step: fetching pages, parsing them properly, and doing it in a way that won't make websites hate you. We'll start simple, then jump into a real-world setup using ScrapingBee, which quietly handles the messy stuff like JavaScript rendering, IP rotation, and anti-bot headaches.&lt;/p></description></item><item><title>Scrapy vs Selenium: Which one to choose</title><link>https://www.scrapingbee.com/blog/scrapy-vs-selenium/</link><pubDate>Thu, 09 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/scrapy-vs-selenium/</guid><description>&lt;p>The Scrapy vs Selenium debate has been ongoing in the web scraping community for years. Both tools have carved out their own territories in the world of data extraction and web automation, but choosing between them can feel like picking between a race car and a Swiss Army knife, they’re both excellent, just for different reasons.&lt;/p>
&lt;p>If you’ve ever found yourself staring at a website wondering how to extract its data efficiently, you’ve probably encountered these two powerhouses. Scrapy stands as the world’s most popular open-source web scraping framework, while Selenium has established itself as the go-to solution for browser automation and testing. But which one should you reach for when your next project demands results?&lt;/p></description></item><item><title>BeautifulSoup tutorial: Scraping web pages with Python</title><link>https://www.scrapingbee.com/blog/python-web-scraping-beautiful-soup/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/python-web-scraping-beautiful-soup/</guid><description>&lt;p>The internet is an endless source of data, and for many data-driven tasks, accessing this information is critical. Thus, the demand for web scraping has risen exponentially in recent years, becoming an important tool for data analysts, machine learning developers, and businesses alike. Also, Python has become the most popular programming language for this purpose.&lt;/p>
&lt;p>In this detailed tutorial, you'll learn how to access the data using popular libraries such as Requests and Beautiful Soup with CSS selectors.&lt;/p></description></item><item><title>Mastering the Python curl request: A practical guide for developers</title><link>https://www.scrapingbee.com/blog/python-curl/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/python-curl/</guid><description>&lt;p>Mastering the Python curl request is one of the fastest ways to turn API docs or browser network calls into working code. Instead of rewriting everything by hand, you can drop curl straight into Python, or translate it into Requests or PycURL for cleaner, long-term projects.&lt;/p>
&lt;p>In this guide, we'll show practical ways to run curl in Python, when to use each method (subprocess, PycURL, Requests), and how ScrapingBee improves reliability with proxies and optional JavaScript rendering, so you can ship scrapers that actually work.&lt;/p></description></item><item><title>Scraping with Nodriver: Step by Step Tutorial with Examples</title><link>https://www.scrapingbee.com/blog/nodriver-tutorial/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/nodriver-tutorial/</guid><description>&lt;p>If you've used Python &lt;a href="https://www.scrapingbee.com/blog/selenium-python/" target="_blank" >Selenium for web scraping&lt;/a>, you're familiar with its ability to extract data from websites. However, the default webdriver (ChromeDriver) often struggles to bypass anti-bot mechanisms. As a solution, you can use &lt;a href="https://www.scrapingbee.com/blog/undetected-chromedriver-python-tutorial-avoiding-bot-detection/" target="_blank" >undetected_chromedriver&lt;/a> to bypass some of today's most sophisticated anti-bot systems, including those from Cloudflare and Akamai.&lt;/p>
&lt;p>However, it's important to note that undetected_chromedriver has limitations against advanced anti-bot systems. This is where &lt;strong>Nodriver&lt;/strong>, its official successor, comes in.&lt;/p></description></item><item><title>Web Scraping vs API: What’s the Difference?</title><link>https://www.scrapingbee.com/blog/api-vs-web-scraping/</link><pubDate>Wed, 08 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/api-vs-web-scraping/</guid><description>&lt;p>Ever found yourself staring at a website, desperately wanting to extract all that data, but wondering whether you should build a scraper or get an API? The web scraping vs API debate is one of the most common questions in data extraction. Honestly, it’s a fair question that deserves a proper answer.&lt;/p>
&lt;p>Both approaches have their place in the modern data landscape, but understanding the difference between web scraping and API methods can save you time, money, and countless headaches. In this article I'll help find the best approach for you.&lt;/p></description></item><item><title>Best Language for Web Scraping</title><link>https://www.scrapingbee.com/blog/best-language-for-web-scraping/</link><pubDate>Tue, 07 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-language-for-web-scraping/</guid><description>&lt;p>Ever stared at a data-rich website and wondered how to pull it out cleanly and fast? To acomplish this mission, you need to pick the best language for web scraping. But the process can feel a bit confusing. Python’s hype, JavaScript’s ubiquity, and a dozen others languages makes it hard to pick the right one.&lt;/p>
&lt;p>After years building scrapers, I’ve watched teams burn time by matching the wrong tool to the job. Today’s web is trickier: JavaScript-heavy UIs, dynamic rendering, rate limits, and sophisticated anti-bot systems. Your stack needs to navigate headless browsers, async flows, and resilience, without turning maintenance into a grind.&lt;/p></description></item><item><title>How to bypass error 1005 'access denied, you have been banned' when scraping</title><link>https://www.scrapingbee.com/blog/bypass-error-1005-access-denied-you-have-been-banned/</link><pubDate>Tue, 07 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/bypass-error-1005-access-denied-you-have-been-banned/</guid><description>&lt;p>When scraping websites protected by Cloudflare, encountering Error 1005 — &amp;quot;Access Denied, You Have Been Banned&amp;quot; — is a common challenge. This error signifies that your IP address has been blocked, usually due to Cloudflare's security mechanisms that aim to prevent scraping and malicious activities. However, there are various techniques you can use to bypass this error and continue your scraping operations.&lt;/p>
&lt;p>In this guide, we'll focus on specific strategies and tools to bypass Cloudflare Error 1005, helping you to scrape websites efficiently without getting blocked.&lt;/p></description></item><item><title>How To Build a Real Estate Web Scraper</title><link>https://www.scrapingbee.com/blog/real-estate-web-scraping/</link><pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/real-estate-web-scraping/</guid><description>&lt;p>The real estate market moves fast. Property listings appear and disappear within hours, prices fluctuate based on market conditions, and tracking availability across multiple platforms manually becomes an impossible task. For developers, investors, and real estate agents who need to stay ahead of market trends, building a real estate web scraper offers the solution to automate data collection from sites like Redfin, Idealista, or &lt;a href="http://Apartments.com" target="_blank" >Apartments.com&lt;/a>. Instead of spending hours on manual data entry, you can focus on analyzing insights and making informed decisions based on fresh, accurate market data.&lt;/p></description></item><item><title>How to use undetected_chromedriver (plus working alternatives)</title><link>https://www.scrapingbee.com/blog/undetected-chromedriver-python-tutorial-avoiding-bot-detection/</link><pubDate>Mon, 06 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/undetected-chromedriver-python-tutorial-avoiding-bot-detection/</guid><description>&lt;p>If you've used &lt;a href="https://www.scrapingbee.com/blog/selenium-python/" target="_blank" >Python Selenium for web scraping&lt;/a>, you're familiar with its ability to extract data from websites. However, the default webdriver (ChromeDriver) often struggles to bypass the anti-bot mechanisms websites use to detect and block scrapers. With undetected_chromedriver, you can bypass some of today's most sophisticated anti-bot mechanisms, including those from Cloudflare, Akamai, and DataDome.&lt;/p>
&lt;p>In this blog post, we’ll guide you on how to make your Selenium web scraper less detectable using undetected_chromedriver. We’ll cover its usage with proxies and user agents to enhance its effectiveness and troubleshoot common errors. Furthermore, we’ll discuss the limitations of undetected_chromedriver and suggest better alternatives.&lt;/p></description></item><item><title>How to Scrape Images from a Website with ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-images-from-website/</link><pubDate>Sun, 05 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-images-from-website/</guid><description>&lt;p>Learning how to scrape images from website sources is a skill that can unlock various benefits. Whether you’re extracting product photos for competitive analysis, building datasets or gathering visual content for machine learning projects you need to know how to scrape.&lt;/p>
&lt;p>In this article, I'll walk you through the process of building website image scraper. But don't worry, you won't have code everything from scratch. ScrapingBee’s web scraping API allows automating content collection with minimal technical knowledge. The best part, it has built in technical infrastructure, so you don't need to think about proxies, JavaScript rendering or other difficulties. Let me show exactly how it works.&lt;/p></description></item><item><title>Top Web Scraping Challenges in 2025</title><link>https://www.scrapingbee.com/blog/web-scraping-challenges/</link><pubDate>Sun, 05 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-challenges/</guid><description>&lt;p>Top web scraping challenges have evolved dramatically from the simple days of parsing static HTML. I’ve been building scrapers for years, and let me tell you – even simple tasks have turned into a complex chess match between developers and websites. From sophisticated CAPTCHAs, to JavaScript, the obstacles continue to multiply.&lt;/p>
&lt;p>In this article, I’ll break down the major hurdles you’ll face when scraping data in 2025 and show you how ScrapingBee can help you jump over these barriers without breaking a sweat. Whether you’re dealing with IP blocks, dynamic content, or legal concerns, there’s a solution that doesn’t involve spending weeks building complex infrastructure.&lt;/p></description></item><item><title>7 Best SERP APIs in 2025</title><link>https://www.scrapingbee.com/blog/best-serp-apis/</link><pubDate>Sat, 04 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-serp-apis/</guid><description>&lt;p>Looking for the best SERP API in 2025? You've come to the right place. In my experience working with various search engine data projects, choosing the right API can make or break your entire operation. Some search scraping APIs can be frustrating, as they often yield inconsistent data. Others extract data so smoothly you’ll wonder how they make web scraping so easy.&lt;/p>
&lt;p>The search engine API market has evolved significantly in 2025, with new players entering the field and established providers upgrading their infrastructure. Whether you’re tracking competitor rankings, building local SEO presence, or feeding data into machine learning models, there’s never been more choice – or more confusion about which provider to pick.&lt;/p></description></item><item><title>Best Web Scraping Services in USA</title><link>https://www.scrapingbee.com/blog/best-web-scraping-services/</link><pubDate>Sat, 04 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-web-scraping-services/</guid><description>&lt;p>The best web scraping services in USA had made manual data collection obsolete. Today, web scapers have become essential infrastructure for modern businesses, transforming what used to be weeks of into automated processes that run with a few lines of code.&lt;/p>
&lt;p>However, the scraping landscape has evolved dramatically and what worked in 2020 barely scratches the surface today. Modern websites throw everything at automated data collectors: sophisticated JavaScript rendering, complex bot detection systems, CAPTCHAs, and dynamic content that loads through multiple API calls. Reliable &lt;strong>web scraping services&lt;/strong> knows how to adapt.&lt;/p></description></item><item><title>How to set up Axios proxy: A step-by-step guide for Node.js</title><link>https://www.scrapingbee.com/blog/nodejs-axios-proxy/</link><pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/nodejs-axios-proxy/</guid><description>&lt;p>If you've ever tried to send requests through a proxy in Node.js, chances are you've searched for &lt;strong>how to set up an Axios proxy&lt;/strong>. Whether you're scraping the web, checking geo-restricted content, or just hiding your real IP, proxies are a common part of the toolkit.&lt;/p>
&lt;p>This guide walks through the essentials of using Axios with proxies:&lt;/p>
&lt;ul>
&lt;li>setting up a basic proxy,&lt;/li>
&lt;li>adding username/password authentication,&lt;/li>
&lt;li>rotating proxies to avoid bans,&lt;/li>
&lt;li>working with SOCKS5,&lt;/li>
&lt;li>plus a few fixes for common errors.&lt;/li>
&lt;/ul>
&lt;p>We'll also cover where a service like ScrapingBee can save you time if you don't want to manage proxies yourself.&lt;/p></description></item><item><title>Is Web Scraping Legal? Key Insights and Guidelines You Need to Know</title><link>https://www.scrapingbee.com/blog/is-web-scraping-legal/</link><pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/is-web-scraping-legal/</guid><description>&lt;p>Web scraping raises a lot of questions, but “is web scraping legal” is the one I hear the most. The legality of web scraping depends on three critical factors: what data you’re collecting, how you’re collecting it, and where you’re operating. Think of it like driving a car, the act itself isn’t illegal, but speeding, running red lights, or driving without a license can land you in serious trouble.&lt;/p>
&lt;p>This guide breaks down the complex world of web scraping legality across different jurisdictions. We’ll explore key laws including privacy regulations, copyright protections, terms of service agreements, and anti-hacking statutes. You’ll also discover ethical best practices that keep your data collection projects on the right side of the law.&lt;/p></description></item><item><title>Search Engine Scraping Tutorial With ScrapingBee</title><link>https://www.scrapingbee.com/blog/search-engine-scraping/</link><pubDate>Fri, 03 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/search-engine-scraping/</guid><description>&lt;p>Search engine scraping has become an essential method for many businesses, digital marketers, and researchers to gather information. It is an excellent data extraction method when you need to analyze a large number of competitor websites. With web scraping, you can extract information on market trends and make informed decisions on pricing strategies using the data extracted from SERPs.&lt;/p>
&lt;p>In this tutorial, I’ll show you how to perform search engine scraping safely and efficiently using ScrapingBee’s web data extraction tool. You’ll learn how to extract structured data from major search engines like Google and Bing without worrying about getting blocked, managing proxies, or dealing with CAPTCHAs. Let's dive in!&lt;/p></description></item><item><title>How to Scrape Baidu: Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-baidu/</link><pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-baidu/</guid><description>&lt;p>Want to learn how to scrape Baidu? As China’s largest search engine, Baidu is an attractive target for web scraping because it is similar to Google in function but tailored for local regulations. For those wanting to tap into China's digital ecosystem, it is the best source of public data that displays relevant, location-based search trends, plus everything you need to conduct market research.&lt;/p>
&lt;p>This guide will teach you how to extract information from Baidu HTML code with the most beginner-friendly solution – our Scraping API and Python SDK. Dynamically loaded pages load structure data with the help of JavaScript scripts, while rate-limiting and bot detection tools try to prevent the automated data parsing on the platform.&lt;/p></description></item><item><title>Python Web Scraping Stock Price With ScrapingBee</title><link>https://www.scrapingbee.com/blog/python-web-scraping-stock-price/</link><pubDate>Thu, 02 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/python-web-scraping-stock-price/</guid><description>&lt;p>Python web scraping stock price techniques have become essential for traders and financial analysts who need near real-time market data analysis without paying thousands for premium API access.&lt;/p>
&lt;p>Becoming a pro at scraping stock market data allows you to build a personal investment dashboard for real time stock data monitoring. It also helps you to extract data for market research, or developing a trading algorithm. Whatever you decide to use all the data for, having direct access to stock prices gives you an edge.&lt;/p></description></item><item><title>How to Scrape Booking.com: Step-by-Step Tutorial</title><link>https://www.scrapingbee.com/blog/how-to-scrape-booking-com/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-booking-com/</guid><description>&lt;p>Booking.com is one of the biggest travel platforms, and a go-to choice for millions of users planning their trips and vacations. By accessing the platform using automated tools, we can collect hotel data, including names, ratings, prices, and locations, for research or comparison purposes.&lt;/p>
&lt;p>However, the platform’s strict anti-bot systems make direct extractions nearly impossible. Fortunately, our API and implementation of Python tools eliminate these challenges by providing automatic JavaScript execution, proxy rotation, and CAPTCHA-resistant browsing.&lt;/p></description></item><item><title>Web Scraping without getting blocked (2025 Solutions)</title><link>https://www.scrapingbee.com/blog/web-scraping-without-getting-blocked/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-without-getting-blocked/</guid><description>&lt;p>&lt;strong>Web scraping&lt;/strong>, or &lt;strong>crawling&lt;/strong>, is the process of fetching data from a third-party website by downloading and parsing the HTML code to extract the data you need.&lt;/p>
&lt;blockquote>
&lt;p>&lt;em>&amp;quot;But why don't you use the API for this?&amp;quot;&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;p>Not every website offers an API, and those that do might not expose all the information you need. Therefore, scraping often becomes the only viable solution to extract website data.&lt;/p>
&lt;p>There are numerous use cases for web scraping:&lt;/p></description></item><item><title>7 Best Web Scraping Tools Ranked (2025)</title><link>https://www.scrapingbee.com/blog/web-scraping-tools/</link><pubDate>Tue, 30 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-tools/</guid><description>&lt;p>If you're looking for the &lt;strong>best web scraping tools in 2025&lt;/strong>, you'll quickly see there are a lot of choices. Some are simple libraries, others are full SaaS platforms. Each promises speed, scale, or AI magic, but not every tool will fit your project.&lt;/p>
&lt;p>That's why we put together this ranked list. Below, you'll find the top web scraping tools of 2025, with clear breakdowns of features, pros, cons, and pricing. Whether you want a reliable service like ScrapingBee or a free open-source option, you'll see what works best for your needs.&lt;/p></description></item><item><title>Web Scraping With Linux And Bash</title><link>https://www.scrapingbee.com/blog/web-scraping-with-linux-and-bash/</link><pubDate>Mon, 29 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-with-linux-and-bash/</guid><description>&lt;p>Please brace yourselves, we'll be going deep into the world of Unix command lines and shells today, as we are finding out more about how to use the Bash for scraping websites.&lt;/p>
&lt;p>&lt;em>Let's fasten our seatbelts and jump right in&lt;/em> 🏁&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAAy0lEQVR4nGL5//8/A7mAiWydWDT/&amp;#43;f3347svyCL///3/&amp;#43;f3Pz&amp;#43;9/fnz//ef3P2QpFjTNb56&amp;#43;Pn/kvHOoKxs7VOrD&amp;#43;y/7dp39x8Dw798/bS0FHUMlnDZ/&amp;#43;vBFTkX05rX7cJFfv349eXX75fu7dx5fef/xLU5nf/v04eeby4KCXH/e3/33DxqQLCzM3Jw8fFy8ogJCnBzsyOoZkUP7z&amp;#43;/f3969YGDmYmX9z8EnwsgI9vP//79&amp;#43;/IYoY2VjYWZhxq6ZVEDVqCIJAAIAAP//OKxdHfIG2GQAAAAASUVORK5CYII=); background-size: cover">
 &lt;svg width="1200" height="628" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/web-scraping-with-linux-and-bash/cover_hu15494476467341146333.png 1200w '
 data-src="https://www.scrapingbee.com/blog/web-scraping-with-linux-and-bash/cover_hu15494476467341146333.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/web-scraping-with-linux-and-bash/cover_hu15494476467341146333.png 1200w'
 src="https://www.scrapingbee.com/blog/web-scraping-with-linux-and-bash/cover.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h2 id="why-scraping-with-bash">Why Scraping With Bash?&lt;/h2>
&lt;p>If you happened to have already read a few of our other articles (e.g. &lt;a href="https://www.scrapingbee.com/blog/web-scraping-101-with-python/" >web scraping in Python&lt;/a> or &lt;a href="https://www.scrapingbee.com/blog/introduction-to-chrome-headless/" >using Chrome from Java&lt;/a>), you'll be probably already familiar with the level of convenience those high-level languages provide when it comes to crawling and scraping the web. And, while there are plenty of examples of full-fledged applications written in Bash (e.g. an entire &lt;a href="http://nanoblogger.sourceforge.net/" target="_blank" >web CMS&lt;/a>, an &lt;a href="https://lists.gnu.org/archive/html/bug-bash/2001-02/msg00054.html" target="_blank" >Intel assembler&lt;/a>, a &lt;a href="https://testssl.sh/" target="_blank" >TLS validator&lt;/a>, a full &lt;a href="https://github.com/dzove855/Bash-web-server" target="_blank" >web server&lt;/a>), probably few people will argue that Bash scripts are the &lt;em>most ideal&lt;/em> environment for large, complex programs. So the question why somebody would suddenly use Bash, is not completely out of the blue and may be a justified question.&lt;/p></description></item><item><title>How to bypass reCAPTCHA &amp; hCaptcha when web scraping</title><link>https://www.scrapingbee.com/blog/how-to-bypass-recaptcha-and-hcaptcha-when-web-scraping/</link><pubDate>Sun, 28 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-bypass-recaptcha-and-hcaptcha-when-web-scraping/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>CAPTCHA - &lt;strong>C&lt;/strong>ompletely &lt;strong>A&lt;/strong>utomated &lt;strong>P&lt;/strong>ublic &lt;strong>T&lt;/strong>uring test to tell &lt;strong>C&lt;/strong>omputers and &lt;strong>H&lt;/strong>umans &lt;strong>A&lt;/strong>part! All these little tasks and riddles you need to solve before a site lets you proceed to the actual content.&lt;/p>
&lt;blockquote>
&lt;p>💡 Want to skip ahead and try to avoid CAPTCHAs?&lt;/p>
&lt;p>At &lt;a href="https://www.scrapingbee.com" target="_blank" >ScrapingBee&lt;/a>, it is our goal to provide you with the right tools to avoid triggering CAPTCHAs in the first place. Our &lt;a href="https://www.scrapingbee.com/" target="_blank" >web scraping API&lt;/a> has been carefully tuned so that your requests are unlikely to get stopped by a CAPTCHA, give it a go.&lt;/p></description></item><item><title>How to scrape all text from a website for LLM training</title><link>https://www.scrapingbee.com/blog/how-to-scrape-all-text-from-a-website-for-llm-ai-training/</link><pubDate>Sat, 27 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-all-text-from-a-website-for-llm-ai-training/</guid><description>&lt;p>Artificial Intelligence (AI) is rapidly becoming a part of everyday life, and with it, the demand for training custom models has increased. Many people these days would like to train their very own... AI, not dragon, duh! One crucial step in training any language model (LLM) is gathering a significant amount of text data. In this article, I'll show you how to collect text data from all pages of a website using web scraping techniques. We'll build a custom Python script to automate this process, making it easy to gather the data you need for your model training.&lt;/p></description></item><item><title>How to scrape data from a website to Excel</title><link>https://www.scrapingbee.com/blog/how-to-web-scrape-in-excel/</link><pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-web-scrape-in-excel/</guid><description>&lt;p>Collecting data from websites and organizing it into a structured format like Excel can be super handy. Maybe you're building reports, doing research, or just want a neat spreadsheet with all the info you need. But copying and pasting manually? That's a time sink no one enjoys. In this guide, we'll discuss a few ways to scrape data from websites and save it directly into Excel.&lt;/p>
&lt;p>Together we'll talk about methods for both non-techies and devs, using everything from built-in Excel tools to coding your own solutions with Python. By the end, you'll have a clear picture of which method fits your needs the best.&lt;/p></description></item><item><title>Scrapegraph AI Tutorial; Scrape websites easily with LLaMA AI</title><link>https://www.scrapingbee.com/blog/scrapegraph-ai-tutorial-scrape-websites-easily-with-llama-ai/</link><pubDate>Thu, 25 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/scrapegraph-ai-tutorial-scrape-websites-easily-with-llama-ai/</guid><description>&lt;p>&lt;strong>Artifical intelligence&lt;/strong> is everywhere in tech these days, and it's wild how it's become a go-to tool, for example, in stuff like web scraping. Let's dive into how Scrapegraph AI can totally simplify your scraping game. Just tell it what you need in simple English, and watch it work its magic.&lt;/p>
&lt;p>I'm going to show you how to get Scrapegraph AI up and running, how to set up a language model, how to process JSON, scrape websites, use different AI models, and even turning your data into audio. Sounds like a lot, but it's easier than you think, and I'll walk you through it step by step.&lt;/p></description></item><item><title>Python wget: Automate file downloads with 3 simple commands</title><link>https://www.scrapingbee.com/blog/python-wget/</link><pubDate>Wed, 24 Sep 2025 09:10:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/python-wget/</guid><description>&lt;p>If you've ever needed to grab files in bulk, you know the pain of clicking download links one by one. That's where combining &lt;strong>Python and wget&lt;/strong> shines. Instead of re-implementing HTTP requests yourself, you can call the battle-tested &lt;code>wget&lt;/code> tool straight from a Python script and let it handle the heavy lifting.&lt;/p>
&lt;p>In this guide, we'll set up &lt;code>wget&lt;/code>, explain how to run it from Python using subprocess, and walk through three copy-paste commands that cover almost everything you'll ever need: downloading a file, saving it with a custom name or folder, and resuming interrupted transfers. Let's get started!&lt;/p></description></item><item><title>How to use a proxy with Python Requests?</title><link>https://www.scrapingbee.com/blog/python-requests-proxy/</link><pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/python-requests-proxy/</guid><description>&lt;p>If you've ever messed around with scraping or automating requests in Python, you've probably run into the usual roadblocks. One minute everything's smooth, the next you're getting captchas, random 403 errors, or just radio silence from the site. That's usually the internet's polite way of saying: &lt;em>&amp;quot;Hey buddy, slow down.&amp;quot;&lt;/em> This is where proxies save the day. Setting up a Python Requests proxy, you can mask your real IP, spread your traffic over different addresses, and even slip past geo-restrictions that would normally block you.&lt;/p></description></item><item><title>Using CSS Selectors for Web Scraping</title><link>https://www.scrapingbee.com/blog/using-css-selectors-for-web-scraping/</link><pubDate>Mon, 22 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/using-css-selectors-for-web-scraping/</guid><description>&lt;p>In today's article we are going to take a closer look at CSS selectors, where they originated from, and how they can help you in extracting data when scraping the web.&lt;/p>
&lt;blockquote>
&lt;p>ℹ️ If you already read the article &amp;quot;&lt;a href="https://www.scrapingbee.com/blog/practical-xpath-for-web-scraping/" >Practical XPath for Web Scraping&lt;/a>&amp;quot;, you'll probably recognize more than just a few similarities, and that is because XPath expressions and CSS selectors actually are quite similar in the way they are being used in data extraction.&lt;/p></description></item><item><title>Practical XPath for Web Scraping</title><link>https://www.scrapingbee.com/blog/practical-xpath-for-web-scraping/</link><pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/practical-xpath-for-web-scraping/</guid><description>&lt;p>XPath is a technology that uses path expressions to select nodes or node-sets in an XML document (or in our case an HTML document). Even if XPath is not a programming language in itself, it allows you to write an expression which can directly point to a specific HTML element, or even tag attribute, without the need to manually iterate over any element lists.&lt;/p>
&lt;p>It looks like the perfect tool for web scraping right? At &lt;a href="https://www.scrapingbee.com" target="_blank" >ScrapingBee&lt;/a> we love XPath! ❤️&lt;/p></description></item><item><title>Getting Started with chromedp</title><link>https://www.scrapingbee.com/blog/getting-started-with-chromedp/</link><pubDate>Sat, 20 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/getting-started-with-chromedp/</guid><description>&lt;p>&lt;a href="https://pkg.go.dev/github.com/chromedp/chromedp" target="_blank" >chromedp&lt;/a> is a Go library for interacting with a headless Chrome or Chromium browser.&lt;/p>
&lt;p>The &lt;code>chromedp&lt;/code> package provides an API that makes controlling Chrome and Chromium browsers simple and expressive, allowing you to automate interactions with websites such as navigating to pages, filling out forms, clicking elements, and extracting data. It's useful for simplifying &lt;a href="https://www.scrapingbee.com/" target="_blank" >web scraping&lt;/a> as well as testing, performance monitoring, and developing browser extensions.&lt;/p>
&lt;p>This article provides an overview of chromedp's advanced features and shows you how to use it for web scraping.&lt;/p></description></item><item><title>Playwright for Python Web Scraping Tutorial with Examples</title><link>https://www.scrapingbee.com/blog/playwright-for-python-web-scraping/</link><pubDate>Fri, 19 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/playwright-for-python-web-scraping/</guid><description>&lt;p>Web scraping is a powerful tool for gathering data from websites, and Playwright is one of the best tools out there to get the job done. In this tutorial, I'll walk you through &lt;strong>how to scrape with Playwright for Python&lt;/strong>. We'll start with the basics and gradually move to more advanced techniques, ensuring you have a solid grasp of the entire process. Whether you're new to web scraping or looking to refine your skills, this guide will help you use Playwright for Python effectively to extract data from the web.&lt;/p></description></item><item><title>Generating Random IPs to Use for Scraping</title><link>https://www.scrapingbee.com/blog/generating-random-ips-to-use-for-scraping/</link><pubDate>Thu, 18 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/generating-random-ips-to-use-for-scraping/</guid><description>&lt;p>Web scraping uses automated software tools or scripts to extract and parse data from websites into structured formats for storage or processing. Many data-driven initiatives—including business intelligence, sentiment analysis, and predictive analytics—rely on web scraping as a method for gathering information.&lt;/p>
&lt;p>However, some websites have implemented anti-scraping measures as a precaution against the misuse of content and breaches of privacy. One such measure is IP blocking, where IPs with known bot patterns or activities are automatically blocked. Another tactic is rate limiting, which restricts the volume of requests that a single IP address can make within a specific time frame.&lt;/p></description></item><item><title>Using jQuery to Parse HTML and Extract Data</title><link>https://www.scrapingbee.com/blog/html-parsing-jquery/</link><pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/html-parsing-jquery/</guid><description>&lt;p>Your web page may sometimes need to use information from other web pages that do not provide an API. For instance, you may need to fetch stock price information from a web page in real time and display it in a widget of your web page. However, some of the stock price aggregation websites don’t provide APIs.&lt;/p>
&lt;p>In such cases, you need to retrieve the source HTML of the web page and manually find the information you need. This process of retrieving and manually parsing HTML to find specific information is known as &lt;a href="https://en.wikipedia.org/wiki/Web_scraping" target="_blank" >web scraping&lt;/a>.&lt;/p></description></item><item><title>Getting Started with Apache Nutch</title><link>https://www.scrapingbee.com/blog/getting-started-with-apache-nutch/</link><pubDate>Tue, 16 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/getting-started-with-apache-nutch/</guid><description>&lt;p>Web crawling is often confused with &lt;a href="https://www.scrapingbee.com/" target="_blank" >web scraping&lt;/a>, which is simply extracting specific data from web pages. A &lt;a href="https://www.scrapingbee.com/blog/crawling-python/" target="_blank" >web crawler&lt;/a> is an automated program that helps you find and catalog relevant data sources.&lt;/p>
&lt;p>Typically, a crawler first makes requests to a list of known web addresses and, from their content, identifies other relevant links. It adds these new URLs to a queue, iteratively takes them out, and repeats the process until the queue is empty. The crawler stores the extracted data—like web page content, meta tags, and links—in a database.&lt;/p></description></item><item><title>Web Scraping with Visual Basic</title><link>https://www.scrapingbee.com/blog/web-scraping-with-visual-basic/</link><pubDate>Mon, 15 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-with-visual-basic/</guid><description>&lt;p>In this tutorial, you will learn how to &lt;a href="https://www.scrapingbee.com/blog/what-is-web-scraping/" target="_blank" >learn how to scrape websites&lt;/a> using Visual Basic.&lt;/p>
&lt;p>Don't worry—you won't be using any actual scrapers or metal tools. You'll just be using some good old-fashioned code. But you might be surprised at just how messy code can get when you're dealing with web scraping!&lt;/p>
&lt;p>You will start by scraping a static HTML page with an HTTP client library and parsing the result with an HTML parsing library. Then, you will move on to scraping dynamic websites using Puppeteer, a headless browser library. The tutorial also covers basic web scraping techniques, such as using CSS selectors to extract data from HTML pages.&lt;/p></description></item><item><title>Web Scraping with Html Agility Pack</title><link>https://www.scrapingbee.com/blog/html-agility-pack/</link><pubDate>Sun, 14 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/html-agility-pack/</guid><description>&lt;p>For any project that pulls content from the web in C# and parses it to a usable format, you will most likely find the HTML Agility Pack. The Agility Pack is standard for &lt;a href="https://www.scrapingbee.com/blog/csharp-html-parser/" target="_blank" >parsing HTML content in C#&lt;/a>, because it has several methods and properties that conveniently work with the DOM. Instead of writing your own parsing engine, the HTML Agility Pack has everything you need to find specific DOM elements, traverse through child and parent nodes, and retrieve text and properties (e.g., HREF links) within specified elements.&lt;/p></description></item><item><title>How to Scrape TikTok: Scrape Profile Stats and Videos</title><link>https://www.scrapingbee.com/blog/how-to-scrape-tiktok/</link><pubDate>Sat, 13 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-tiktok/</guid><description>&lt;p>Are you a data analyst thirsty for social media insights and trends? A Python developer looking for a practical social media scraping project? Maybe you're a social media manager tracking metrics or a content creator wanting to download and analyze your TikTok data? If any of these describe you, you're in the right place!&lt;/p>
&lt;p>&lt;a href="https://www.tiktok.com/" target="_blank" >TikTok&lt;/a>, the social media juggernaut, has taken the world by storm. TikTok's global success is reflected in its numbers:&lt;/p></description></item><item><title>Getting Started with RSelenium</title><link>https://www.scrapingbee.com/blog/getting-started-with-rselenium/</link><pubDate>Fri, 12 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/getting-started-with-rselenium/</guid><description>&lt;p>The value of unstructured data has never been more prominent than with the recent breakthrough of large language models such as &lt;a href="https://www.scrapingbee.com/features/chatgpt/" target="_blank" >ChatGPT&lt;/a> and Google Bard. Your organization can also capitalize on this success by building your own expert models. And what better way to collect droves of unstructured data than by scraping it?&lt;/p>
&lt;p>This article outlines how to scrape the web using R and a package known as &lt;em>RSelenium&lt;/em>. RSelenium is a binding for the Selenium WebDriver, a popular web scraping tool with unmatched versatility. Selenium's interaction capabilities let you manipulate a web page before scraping its contents. This makes it one of the most popular web scraping frameworks.&lt;/p></description></item><item><title>Web Scraping in Golang Tutorial With Quick Start Examples</title><link>https://www.scrapingbee.com/blog/web-scraping-go/</link><pubDate>Thu, 11 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-go/</guid><description>&lt;p>In this article, you will learn how to create a simple web scraper using &lt;a href="https://golang.org/" target="_blank" >Go&lt;/a>.&lt;/p>
&lt;p>Robert Griesemer, Rob Pike, and Ken Thompson created the Golang programming language at Google, and it has been in the market since 2009. Go, also known as Golang, has many brilliant features. Getting started with Go is fast and straightforward. As a result, this comparatively newer language is gaining a lot of attraction in the developer world.&lt;/p></description></item><item><title>Web Scraping with node-fetch</title><link>https://www.scrapingbee.com/blog/node-fetch/</link><pubDate>Wed, 10 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/node-fetch/</guid><description>&lt;p>The introduction of the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API" target="_blank" >Fetch API&lt;/a> changed how Javascript developers make HTTP calls. This means that developers no longer have to download third-party packages just to make an HTTP request. While that is great news for frontend developers, as &lt;code>fetch&lt;/code> can only be used in the browser, backend developers still had to rely on different third-party packages. Until &lt;code>node-fetch&lt;/code> came along, which aimed to provide the same fetch API that browsers support. In this article, we will take a look at how &lt;code>node-fetch&lt;/code> can be used to help you scrape the web!&lt;/p></description></item><item><title>HTML Parsing in Java with JSoup</title><link>https://www.scrapingbee.com/blog/java-parse-html-jsoup/</link><pubDate>Tue, 09 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/java-parse-html-jsoup/</guid><description>&lt;p>It's a fine Sunday morning, and suddenly an idea for your next big project hits you: &amp;quot;How about I take the data provided by company X and build a frontend for it?&amp;quot; You jump into coding and realize that company X doesn't provide an API for their data. Their website is the only source for their data.&lt;/p>
&lt;p>It's time to resort to good old web scraping, the automated process to parse and extract data from the HTML source code of a website.&lt;/p></description></item><item><title>How to extract data from a website? Ultimate guide to pull data from any website</title><link>https://www.scrapingbee.com/blog/how-to-extract-data-from-a-website/</link><pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-extract-data-from-a-website/</guid><description>&lt;p>The web is becoming an incredible data source. There are more and more data available online, from user-generated content on social media and forums, E-commerce websites, real-estate websites or media outlets... Many businesses are built on this web data, or highly depend on it.&lt;/p>
&lt;p>Manually extracting data from a website and copy/pasting it to a spreadsheet is an error-prone and time consuming process. If you need to scrape millions of pages, it's not possible to do it manually, so you should automate it.&lt;/p></description></item><item><title>How to Scrape Amazon Prices with ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-amazon-prices/</link><pubDate>Sun, 07 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-amazon-prices/</guid><description>&lt;p>Learning how to scrape Amazon prices is a great way to access real-time product data for market research, competitor analysis, and price tracking. However, as the biggest retailer in the world, Amazon imposes many scraping restrictions to keep automated connections away from its sensitive price intelligence.&lt;/p>
&lt;p>The Amazon page uses dynamic JavaScript elements, aggressive anti-bot systems, and geo-based restrictions that make it difficult to extract price data. This tutorial will show you how to extract Amazon product prices with Python and our powerful API, because not every web scraper can handle data from Amazon.&lt;/p></description></item><item><title>How to Scrape Yahoo: Step-by-Step Tutorial</title><link>https://www.scrapingbee.com/blog/how-to-scrape-yahoo/</link><pubDate>Sat, 06 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-yahoo/</guid><description>&lt;p>Scraping Yahoo search results and finance data is a powerful way to collect real-time insights on market trends, stock performance, and company profiles. With ScrapingBee, you can extract this information easily — even from JavaScript-heavy pages that typically block traditional scrapers.&lt;/p>
&lt;p>Yahoo’s dynamic content and anti-bot protections make it difficult to scrape using basic tools. But ScrapingBee handles these challenges out of the box. Our API automatically renders JavaScript, rotates proxies, and bypasses bot detection to deliver clean, structured data from both Yahoo Search and Yahoo Finance.&lt;/p></description></item><item><title>How to Scrape Yellow Pages with ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-yellow-pages/</link><pubDate>Fri, 05 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-yellow-pages/</guid><description>&lt;p>Learning how to scrape Yellow Pages can unlock access to a rich database of business listings. With minimal technical knowledge, our approach to scraping HTML content extracts data that you can use for lead generation, market research, or local SEO.&lt;/p>
&lt;p>Like most online platforms rich with useful coding data, Yellow Pages present JavaScript-rendered content and anti-scraping measures, which often stop traditional scraping efforts. Our HTML API is built to export data while automatically handling restrictions by loading dynamic content and implementing smart proxy rotation to ensure consistent access with minimal coding skills.&lt;/p></description></item><item><title>How to Scrape Google Finance Using Python and ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-finance/</link><pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-finance/</guid><description>&lt;p>Learning how to scrape Google Finance gives you access to real-time stock prices, company performance metrics, and other financial metrics. However, scraping stock information isn’t always simple, especially on platforms that receive so much traffic. Other issues lie in loading dynamic JavaScript elements, frequent layout changes, and IP restrictions, which make it difficult for automated scrapers to extract consistent data.&lt;/p>
&lt;p>This tutorial will teach you how to build a Google Finance scraper from scratch using Python and our versatile HTML API. We’ll cover everything – from setting up your environment to writing code that automatically handles JavaScript and any connection restrictions.&lt;/p></description></item><item><title>How to Scrape Pinterest: Full Tutorial with ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-pinterest/</link><pubDate>Wed, 03 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-pinterest/</guid><description>&lt;p>In this tutorial, I’ll show you how to scrape Pinterest using ScrapingBee’s API. Whether you want to scrape Pinterest data for trending images, individual pins, Pinterest profiles, or entire boards, this guide explains how to build a web scraper that works.&lt;/p>
&lt;p>Scraping Pinterest can be tough. Its anti-bot protection often trips up typical web scrapers. That's why I prefer using ScrapingBee. With this tool, you won't need to run a headless browser or wait for page elements to load manually. You just plug in your API key, decide what data to collect, and extract Pinterest data with ease.&lt;/p></description></item><item><title>How to Scrape Glassdoor: Job Titles, Salaries, and Company Ratings</title><link>https://www.scrapingbee.com/blog/how-to-scrape-glassdoor/</link><pubDate>Tue, 02 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-glassdoor/</guid><description>&lt;p>Trying to learn how to scrape Glassdoor data? You're at the right place. In this guide, I’ll show you exactly how to extract job title descriptions, salaries, and company information using ScrapingBee’s powerful API.&lt;/p>
&lt;p>You may already know this – Glassdoor is a goldmine of information, but scraping it can be a challenging task. The site utilizes dynamic content loading and sophisticated bot protection. As a result, the Glassdoor website is out of reach for an average web scraper. I’ve spent countless hours battling these defenses with custom solutions with no luck.&lt;/p></description></item><item><title>How to Scrape Bing with ScrapingBee: Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-bing/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-bing/</guid><description>&lt;p>Learning how to scrape Bing search results can feel like navigating a minefield of anti-bot measures and IP blocks. Microsoft's Bing search engine has sophisticated protection systems to detect traditional scraping attempts faster than you can debug your first request failure.&lt;/p>
&lt;p>That’s exactly why I use ScrapingBee. Instead of wrestling with proxy rotations, JavaScript rendering, and constantly changing anti-bot methods, this web scraper handles all the complexity. It allows you to scrape search results data without any technical issues.&lt;/p></description></item><item><title>How to Scrape TripAdvisor: Step-by-Step with ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-tripadvisor/</link><pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-tripadvisor/</guid><description>&lt;p>Want to learn how to scrape TripAdvisor? Tired of overpaying for your trips? As one of the biggest online travel platforms, it has tons of valuable information that can help you save money and enjoy your time abroad.&lt;/p>
&lt;p>Scraping TripAdvisor is a great way to keep an eye on price changes, customer sentiment, and other details that can impact your trips and vacations. In this tutorial, we will explain how to extract hotel names, prices, ratings, and reviews from TripAdvisor using our web scraping API with Python.&lt;/p></description></item><item><title>How to Scrape IMDb: Step-by-Step with ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-imdb/</link><pubDate>Sat, 30 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-imdb/</guid><description>&lt;p>If you want to learn how to scrape IMDb data, you’re in the right place. This step-by-step tutorial shows you how to extract data, including movie details, ratings, actors, and review dates, using a Python script. You’ll see how to set up the required libraries, process the HTML content, and store your results in a CSV file for further analysis using ScrapingBee’s API.&lt;/p>
&lt;p>Why ScrapingBee? Here's the thing – if you want to scrape IMDb data, you need an infrastructure of proxies, JavaScript rendering, and other tools to avoid IP blocks. Scraping this website is particularly challenging due to its strict anti-scraping measures, with no exceptions. But setting up everything manually costs time and resources.&lt;/p></description></item><item><title>How to Scrape Etsy: Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-etsy/</link><pubDate>Fri, 29 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-etsy/</guid><description>&lt;p>In this guide, I'll teach you how to scrape Etsy, one of the most popular marketplaces for handmade and vintage items. If you've ever tried scraping Etsy before, you know it's not exactly a walk in the park. The website's anti-bot protections, such as CAPTCHA, IP address flagging, and constant updates, make web scraping Etsy product data a challenge.&lt;/p>
&lt;p>That’s why ScrapingBee's Etsy scraper is the best tool to get the job done. It's a reliable web scraper that helps you capture real-time data from Etsy listings. It's built to handle all complex parts with JavaScript rendering and proxy rotation. With our API at hand, you can focus on extracting the data you need: Etsy product titles, prices, shop names, and more.&lt;/p></description></item><item><title>Create a sitemap link extractor using ScrapingBee in N8N</title><link>https://www.scrapingbee.com/blog/create-a-sitemap-link-extractor-using-scrapingbee-in-n8n/</link><pubDate>Thu, 28 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/create-a-sitemap-link-extractor-using-scrapingbee-in-n8n/</guid><description>&lt;p>I want to scrape a website, but wait, how do I get the links?&lt;/p>
&lt;p>Good question! That's exactly what we are going to answer in this blog post.&lt;/p>
&lt;p>While there are multiple options for this, we are going with an easy route, that is, Extracting links from sitemap!&lt;/p>
&lt;p>Most websites on the internet provides all of their links in a sitemap.xml or similar file. The reason they create this is to make it easier for search engines to find the website links.


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAA2klEQVR4nIyR72rEMAzDJcdJL&amp;#43;Pe/0FH/7eOhy/HGCyDCZoPbX&amp;#43;yYum8LO6&amp;#43;bue6H0mElEetRMgdZJyqSVLCL&amp;#43;n2udh9NtEi4g647fMM4KNqWJAEMosmDuBnfZ7XyUnMGglS3J2EhJe31rLmSUuadADHMIAxA3ifTkp8E9WHkhQZZI4fRi/feS&amp;#43;77DA46lRTGfAytPyWxxrwCjfQACbp7mbWYYev&amp;#43;3Yf1z9jh5q3LKold69Xaf1Cf8M9ZywJ4ownl4JBTR2OYigiPzP3nkDcZqk1SePVfAUAAP//3uplX&amp;#43;uNRIUAAAAASUVORK5CYII=); background-size: cover">
 &lt;svg width="1200" height="628" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/create-a-sitemap-link-extractor-using-scrapingbee-in-n8n/cover_hu10825251409134839697.png 1200w '
 data-src="https://www.scrapingbee.com/blog/create-a-sitemap-link-extractor-using-scrapingbee-in-n8n/cover_hu10825251409134839697.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/create-a-sitemap-link-extractor-using-scrapingbee-in-n8n/cover_hu10825251409134839697.png 1200w'
 src="https://www.scrapingbee.com/blog/create-a-sitemap-link-extractor-using-scrapingbee-in-n8n/cover.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>
&lt;/p></description></item><item><title>How to Scrape Indeed Job Listings with ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-indeed/</link><pubDate>Thu, 28 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-indeed/</guid><description>&lt;p>In this guide, we'll dive into how to scrape Indeed job listings without getting blocked. The first time I tried to extract job data from this website, it was tricky. I thought a simple requests.get() would do the trick, but within minutes I was staring at a CAPTCHA wall. That’s when I realized I needed a proper web scraper with proxy rotation and headers baked in to scrape job listing data.&lt;/p></description></item><item><title>How to Scrape Wikipedia with ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-wikipedia/</link><pubDate>Wed, 27 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-wikipedia/</guid><description>&lt;p>Ever wanted to extract valuable insights and data from largest encyclopedias online? Then it is it to learn how to scrape Wikipedia pages! As one of the biggest treasuries of structured content, it is constantly reviewed and fact-checked by fellow users, or at least provide valuable insights and links to sources.&lt;/p>
&lt;p>Wikipedia has structured content but scraping can be tricky due to rate limiting, which restricts repeated connection requests to websites. Fortunately, our powerful tools can overcome these hurdles, ensuring efficient data extraction in a clean HTML or JSON format.&lt;/p></description></item><item><title>How to Scrape Craigslist: Step-by-Step Tutorial</title><link>https://www.scrapingbee.com/blog/how-to-scrape-craigslist/</link><pubDate>Tue, 26 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-craigslist/</guid><description>&lt;p>Have you ever tried learning how to scrape Craigslist and run into a wall of CAPTCHAs and IP blocks? Trust me, my first web scraping attempt was just as rocky.&lt;/p>
&lt;p>Craigslist is a gold mine of data. It contains everything from job ads, housing, items for sale, to various services. But it's not an easy nut to crack for beginners in scraping.&lt;/p>
&lt;p>Just like in any other web scraping project, you won't get anywhere without proxy rotation, JavaScript rendering, and solving CAPTCHAs. Fortunately, ScrapingBee handles all of it on autopilot. I think of it as an automated scraping assistant that handles all the technicalities.&lt;/p></description></item><item><title>How to Scrape Google Images: A Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-images/</link><pubDate>Mon, 25 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-images/</guid><description>&lt;p>Welcome to a guide on how to scrape Google images. We’ll dive into the exact process of extracting image URLs, titles, and source links from Google Images search results. By the end of this guide, you'll be able to get all the image data from multiple search pages.&lt;/p>
&lt;p>Here's the catch, though: to scrape data, you'll need a reliable tool, such as ScrapingBee. Since Google Images implements strong anti-scraping measures, you won't be able to get images without a strong infrastructure.&lt;/p></description></item><item><title>How to Scrape Google Flights with Python and ScrapingBee</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-flights/</link><pubDate>Sun, 24 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-flights/</guid><description>&lt;p>As the the key source of information on the internet, Google contains a lot of valuable public data. Just like with most industries, for many, it is the main source for tracking flight prices plus departure and arrival locations for trips.&lt;/p>
&lt;p>As you already know, automation plays a vital role here, as everyone wants an optimal setup to compare multiple airlines and their pricing strategies to save money. Even better, collecting data with your own Google Flights scraper saves a lot of time and provides a consistent access to new deals.&lt;/p></description></item><item><title>How to Scrape Costco: Complete Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-costco/</link><pubDate>Sat, 23 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-costco/</guid><description>&lt;p>Learning how to scrape Costco can be incredibly valuable for gathering product information, monitoring prices, or conducting market research. In my experience, while there are several approaches to utilize coding tools for scraping Costco's website, our robust HTML API offers the most straightforward solution that handles JavaScript rendering, proxy rotation, and other key elements that tend to overcomplicate data extraction.&lt;/p>
&lt;p>In this guide, we will cover how you can extract data from retailers like Costco without getting blocked, dealing with JavaScript rendering, or managing proxies. Let's take a closer look at how you can use our powerful ScrapingBee HTML API with minimal coding knowledge and extract Costco's product data&lt;/p></description></item><item><title>How to Scrape eBay: Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-ebay/</link><pubDate>Sat, 23 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-ebay/</guid><description>&lt;p>Learning how to scrape data from eBay efficiently requires the right tools and techniques. eBay’s complex structure and anti-scraping measures make it challenging to extract data reliably.&lt;/p>
&lt;p>In this guide, I’ll walk you through the entire process of setting up and running an eBay scraper that actually works. Whether you’re tracking prices, researching products, or gathering seller data, you’ll discover how to extract the information you need without getting blocked&lt;/p></description></item><item><title>How to Scrape Expedia: Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-expedia/</link><pubDate>Sat, 23 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-expedia/</guid><description>&lt;p>Expedia scraping is a great strategy for tracking of hotel prices, travel trends, and comparison of deals with real-time data. It’s especially useful for building tools that rely on dynamic hotel details like location, rating, and pricing strategies, but accessing these platforms is a lot harder with automated tools.&lt;/p>
&lt;p>The main challenge is that Expedia loads its content using JavaScript, so simple scrapers can’t see the hotel listings without rendering the page. On top of that, the site often changes its layout and uses anti-bot measures like IP blocking.&lt;/p></description></item><item><title>How to Scrape Google Play: Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-play/</link><pubDate>Sat, 23 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-play/</guid><description>&lt;p>Want to extract app names, ratings, reviews, and install counts from Google Play? Scraping is one of the fastest ways to collect valuable mobile app data from Google Play, but dynamic content and anti-bot systems make traditional scrapers unreliable&lt;/p>
&lt;p>In this guide, we will teach you to scrape Google Play using Python and our beloved ScrapingBee API. Here you will find the basic necessities for your collection goals, helping you export data in clean, structured formats. Let’s make scraping simple and scalable!&lt;/p></description></item><item><title>How to Scrape Google Scholar with Python: A ScrapingBee Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-scholar/</link><pubDate>Sat, 23 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-scholar/</guid><description>&lt;p>Did you know that learning how to scrape Google Scholar can supercharge your research papers? This search engine is a gold mine of citations and scholarly articles that you could be analyzing at scale with a web scraper. With a reliable scraping service like ScrapingBee and some basic Python, you can automate repetitive research tasks more efficiently.&lt;/p>
&lt;p>Why ScrapingBee, you may ask? Well, let’s get one thing straight – Google Scholar has tight anti-scraping measures. It means that you need a reliable Google Scholar scraper that can handle IP bans, annoying CAPTCHAs, and &lt;a href="https://www.scrapingbee.com/features/javascript-scenario/" target="_blank" >JavaScript rendering&lt;/a>. Our web scraper is built with all these features, allowing you to scrape Google Scholar data without coding everything from scratch.&lt;/p></description></item><item><title>How to Scrape Home Depot: Complete Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-homedepot/</link><pubDate>Sat, 23 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-homedepot/</guid><description>&lt;p>Scraping Home Depot’s product data requires handling JavaScript rendering and potential anti-bot measures. With ScrapingBee’s API, you can extract product information from Home Depot without managing headless browsers, proxies, or CAPTCHAs&lt;/p>
&lt;p>Simply set up a request with JavaScript rendering enabled, target the correct URLs, and extract structured data using your preferred HTML parser. Our API handles all the complex parts of web scraping, letting you focus on using the data. In this guide, we will explain how you can do the same, working with Python and our prolific ScrapingBee API!&lt;/p></description></item><item><title>How to Scrape Amazon Reviews With Python (2025)</title><link>https://www.scrapingbee.com/blog/how-to-scrape-amazon-reviews/</link><pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-amazon-reviews/</guid><description>&lt;p>Amazon review scraping is a great way for other retailers to learn about customer wants and needs through one of the biggest retailers in e-commerce. However, many are discouraged from trying it due to the technical barrier of writing code.&lt;/p>
&lt;p>If you want to access Amazon product reviews in a user-friendly way, there is no better combo than working with our HTML API through Python and its many additional libraries that help extract data from product pages. In this guide, we will cover the basics of targeting local Amazon reviews, so follow along and soon you'll be able to test the service, guaranteeing a reliable web scraping experience.&lt;/p></description></item><item><title>How to Scrape Google Hotels: Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-hotels/</link><pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-hotels/</guid><description>&lt;p>Learning how to scrape Google Hotels opens up opportunities to gain a competitive edge for your business. When you scrape this specialized search engine, you gain access to valuable pricing and availability data that can transform your competitive analysis. By using targeted scraping methods, you can collect all the hotel data that fuels market research, tracks pricing changes in real time, and supports strategic decisions.&lt;/p>
&lt;p>However, even experienced developers struggle to scrape Google Hotels without getting blocked. IP blocks, CAPTCHAs, and JavaScript rendering issues create significant hurdles when trying to extract hotel data. But don’t worry – our powerful &lt;a href="https://www.scrapingbee.com/" target="_blank" >web scraping API&lt;/a> helps you overcome these challenges.&lt;/p></description></item><item><title>How to Scrape Google Jobs: Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-jobs/</link><pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-jobs/</guid><description>&lt;p>If you're looking for a straightforward way to scrape Google Jobs, you're in the right place. In this guide, we'll walk through the steps to extract job listings and related data in just minutes using ScrapingBee. Our powerful &lt;a href="https://www.scrapingbee.com/" target="_blank" >web scraping API&lt;/a> handles the toughest parts of the process for you: JavaScript rendering, proxy rotation, and CAPTCHA bypassing to provide the neccessary tools for consistent and reliable data extraction.&lt;/p>
&lt;h2 id="quick-answer-tldr">Quick Answer (TL;DR)&lt;/h2>
&lt;p>To scrape Google Jobs with our HTML API, write a Python script to send a &lt;code>GET&lt;/code> request to its endpoint with your target Google search URL. Our tools allow you toenable JavaScript rendering by adding a short &lt;code>render_js=true&lt;/code> line, which enables the use of a headless browser to bypass bot restriction and load Google's dynamic content. Add a BS4 parser to remove clutter and focus only on HTML elements that carry relevant job data.&lt;/p></description></item><item><title>How to Scrape Google Maps: A Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-maps/</link><pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-maps/</guid><description>&lt;p>Need business leads or location data from Google Maps but frustrated by constant CAPTCHAs, IP blocks, or unreliable scraping scripts? Scraping is one of the fastest ways to gather high-value information, but Google’s aggressive anti-bot measures turn large-scale data collection into a real challenge.&lt;/p>
&lt;p>Access to business names, addresses, ratings, and phone numbers is too valuable to ignore, so users keep finding ways around Google’s automation blocks. But how exactly do they do it?&lt;/p></description></item><item><title>How to Scrape Google News: Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-news/</link><pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-news/</guid><description>&lt;p>In this blog post, I'll show you how to scrape google news by using Python and our Google news API, even if you're not a Python developer. You'll start with the straightforward RSS feed URL method to grab news headlines in structured XML. Then I'll show you how ScrapingBee’s web scraping API, our Google News API and IP rotation can extract public data.&lt;/p>
&lt;p>By the end of this guide, you’ll have an easy access to the every news title you need without getting bogged down in complex infrastructure. Let's begin!&lt;/p></description></item><item><title>How to Scrape Google Shopping: A Step-by-Step Guide</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-shopping/</link><pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-shopping/</guid><description>&lt;p>In this guide we’ll dive into Google Shopping scraping techniques that actually work in 2025. If you’ve ever needed to extract product data, prices, or seller information from Google Shopping, you’re in the right place. Google Shopping scraping has become essential for businesses that need competitive pricing data. I’ve spent years refining these methods, and today I’ll show you how to use ScrapingBee to make this process straightforward and reliable.&lt;/p></description></item><item><title>How to Scrape Data in Go Using Colly</title><link>https://www.scrapingbee.com/blog/how-to-scrape-data-in-go-using-colly/</link><pubDate>Thu, 21 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-data-in-go-using-colly/</guid><description>&lt;p>&lt;a href="https://go.dev/" target="_blank" >Go&lt;/a> is a versatile language with packages and frameworks for doing almost everything. Today you will learn about one such framework called &lt;a href="https://go-colly.org/" target="_blank" >Colly&lt;/a> that has greatly eased the development of web scrapers in Go.&lt;/p>
&lt;p>Colly provides a convenient and powerful set of tools for extracting data from websites, automating web interactions, and building web scrapers. In this article, you will gain some practical experience with &lt;a href="https://go-colly.org/" target="_blank" >Colly&lt;/a> and learn how to use it to scrape comments from &lt;a href="https://news.ycombinator.com/news" target="_blank" >Hacker News&lt;/a>.&lt;/p></description></item><item><title>Easy web scraping with Scrapy</title><link>https://www.scrapingbee.com/blog/web-scraping-with-scrapy/</link><pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-with-scrapy/</guid><description>&lt;p>In the previous post about &lt;a href="https://www.scrapingbee.com/blog/web-scraping-101-with-python/" target="_blank" >Web Scraping with Python&lt;/a> we talked a bit about Scrapy. In this post we are going to dig a little bit deeper into it.&lt;/p>
&lt;p>Scrapy is a wonderful open source Python web scraping framework. It handles the most common use cases when doing web scraping at scale:&lt;/p>
&lt;ul>
&lt;li>Multithreading&lt;/li>
&lt;li>Crawling (going from link to link)&lt;/li>
&lt;li>Extracting the data&lt;/li>
&lt;li>Validating&lt;/li>
&lt;li>Saving to different format / databases&lt;/li>
&lt;li>Many more&lt;/li>
&lt;/ul>
&lt;p>The main difference between Scrapy and other commonly used libraries, such as Requests / BeautifulSoup, is that it is opinionated, meaning it comes with a set of rules and conventions, which allow you to solve the usual web scraping problems in an elegant way.&lt;/p></description></item><item><title>How To Set Up a Rotating Proxy in Puppeteer</title><link>https://www.scrapingbee.com/blog/how-to-set-up-a-rotating-proxy-in-puppeteer/</link><pubDate>Tue, 19 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-set-up-a-rotating-proxy-in-puppeteer/</guid><description>&lt;p>&lt;a href="https://www.npmjs.com/package/puppeteer" target="_blank" >Puppeteer&lt;/a> is a popular headless browser used with Node.js for web scraping. However, even with Puppeteer, your IP can get blocked if your script is identified as a bot. That's where the Puppeteer proxy comes in.&lt;/p>
&lt;p>A proxy acts as a middleman between the client and server. When a client makes a request through a proxy, the proxy forwards it to the server. This makes detecting and blocking your IP harder for the target site.&lt;/p></description></item><item><title>What to Do If Your IP Gets Banned While You're Scraping</title><link>https://www.scrapingbee.com/blog/what-to-do-if-your-ip-gets-banned-while-youre-scraping/</link><pubDate>Mon, 18 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/what-to-do-if-your-ip-gets-banned-while-youre-scraping/</guid><description>&lt;p>Web scraping is valuable for gathering information, studying markets, and understanding competition. But web scrapers often run into a problem: getting banned from websites.&lt;/p>
&lt;p>In most cases, it happens because the scrapers violated the website's terms of service (ToS) or generate so much traffic that they abuse the website's resources and prevent normal functioning. To protect itself, the website bans your IP from accessing its resources either temporarily or permanently.&lt;/p></description></item><item><title>How to scrape channel data from YouTube</title><link>https://www.scrapingbee.com/blog/web-scraping-youtube/</link><pubDate>Sun, 17 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-youtube/</guid><description>&lt;p>If you are an internet user, it is safe to assume that you are no stranger to YouTube. It is the hub for videos on internet and even back in 2020, 500 hours of videos were being uploaded to YouTube every minute! This has led to the accumulation of a ton of useful data on the platform. You can extract and make use of some of this data via the &lt;a href="https://developers.google.com/youtube/v3" target="_blank" >official YouTube API&lt;/a> but it is rate limited and doesn't contain all the data viewable on the website. In this tutorial, you will learn how you can scrape YouTube data using Selenium. This tutorial will specifically focus on extracting information about videos uploaded by a channel but the techniques are easily transferrable to extracting search results and individual video data.&lt;/p></description></item><item><title>How to submit a form with Puppeteer?</title><link>https://www.scrapingbee.com/blog/submit-form-puppeteer/</link><pubDate>Sat, 16 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/submit-form-puppeteer/</guid><description>&lt;p>In this article, we will take a look at how to automate form submission using Puppeteer. &lt;a href="https://pptr.dev/" target="_blank" >Puppeteer&lt;/a> is an open source Node library that provides a high-level API to control Chrome or Chromium based browsers over the &lt;a href="https://chromedevtools.github.io/devtools-protocol/" target="_blank" >DevTools Protocol&lt;/a>. Every tasks that you can perform with a Chrome browser can be automated with Puppeteer. This makes Puppeteer an ideal tool for web scraping and test automation. In this article, we will go over everything you need to know about automating form submission with Puppeteer. We will discuss&lt;/p></description></item><item><title>How To Set Up A Rotating Proxy in Selenium with Python</title><link>https://www.scrapingbee.com/blog/how-to-set-up-a-rotating-proxy-in-selenium-with-python/</link><pubDate>Fri, 15 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-set-up-a-rotating-proxy-in-selenium-with-python/</guid><description>&lt;p>&lt;a href="https://pypi.org/project/selenium/" target="_blank" >Selenium&lt;/a> is a popular browser automation library that allows you to control headless browsers programmatically. However, even with Selenium, your script can still be identified as a bot and your IP address can be blocked. This is where Selenium proxies come in.&lt;/p>
&lt;p>A proxy acts as a middleman between the client and server. When a client makes a request through a proxy, the proxy forwards it to the server. This makes detecting and blocking your IP harder for the target site.&lt;/p></description></item><item><title>Web Scraping with Elixir</title><link>https://www.scrapingbee.com/blog/web-scraping-elixir/</link><pubDate>Thu, 14 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-elixir/</guid><description>&lt;p>Web scraping is the process of extracting data from a website. Scraping can be a powerful tool in a developer's arsenal when they're looking at problems like automation or investigation, or when they need to collect data from public websites that lack an API or provide limited access to the data.&lt;/p>
&lt;p>People and businesses from a myriad of different backgrounds use web scraping, and it's more common than people realize. In fact, if you've ever copy-pasted code from a website, you've performed the same function as a web scraper—albeit in a more limited fashion.&lt;/p></description></item><item><title>How to bypass cloudflare antibot protection at scale in 2025</title><link>https://www.scrapingbee.com/blog/how-to-bypass-cloudflare-antibot-protection-at-scale/</link><pubDate>Wed, 13 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-bypass-cloudflare-antibot-protection-at-scale/</guid><description>&lt;p>Over &lt;a href="https://backlinko.com/cloudflare-users#cloudfare-key-stats" target="_blank" >7.59 million&lt;/a> active websites use Cloudflare. The website you intend to scrape might be protected by it. Websites protected by services like Cloudflare can be challenging to scrape due to the various anti-bot measures they implement. If you've tried scraping such websites, you're likely already aware of the difficulty of bypassing Cloudflare's bot detection system.&lt;/p>
&lt;p>Bypassing Cloudflare becomes a near-necessity for large-scale projects or scraping popular websites. There are various methods to bypass Cloudflare, each with its pros and cons. In this guide, we'll explore each method in detail, allowing you to choose the one that best suits your needs.&lt;/p></description></item><item><title>How to use AI for automated price scraping?</title><link>https://www.scrapingbee.com/blog/ai-price-scraping/</link><pubDate>Tue, 12 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/ai-price-scraping/</guid><description>&lt;p>In order to perform price scraping, you need to know the CSS selector or the xPath for the target element. Therefore, if you are scraping thousands of websites, you need to manually figure out the selector for each of them. And if the page changes, you need to change that as well.&lt;/p>
&lt;p>Well, not anymore.&lt;/p>
&lt;p>Today, you are going to learn how to perform automated price scraping with AI. You are going to use the power of AI to automatically get the CSS selector of the elements you want to scrape, so that you can do it at scale.&lt;/p></description></item><item><title>Infinite Scroll with Puppeteer</title><link>https://www.scrapingbee.com/blog/infinite-scroll-puppeteer/</link><pubDate>Mon, 11 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/infinite-scroll-puppeteer/</guid><description>&lt;p>&lt;strong>&lt;a href="https://www.scrapingbee.com/" target="_blank" >Web scraping&lt;/a> is automating the process of data collection from the web.&lt;/strong> This usually means deploying a “crawler” that automatically searches the web and scrapes data from selected pages. Data collection through scraping can be much faster, eliminating the need for manual data-gathering, &lt;em>and maybe mandatory if the website has no provided API&lt;/em>. Scraping methods change based on the website's data display mechanisms.&lt;/p>
&lt;p>One way to display content is through a one-page website, also known as a single-page application. Single-page applications (SPA) have become a trend, and with the implementation of infinite scrolling techniques, programmers can develop SPA that allows users to scroll &lt;em>forever&lt;/em>. If you are an avid social media user, you have most likely experienced this feature before on platforms like Instagram, Twitter, Facebook, Pinterest, etc.&lt;/p></description></item><item><title>How to execute JavaScript with Scrapy?</title><link>https://www.scrapingbee.com/blog/scrapy-javascript/</link><pubDate>Sun, 10 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/scrapy-javascript/</guid><description>&lt;p>Most modern websites use a client-side JavaScript framework such as React, Vue or Angular. Scraping data from a dynamic website without server-side rendering often requires executing JavaScript code.&lt;/p>
&lt;p>I’ve scraped hundreds of sites, and I always use Scrapy. Scrapy is a popular Python web scraping framework. Compared to other Python scraping libraries, such as Beautiful Soup, Scrapy forces you to structure your code based on some best practices. In exchange, Scrapy takes care of concurrency, collecting stats, caching, handling retrial logic and many others.&lt;/p></description></item><item><title>The Best Ruby HTTP clients</title><link>https://www.scrapingbee.com/blog/best-ruby-http-clients/</link><pubDate>Sat, 09 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-ruby-http-clients/</guid><description>&lt;p>How does one choose the perfect HTTP Client? The Ruby ecosystem offers a wealth of gems to make an HTTP request. Some are pure Ruby, some are based on Ruby's native &lt;code>Net::HTTP&lt;/code>, and some are wrappers for existing libraries or Ruby bindings for libcurl. In this article, I will present the most popular gems by providing a short description and code snippets of making a request to the &lt;a href="https://icanhazdadjoke.com/" target="_blank" >Dad Jokes API&lt;/a>. The gems will be provided in the order from the most-downloaded one to the least. To conclude I will compare them all in a table format and provide a quick summary, as well as guidance on which gem to choose.&lt;/p></description></item><item><title>Getting Started with MechanicalSoup</title><link>https://www.scrapingbee.com/blog/getting-started-with-mechanicalsoup/</link><pubDate>Fri, 08 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/getting-started-with-mechanicalsoup/</guid><description>&lt;p>Python is a popular choice for web-scraping projects, owing to how easy the language makes scripting and its wide range of scraping libraries and frameworks. &lt;a href="https://mechanicalsoup.readthedocs.io/" target="_blank" >MechanicalSoup&lt;/a> is one such library that can help you set up web scraping in Python quite easily.&lt;/p>
&lt;p>This Python browser automation library allows you to simulate user actions on a browser like the following:&lt;/p>
&lt;ul>
&lt;li>Filling out forms&lt;/li>
&lt;li>Submitting data&lt;/li>
&lt;li>Clicking buttons&lt;/li>
&lt;li>Navigating through pages&lt;/li>
&lt;/ul>
&lt;p>One of the key features of MechanicalSoup is that its stateful browser can retain state and track state changes between requests. This helps simplify browser automation scripts in complex use cases, such as handling forms and dynamic content. MechanicalSoup also comes prebundled with &lt;a href="https://pypi.org/project/beautifulsoup4/" target="_blank" >Beautiful Soup&lt;/a>, a popular Python library for parsing and manipulating web page content. Using MechanicalSoup and Beautiful Soup, you can write complex scraping scripts easily.&lt;/p></description></item><item><title>How to Easily Scrape Shopify Stores With AI</title><link>https://www.scrapingbee.com/blog/how-to-easily-scrape-shopify-stores-with-ai/</link><pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-easily-scrape-shopify-stores-with-ai/</guid><description>&lt;p>Scraping Shopify stores can be a challenging task because each store uses a unique theme and layout, making traditional scrapers with rigid selectors unreliable. That’s why we'll be showing you how to leverage an &lt;a href="https://www.scrapingbee.com/features/ai-web-scraping-api/" target="_blank" >AI-powered web scraper&lt;/a> that easily adapts to any page structure, effortlessly extracting Shopify e-commerce data no matter how the store is designed.&lt;/p>
&lt;p>In this tutorial, we’ll be using our Python &lt;a href="https://www.scrapingbee.com/documentation/#getting-started" target="_blank" >Scrapingbee client&lt;/a> to scrape one of the most successful Shopify stores on the planet; &lt;a href="http://gymshark.com" target="_blank" >gymshark.com&lt;/a>, to obtain all the product page URLs and the corresponding product details from each product page. We’ve previously written blogs about scraping product listing pages &lt;a href="https://www.scrapingbee.com/blog/web-scraping-with-scrapy/#scraping-a-single-product" target="_blank" >using Scrapy&lt;/a> or &lt;a href="https://www.scrapingbee.com/blog/scraping-e-commerce-product-data/" target="_blank" >using schema.org metadata&lt;/a>. We’ll also be using &lt;a href="https://www.scrapingbee.com/documentation/#ai_query" target="_blank" >our AI query feature&lt;/a> to extract structured data from each product page without parsing any HTML. Please note that we’re using Python only for demonstration and this technique and our API will work with any programming language.&lt;/p></description></item><item><title>The 5 Best Free Proxy Lists for Web Scraping</title><link>https://www.scrapingbee.com/blog/best-free-proxy-list-web-scraping/</link><pubDate>Wed, 06 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-free-proxy-list-web-scraping/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>In this article, we will look at the &lt;strong>top five proxy list websites&lt;/strong> and perform a &lt;strong>benchmark&lt;/strong>.&lt;/p>
&lt;p>&lt;em>If you are in a hurry and wish to go straight to the results, &lt;a href="#benchmark" >click here&lt;/a>.&lt;/em>&lt;/p>
&lt;p>The idea is not only to talk about the different features they offer, but also to test the reliability with a real-world test. We will look at and &lt;strong>compare the response times, errors, and success rates&lt;/strong> on popular websites like &lt;strong>Google and Amazon&lt;/strong>.&lt;/p></description></item><item><title>How to scrape data from idealista</title><link>https://www.scrapingbee.com/blog/web-scraping-idealista/</link><pubDate>Tue, 05 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-idealista/</guid><description>&lt;p>Idealista is a very famous listing website that lists millions of properties for sale and/or rent. It is available in Spain, Portugal, and Italy. Such property listing websites are among the best ways to do market research, analyze market trends, and find a suitable place to buy. In this article, you will learn how to scrape data from idealista. The website uses anti-web scraping techniques and you will learn how to circumvent them as well.&lt;/p></description></item><item><title>How to use a Proxy with Ruby and Faraday</title><link>https://www.scrapingbee.com/blog/ruby-faraday-proxy/</link><pubDate>Mon, 04 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/ruby-faraday-proxy/</guid><description>&lt;h2 id="why-use-faraday">Why use Faraday?&lt;/h2>
&lt;p>&lt;a href="https://lostisland.github.io/faraday/" target="_blank" >Faraday&lt;/a> is a very famous and mature HTTP client library for Ruby. It uses an adapter-based approach which means you can swap out the underlying HTTP requests library without modifying the overarching Faraday code. By default, Faraday uses the &lt;a href="https://ruby-doc.org/stdlib-3.1.2/libdoc/net/http/rdoc/Net/HTTP.html" target="_blank" >&lt;code>Net::HTTP&lt;/code>&lt;/a> adapter but you can switch it out with &lt;a href="https://github.com/geemus/excon" target="_blank" >&lt;code>Excon&lt;/code>&lt;/a>, &lt;a href="https://github.com/typhoeus/typhoeus" target="_blank" >&lt;code>Typhoeus&lt;/code>&lt;/a>, &lt;a href="http://toland.github.io/patron/" target="_blank" >&lt;code>Patron&lt;/code>&lt;/a> or &lt;a href="https://github.com/igrigorik/em-http-request" target="_blank" >&lt;code>EventMachine&lt;/code>&lt;/a> without modifying more than a line or two of configuration code. This makes Faraday extremely flexible and relatively future-proof.&lt;/p></description></item><item><title>How to Set Up a Proxy Server with Apache</title><link>https://www.scrapingbee.com/blog/how-to-set-up-a-proxy-server-with-apache/</link><pubDate>Sun, 03 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-set-up-a-proxy-server-with-apache/</guid><description>&lt;p>A proxy server is an intermediate server between a client and another server. The client sends the requests to the proxy server, which then passes them to the destination server. The destination server sends the response to the proxy server, and it forwards this to the client.&lt;/p>
&lt;p>In the world of web scraping, using a proxy server is common for the following reasons:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Privacy:&lt;/strong> A proxy server hides the IP address of the scraper, providing a layer of privacy.&lt;/li>
&lt;li>&lt;strong>Avoiding IP bans:&lt;/strong> A proxy server can be used to circumvent IP bans. If the target website blocks the IP address of the proxy server, you can simply use a different proxy server.&lt;/li>
&lt;li>&lt;strong>Circumventing geoblocking:&lt;/strong> By connecting to a proxy server situated in a certain region, you can circumvent geoblocking. For instance, if your content is available only in the US, you can connect to a proxy server in the US and scrape as much as you want to.&lt;/li>
&lt;/ul>
&lt;p>In this article, you'll learn how to set up your own proxy server and use it to scrape websites. There are many ways to create a DIY proxy server, such as using &lt;a href="https://httpd.apache.org/" target="_blank" >Apache&lt;/a> or &lt;a href="https://www.nginx.com/" target="_blank" >Nginx&lt;/a> as proxy servers or using dedicated proxy tools like &lt;a href="https://www.squid-cache.org/" target="_blank" >Squid&lt;/a>. In this article, you'll use Apache.&lt;/p></description></item><item><title>What is a Headless Browser: Top 8 Options for 2025 [Pros vs. Cons]</title><link>https://www.scrapingbee.com/blog/what-is-a-headless-browser-best-solutions-for-web-scraping-at-scale/</link><pubDate>Sat, 02 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/what-is-a-headless-browser-best-solutions-for-web-scraping-at-scale/</guid><description>&lt;p>Imagine a world where web browsers work tirelessly behind the scenes, navigating websites, filling forms, and capturing data without ever showing a single pixel on a screen. I welcome you to the realm of headless browsers - the unsung heroes of web automation and testing!&lt;/p>
&lt;p>In today's digital landscape, where web applications grow increasingly complex and data-driven decision-making reigns supreme, headless browsers have emerged as indispensable tools for developers, quality assurance (QA) engineers, and data enthusiasts alike. They're the Swiss Army knives of the web, capable of slicing through mundane tasks, carving out efficiencies, and sculpting robust testing environments.&lt;/p></description></item><item><title>Puppeteer Stealth Tutorial; How to Set Up &amp; Use (+ Working Alternatives)</title><link>https://www.scrapingbee.com/blog/puppeteer-stealth-tutorial-with-examples/</link><pubDate>Fri, 01 Aug 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/puppeteer-stealth-tutorial-with-examples/</guid><description>&lt;p>Puppeteer is a robust headless browser library created mainly to automate user interactions. However, it can be easily detected and blocked by anti-scraping measures due to its lack of built-in stealth capabilities. This is where Puppeteer Extra comes in, offering plugins like Stealth to address this limitation.&lt;/p>
&lt;p>This tutorial will explore how to utilize Puppeteer Stealth to attempt to evade detection while scraping websites effectively. We also cover solutions and alternatives for by-passing the latest cutting edge anti-bot tech which Puppeteer Stealth sometimes struggles to evade.&lt;/p></description></item><item><title>Getting Started with Goutte</title><link>https://www.scrapingbee.com/blog/getting-started-with-goutte/</link><pubDate>Thu, 31 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/getting-started-with-goutte/</guid><description>&lt;p>While &lt;a href="https://www.scrapingbee.com/tutorials/how-to-log-in-to-a-website-using-scrapingbee-with-nodejs/" >Node.js&lt;/a> and &lt;a href="https://www.scrapingbee.com/blog/crawling-python/" >Python&lt;/a> dominate the web scraping landscape, Goutte is the go-to choice for PHP developers. It's a powerful library that provides a simple yet efficient solution to automatically extract data from websites.&lt;/p>
&lt;p>Whether you're a beginner or an experienced developer, Goutte allows you to effortlessly scrape data from websites and seamlessly display it on the frontend directly from your PHP scripts. Goutte also ensures that the scraping process doesn't compromise loading time or consume excessive backend resources such as RAM, making it an optimal choice for PHP-based scraping tasks.&lt;/p></description></item><item><title>Crawl4AI - a hands-on guide to AI-friendly web crawling</title><link>https://www.scrapingbee.com/blog/crawl4ai/</link><pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/crawl4ai/</guid><description>&lt;p>If you're building stuff with large language models or AI agents, chances are you'll need web data. And that means writing a crawler, ideally something fast, flexible, and not a total pain to set up. Like, we probably don't want to spend countless hours trying to run a simple &amp;quot;hello world&amp;quot; app. That's where &lt;strong>Crawl4AI&lt;/strong> comes in.&lt;/p>
&lt;p>Crawl4AI is an open-source crawler made by devs, for devs. It gives you control, speed, structured output, and enough room to do serious things without getting buried in boilerplate.&lt;/p></description></item><item><title>How to use asyncio to scrape websites with Python</title><link>https://www.scrapingbee.com/blog/async-scraping-in-python/</link><pubDate>Wed, 30 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/async-scraping-in-python/</guid><description>&lt;p>In this article, we'll take a look at how you can use Python and its coroutines, with their &lt;code>async&lt;/code>/&lt;code>await&lt;/code> syntax, to efficiently scrape websites, without having to go all-in on threads 🧵 and semaphores 🚦. For this purpose, we'll check out &lt;a href="https://docs.python.org/3/library/asyncio.html" target="_blank" >asyncio&lt;/a>, along with the asynchronous HTTP library &lt;a href="https://docs.aiohttp.org" target="_blank" >aiohttp&lt;/a>.&lt;/p>
&lt;h2 id="what-is-asyncio">What is asyncio?&lt;/h2>
&lt;p>&lt;a href="https://docs.python.org/3/library/asyncio.html" target="_blank" >asyncio&lt;/a> is part of Python's standard library (yay, no additional dependency to manage 🥳) which enables the implementation of concurrency using the same asynchronous patterns you may already know from JavaScript and other languages: &lt;code>async&lt;/code> and &lt;code>await&lt;/code>&lt;/p></description></item><item><title>How to scrape data from Twitter.com</title><link>https://www.scrapingbee.com/blog/web-scraping-twitter/</link><pubDate>Tue, 29 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-twitter/</guid><description>&lt;p>Twitter is a gold mine for data. It started as a micro-blogging website and has quickly grown to become the favorite hangout spot for millions of people. Twitter provides access to most of its data via its official API but sometimes that is not enough.&lt;/p>
&lt;p>Web scraping provides some advantages over using the official API. For example, Twitter's API is rate-limited and you need to wait for a while before Twitter approves your application request and lets you access its data but this is not the case with web scraping.&lt;/p></description></item><item><title>10 Tips on How to make Python's Beautiful Soup faster when scraping</title><link>https://www.scrapingbee.com/blog/how-to-make-pythons-beautiful-soup-faster-performance/</link><pubDate>Mon, 28 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-make-pythons-beautiful-soup-faster-performance/</guid><description>&lt;p>Beautiful Soup is super easy to use for parsing HTML and is hugely popular. However, if you're extracting a gigantic amount of data from tons of scraped pages it can slow to a crawl if not properly optimized.&lt;/p>
&lt;p>In this tutorial, I'll show you 10 expert-level tips and tricks for transforming Beautiful Soup into a blazing-fast data-extracting beast and how to optimize your scraping process to be as fast as lightning.&lt;/p></description></item><item><title>How to Parse HTML in Ruby with Nokogiri?</title><link>https://www.scrapingbee.com/blog/parse-html-nokogiri/</link><pubDate>Sun, 27 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/parse-html-nokogiri/</guid><description>&lt;p>APIs are the cornerstone of the modern internet as they enable different services to communicate with each other. With APIs, you can gather information from different sources and use different services. However, not all services provide an API for you to consume. Even if an API is offered, it might be limited in comparison to a service’s web application(s). Thankfully, you can use web scraping to overcome these limitations. &lt;em>Web scraping&lt;/em> refers to the practice of extracting data from the HTML source of the web page. That is, instead of communicating with a server through APIs, web scraping lets you extract information directly from the web page itself.&lt;/p></description></item><item><title>How to Parse HTML with Regex</title><link>https://www.scrapingbee.com/blog/parse-html-regex/</link><pubDate>Sat, 26 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/parse-html-regex/</guid><description>&lt;p>The amount of information available on the internet for human consumption is &lt;a href="https://siteefy.com/how-many-websites-are-there/" target="_blank" >astounding&lt;/a>. However, if this data doesn't come in the form of a specialized REST API, it can be challenging to access programmatically. The technique of gathering and processing raw data from the internet is known as &lt;em>web scraping&lt;/em>. There are several uses for web scraping in software development. Data collected through web scraping can be applied in market research, lead generation‍, competitive intelligence, product pricing comparison, monitoring consumer sentiment, brand audits, AI and machine learning, creating a job board, and more.&lt;/p></description></item><item><title>Getting Started with HtmlUnit</title><link>https://www.scrapingbee.com/blog/getting-started-with-htmlunit/</link><pubDate>Fri, 25 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/getting-started-with-htmlunit/</guid><description>&lt;p>&lt;a href="https://sourceforge.net/projects/htmlunit/" target="_blank" >HtmlUnit&lt;/a> is a GUI-less browser for Java that can execute JavaScript and perform AJAX calls.&lt;/p>
&lt;p>Although primarily used to automate testing, HtmlUnit is a great choice for scraping static and dynamic pages alike because of its ability to manipulate web pages on a high level, such as clicking on buttons, submitting forms, providing input, and so forth. HtmlUnit supports the W3C DOM standard, &lt;a href="https://www.scrapingbee.com/blog/using-css-selectors-for-web-scraping/" >CSS selectors&lt;/a>, and &lt;a href="https://www.scrapingbee.com/blog/practical-xpath-for-web-scraping/" >XPath selectors&lt;/a>, and it can simulate the Firefox, Chrome, and Internet Explorer browsers, which makes web scraping easier.&lt;/p></description></item><item><title>How to Build a News Crawler with the ScrapingBee API</title><link>https://www.scrapingbee.com/blog/how-to-build-a-news-crawler-with-the-scrapingbee-api/</link><pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-build-a-news-crawler-with-the-scrapingbee-api/</guid><description>&lt;p>Imagine you're a developer who needs to keep track of the latest news from multiple sources for a project you're working on. Instead of manually visiting each news website and checking for updates, you want to automate this process to save time and effort. You need a &lt;a href="https://www.scrapingbee.com/scrapers/google-news-scraper-api/" target="_blank" >news crawler&lt;/a>.&lt;/p>
&lt;p>In this article, you'll see how easy it can be to build a news crawler using Python Flask and the &lt;a href="https://www.scrapingbee.com/" target="_blank" >ScrapingBee API&lt;/a>. You'll learn how to set up ScrapingBee, implement crawling logic, and display the extracted news on a web page.&lt;/p></description></item><item><title>How to scrape Google search results data in Python easily</title><link>https://www.scrapingbee.com/blog/how-to-scrape-google-search-results-data-in-python-easily/</link><pubDate>Wed, 23 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-google-search-results-data-in-python-easily/</guid><description>&lt;p>&lt;strong>Google search engine results pages (SERPs)&lt;/strong> can provide alot of important data for you and your business but you most likely wouldn't want to scrape it manually. After all, there might be multiple queries you're interested in, and the corresponding results should be monitored on a regular basis. This is where automated scraping comes into play: you write a script that processes the results for you or use a dedicated tool to do all the heavy lifting.&lt;/p></description></item><item><title>How to Web Scrape Yelp.com</title><link>https://www.scrapingbee.com/blog/web-scraping-yelp/</link><pubDate>Tue, 22 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-yelp/</guid><description>&lt;p>With more than 199 million reviews of businesses worldwide, Yelp is one of the biggest websites for crowd-sourced reviews. In this article, you will learn how to scrape data from Yelp's search results and individual restaurant pages. You will be learning about the different Python libraries that can be used for web scraping and the techniques to use them effectively.&lt;/p>
&lt;p>If you have never heard about Yelp before, it is an American company that crowd-sources reviews for local businesses. They started as a reviews company for restaurants and food businesses but have lately been branching out to cover additional industries as well. Yelp reviews are very important for food businesses as they directly affect their revenues. A restaurant owner told &lt;a href="https://hbswk.hbs.edu/item/the-yelp-factor-are-consumer-reviews-good-for-business" target="_blank" >Harvard Business Review&lt;/a>:&lt;/p></description></item><item><title>Python Web Scraping: Full Tutorial With Examples (2025)</title><link>https://www.scrapingbee.com/blog/web-scraping-101-with-python/</link><pubDate>Tue, 22 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-101-with-python/</guid><description>&lt;p>Have you ever wondered how to scrape data from any website automatically? Or how some websites and web applications can extract and display data so seamlessly from other sites in real-time? Whether you want to collect and track prices from e-commerce sites, gather news articles and research data, or monitor social media trends, web scraping is the tool you need.&lt;/p>
&lt;p>In this tutorial, we'll explore the world of web scraping with Python, guiding you from the basics for beginners to advanced techniques for web scraping experts. In my experience, Python is a powerful tool for automating data extraction from websites and one of the most powerful and versatile languages for web scraping, thanks to its vast array of libraries and frameworks.&lt;/p></description></item><item><title>Scraping single page applications with Python.</title><link>https://www.scrapingbee.com/blog/scraping-single-page-applications/</link><pubDate>Mon, 21 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/scraping-single-page-applications/</guid><description>&lt;p>Dealing with a website that uses lots of Javascript to render their content can be tricky. These days, more and more sites are using frameworks like Angular, React, Vue.js for their frontend.&lt;/p>
&lt;p>These frontend frameworks are complicated to deal with because there are often using the newest features of the HTML5 API.&lt;/p>
&lt;p>So basically the problem that you will encounter is that your headless browser will download the HTML code, and the Javascript code, but will not be able to execute the full Javascript code, and the webpage will not be totally rendered.&lt;/p></description></item><item><title>How to web scrape Zillow’s real estate data at scale</title><link>https://www.scrapingbee.com/blog/how-to-web-scrape-zillows-real-estate-data-at-scale-with-this-easy-zillow-scraper-in-python/</link><pubDate>Sun, 20 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-web-scrape-zillows-real-estate-data-at-scale-with-this-easy-zillow-scraper-in-python/</guid><description>&lt;p>If you're looking to buy or sell a house or other real estate property, Zillow is an excellent resource with &lt;a href="https://www.similarweb.com/website/zillow.com/#overview" target="_blank" >millions&lt;/a> of property listings and detailed market data.&lt;/p>
&lt;p>In addition to traditional real estate purposes, the data available on Zillow comes in handy for market analysis, tracking housing trends, or building a real estate application.&lt;/p>
&lt;p>This tutorial will guide you to effectively scrape Zillow's real estate data at scale using Python, BeautifulSoup, and the ScrapingBee API.&lt;/p></description></item><item><title>Block ressources with Puppeteer</title><link>https://www.scrapingbee.com/blog/block-requests-puppeteer/</link><pubDate>Sat, 19 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/block-requests-puppeteer/</guid><description>&lt;p>In this article, we will take a look at how to block specific resources (HTTP requests, CSS, video, images) from loading in Puppeteer. Puppeteer is one of the most widely used tools for web scraping and automation. There are a couple of ways to block resources in Puppeteer. In this article, we will go over all the various methods we can use to block/intercept specific network requests in our automation scripts.&lt;/p></description></item><item><title>Web Scraping Booking.com</title><link>https://www.scrapingbee.com/blog/web-scraping-booking/</link><pubDate>Fri, 18 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-booking/</guid><description>&lt;p>With more than 28 million listings, Booking.com is one of the biggest websites to look for a place to stay during your trip. If you are opening up a new hotel in an area, you might want to keep tabs on your competition and get notified when new properties open up. This can all be automated with the power of web scraping! In this article, you will learn how to scrape data from the search results page of Booking.com using Python and Selenium and also handle pagination along the way.&lt;/p></description></item><item><title>How to read and parse JSON data with Python</title><link>https://www.scrapingbee.com/blog/how-to-read-and-parse-json-data-with-python/</link><pubDate>Thu, 17 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-read-and-parse-json-data-with-python/</guid><description>&lt;p>JSON, or JavaScript Object Notation, is a popular data interchange format that has become a staple in modern web development. If you're a programmer, chances are you've come across JSON in one form or another. It's widely used in REST APIs, single-page applications, and other modern web technologies to transmit data between a server and a client, or between different parts of a client-side application. JSON is lightweight, easy to read, and simple to use, making it an ideal choice for developers looking to transmit data quickly and efficiently.&lt;/p></description></item><item><title>Web Scraping with Groovy</title><link>https://www.scrapingbee.com/blog/web-scraping-with-groovy/</link><pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-with-groovy/</guid><description>&lt;p>&lt;a href="https://groovy-lang.org" target="_blank" >Groovy&lt;/a> has been around for quite a while and has established itself as reliable scripting language for tasks where you'd like to use the full power of Java and the JVM, but without all its verbosity.&lt;/p>
&lt;p>While typical use-cases often are build pipelines or automated testing, it works equally well for anything related to data extraction and web scraping. And that's precisely, what we are going to check out in this article. &lt;strong>Let's fasten our seatbelts and dive right into web scraping and handling HTTP requests with Groovy.&lt;/strong>&lt;/p></description></item><item><title>Ruby HTML and XML Parsers</title><link>https://www.scrapingbee.com/blog/ruby-html-parser/</link><pubDate>Tue, 15 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/ruby-html-parser/</guid><description>&lt;p>Ruby HTML and XML Parsers&lt;/p>
&lt;p>Extracting data from the web—that is, web scraping—typically requires reading and processing content from HTML and XML documents. &lt;em>Parsers&lt;/em> are software tools that facilitate this scraping of web pages.&lt;/p>
&lt;p>The Ruby developer community offers some fantastic HTML and XML parsers that can serve all your web scraping needs—there are a lot of options out there. In choosing which to go with, you might consider the following criteria:&lt;/p></description></item><item><title>Crawlee for Python Tutorial with Examples</title><link>https://www.scrapingbee.com/blog/crawlee-for-python-tutorial-with-examples/</link><pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/crawlee-for-python-tutorial-with-examples/</guid><description>&lt;p>Crawlee is a brand new, free &amp;amp; open-source (FOSS) web scraping library built by the folks at APIFY. While it is available for both Node.js and Python, we'll be looking at the Python library in this brief guide. It's barely been a few weeks since its release and the library has already amassed about 2800 stars on GitHub! Let's see what it's all about and why it got all those stars.&lt;/p></description></item><item><title>N8N No-Code Web Scraping Made Simple with AI-Powered Data Extraction</title><link>https://www.scrapingbee.com/blog/n8n-no-code-web-scraping/</link><pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/n8n-no-code-web-scraping/</guid><description>&lt;p>Are you a marketer tracking competitor prices? A content creator monitoring trending topics? Maybe you're a small business owner researching leads or a data analyst gathering insights from websites? If any of these describe you, you're in the right place!&lt;/p>
&lt;p>No-code platforms like &lt;a href="https://n8n.io/" target="_blank" >n8n&lt;/a> are changing how we handle repetitive data collection tasks. What used to require hiring developers or spending hours on manual copying can now be automated with visual workflows in minutes.&lt;/p></description></item><item><title>Node-unblocker for Web Scraping</title><link>https://www.scrapingbee.com/blog/node-unblocker/</link><pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/node-unblocker/</guid><description>&lt;p>Web proxies help you keep your privacy and get around various restrictions while browsing the web. They hide your details, such as the request origin or IP address, and with additional software can even bypass things like rate limits.&lt;/p>
&lt;p>&lt;a href="https://github.com/nfriedly/node-unblocker" target="_blank" >node-unblocker&lt;/a> is one such web proxy that includes a form of Node.js library. You can use it for web scraping and accessing geo-restricted content, as well as other functions.&lt;/p>
&lt;p>In this article, you’ll learn how to implement and use node-unblocker. You’ll also see its pros, cons, and limitations as compared to a managed service like ScrapingBee.&lt;/p></description></item><item><title>How to Log in to Almost Any Websites</title><link>https://www.scrapingbee.com/blog/how-to-log-in-to-almost-any-websites/</link><pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-log-in-to-almost-any-websites/</guid><description>&lt;p>In the first article about &lt;a href="https://www.scrapingbee.com/blog/introduction-to-web-scraping-with-java/" >java web scraping&lt;/a> I showed how to extract data from CraigList website.
But what about the data you want or if the action you want to carry out on a website requires authentication ?&lt;/p>
&lt;p>In this short tutorial I will show you how to make a generic method that can handle most authentication forms.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAAvklEQVR4nMyR34qCUBDGZ8aDri7iLsiuK8g&amp;#43;wL7/3b5F0EVEF/3BEkvr9McTHiciUKGC8qrvbob5Zj5&amp;#43;I5gZuoo6O2&amp;#43;YteaqejSLaBfbTJbrlDVbX4HjOpcmM6xmcbEvlGLXe/OjEPHqcqVZpomxXJjHPIvnNYozFCUnyfR/0N/J7E5sBGDojfLheGMQAbaGBH2/m38ftiWoDbiJTYReEEQlM&amp;#43;Bn&amp;#43;FN7EfGgUJD969uAJmKzFV/mVU/pFAAA//&amp;#43;1nUruGUxOpwAAAABJRU5ErkJggg==); background-size: cover">
 &lt;svg width="1456" height="727" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/how-to-log-in-to-almost-any-websites/cover_hu1817180475025586944.png 1200w '
 data-src="https://www.scrapingbee.com/blog/how-to-log-in-to-almost-any-websites/cover_hu1817180475025586944.png"
 width="1456" height="727"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/how-to-log-in-to-almost-any-websites/cover_hu1817180475025586944.png 1200w'
 src="https://www.scrapingbee.com/blog/how-to-log-in-to-almost-any-websites/cover.png"
 width="1456" height="727"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h3 id="authentication-mechanism">Authentication mechanism&lt;/h3>
&lt;p>There are many different authentication mechanisms, the most frequent being a login form , sometimes with a &lt;a href="http://https://en.wikipedia.org/wiki/Cross-site_request_forgery#Forging_login_requests" target="_blank" >CSRF token&lt;/a> as a hidden input.&lt;/p></description></item><item><title>7 Best Python Web Scraping Libraries for 2025</title><link>https://www.scrapingbee.com/blog/best-python-web-scraping-libraries/</link><pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-python-web-scraping-libraries/</guid><description>&lt;p>In this tutorial, I will show you some of the best and Python web scraping libraries. Web scraping is often way more challenging than it initally seems due to various challenges like session handling, cookies, dynamically loaded content, JavaScript execution, and even anti-scraping measures (for example, CAPTCHA, IP blocking, and rate limiting).&lt;/p>
&lt;p>This is where advanced web scraping libraries come in handy. They abstract away the complexity of web scraping, allowing you to focus on data extraction. Picking the right one can set you up for success.&lt;/p></description></item><item><title>XPath/CSS Cheat Sheet</title><link>https://www.scrapingbee.com/blog/xpath-css-cheat-sheet/</link><pubDate>Thu, 10 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/xpath-css-cheat-sheet/</guid><description>&lt;p>This cheat sheet provides a comprehensive overview of XPath and CSS selectors. It includes the most commonly used selectors and functions, along with examples to help you understand how they work.&lt;/p>
&lt;p>This cheat sheet is available to download as a &lt;a href="cheatsheet.pdf" >PDF file&lt;/a>.&lt;/p>
&lt;blockquote>
&lt;p>Sign up for &lt;a href="https://app.scrapingbee.com/account/register" target="_blank" >1000 free web scraping API credits&lt;/a> and try these selectors for free.&lt;/p>
&lt;/blockquote>
&lt;h2 id="how-to-copy-an-xpath-selector-from-chrome-dev-tools">How to copy an XPath selector from Chrome Dev Tools&lt;/h2>
&lt;ol>
&lt;li>Open Chrome Dev Tools (press F12 key or right-click on the webpage and select &amp;quot;Inspect&amp;quot;)&lt;/li>
&lt;li>Use the element selector tool to highlight the element you want to scrape&lt;/li>
&lt;li>Right-click the highlighted element in the Dev Tools panel&lt;/li>
&lt;li>Select &amp;quot;Copy&amp;quot; and then &amp;quot;Copy XPath&amp;quot;&lt;/li>
&lt;li>Paste the XPath expression into the code&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="copying-xpath-from-chrome-dev-tools.gif" alt="Using Chrome developer tools to copy Target XPath">&lt;/p></description></item><item><title>Using Watir to automate web browsers with Ruby</title><link>https://www.scrapingbee.com/blog/scraping-watir-ruby/</link><pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/scraping-watir-ruby/</guid><description>&lt;p>For years, it’s been possible to automate simple tasks on a computer when those tasks have been executed using the command line. This is known as &lt;em>scripting&lt;/em>. A bigger challenge, however, is to control the browser since a GUI introduces a lot more variability in how elements act.&lt;/p>
&lt;p>&lt;em>Browser automation&lt;/em> describes the process of programmatically performing certain actions in the browser (or handing these actions over to robots) that might otherwise be quite tedious or repetitive to be performed manually by a human.&lt;/p></description></item><item><title>Charles proxy for web scraping</title><link>https://www.scrapingbee.com/blog/charles-proxy/</link><pubDate>Tue, 08 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/charles-proxy/</guid><description>&lt;p>Charles proxy is an HTTP debugging proxy that can inspect network calls and debug SSL traffic. With Charles, you are able to inspect requests/responses, headers and cookies. Today we will see how to set up Charles, and how we can use Charles proxy for web scraping. We will focus on extracting data from Javascript-heavy web pages and mobile applications. Charles sits between your applications and the internet:&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAABOklEQVR4nGyR3Y7jIAyFbf6hUqSq7/9&amp;#43;vahaKWkKjvlZbbybiWbmuwJzjvEB83g8vPcAgIi9d2ttCKG1dr/ftdaIWEqZpul6vQLAGCPnXGsVGS7LklJCRABorfXeEVEpxcy99zGGMUZrrZRCRCKy1mqte&amp;#43;/btuE8z0QEAOu6xhinaZrnOcYYQvh7jJhSIqL3&amp;#43;x1jZGYiajuXywXXdU0pwU6ttbUmKWRIiQP/yTk75xCxtcbMhpmXZTnUIYRDerYJzjkikrr3HqW9BGbms1mKWutj&amp;#43;3w&amp;#43;JZH4v8wAsG1brdU5Z4wBAN6xOwBQStFay/rfaGezTE5EOWfvvVLKWltKsdbijjQ9MN9SIWIIYYzxer167/Ir3vvb7fbzCb7ffE4rEYjIOaeU&amp;#43;qn5pSTonc/nY6391QkAfwIAAP//0pq/xRrmHWcAAAAASUVORK5CYII=); background-size: cover">
 &lt;svg width="759" height="419" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/charles-proxy/charles_drawing.png 759 '
 data-src="https://www.scrapingbee.com/blog/charles-proxy/charles_drawing.png"
 width="759" height="419"
 alt='Charles proxy drawing'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/charles-proxy/charles_drawing.png 759'
 src="https://www.scrapingbee.com/blog/charles-proxy/charles_drawing.png"
 width="759" height="419"
 alt='Charles proxy drawing'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;p>Charles is like the Chrome dev tools on steroids. It has many incredible features:&lt;/p></description></item><item><title>How to Download Files via cURL With Battle Ready Examples</title><link>https://www.scrapingbee.com/blog/how-download-files-via-curl-tutorial-with-examples/</link><pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-download-files-via-curl-tutorial-with-examples/</guid><description>&lt;p>&lt;strong>Picture this:&lt;/strong> It's 3 AM, and you're staring at your terminal, trying to download hundreds of data files for tomorrow's analysis. Your mouse hand is cramping from all that right-click, &amp;quot;Save As&amp;quot; action, and you're thinking there has to be a better way. (Spoiler alert: there is, and you've just found it!)&lt;/p>
&lt;p>Welcome to the world of file downloads with &lt;a href="https://curl.se/" target="_blank" >cURL&lt;/a>, where what seems like command-line sorcery to many is about to become your new superpower. As an automation specialist who's orchestrated thousands of automated downloads, I've seen firsthand how cURL knowledge can transform tedious download tasks into elegant, automated solutions — from simple file transfers to complex authenticated downloads that would make even seasoned developers scratch their heads.&lt;/p></description></item><item><title>Web Scraping with JavaScript and Node.js</title><link>https://www.scrapingbee.com/blog/web-scraping-javascript/</link><pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-javascript/</guid><description>&lt;p>JavaScript has become one of the most popular and widely used languages due to the massive improvements it has seen and the introduction of the runtime known as Node.js. Whether it's a web or mobile application, JavaScript now has the right tools. This article will explain how the vibrant ecosystem of Node.js allows you to efficiently scrape the web to meet most of your requirements.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAAm0lEQVR4nGL5//8/A7mAiWydlGpmQeb8/7KF8cd5kIEc1gxcTshSP3/9&amp;#43;vb1m6CgAE7NjJ9X/Xy&amp;#43;&amp;#43;PU7BkntYmYkzZeuXHv//uObt28VFeQM9XUZGRmxOZuZ4fgFhinLGF68ZUQWFhEWevDw0fv3H4QEBeE6MZzNFaxqrqhozCAkZYsszsfHa2igy8zExMfHi&amp;#43;LSoRlVgAAAAP//jb4vHqxxBLwAAAAASUVORK5CYII=); background-size: cover">
 &lt;svg width="1200" height="628" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/web-scraping-javascript/cover_hu7790746002566435669.png 1200w '
 data-src="https://www.scrapingbee.com/blog/web-scraping-javascript/cover_hu7790746002566435669.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/web-scraping-javascript/cover_hu7790746002566435669.png 1200w'
 src="https://www.scrapingbee.com/blog/web-scraping-javascript/cover.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h3 id="prerequisites">Prerequisites&lt;/h3>
&lt;p>This post is primarily aimed at developers who have some level of experience with JavaScript. However, if you have a firm understanding of web scraping but have no experience with JavaScript, it may still serve as light introduction to JavaScript. Still, having experience in the following fields will certainly help:&lt;/p></description></item><item><title>Using the Cheerio NPM Package for Web Scraping</title><link>https://www.scrapingbee.com/blog/cheerio-npm/</link><pubDate>Sun, 06 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/cheerio-npm/</guid><description>&lt;p>Have you ever manually copied data from a table on a website into an excel spreadsheet so you could analyze it? If you have, then you know how tedious of a process it can be. Fortunately, there's a tool that allows you to easily scrape data from web pages using Node.js. You can use &lt;a href="https://cheerio.js.org/" target="_blank" >Cheerio&lt;/a> to collect data from just about any HTML. You can pull data out of HTML strings or crawl a website to collect product data.&lt;/p></description></item><item><title>A Guide To Web Scraping For Data Journalism</title><link>https://www.scrapingbee.com/blog/a-guide-to-web-scraping-for-data-journalism/</link><pubDate>Sat, 05 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/a-guide-to-web-scraping-for-data-journalism/</guid><description>&lt;p>Web scraping may not sound much like a traditional journalistic practice but, in fact, it is a valuable tool that can allow journalists to turn almost any website into a powerful source of data from which they can build and illustrate their stories. Demand for these kinds of skills is on the increase, and this guide will explain some of the different techniques that can be used to gather data through web scraping and how it can be used to fuel incisive data journalism.&lt;/p></description></item><item><title>How to scrape data from realtor.com</title><link>https://www.scrapingbee.com/blog/web-scraping-realtor/</link><pubDate>Fri, 04 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-realtor/</guid><description>&lt;p>Realtor is the second biggest real estate listing website in the US and contains millions of properties. You will be missing out on saving money if you don't do market research on realtor before doing your next property purchase. To make use of the treasure trove of data available on realtor, it is necessary to scrape it. This tutorial will show you exactly how you can do that while bypassing the bot detection used by realtor.com.&lt;/p></description></item><item><title>Haskell Web Scraping</title><link>https://www.scrapingbee.com/blog/haskell-web-scraping/</link><pubDate>Thu, 03 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/haskell-web-scraping/</guid><description>&lt;p>Even though &lt;a href="https://www.scrapingbee.com/" target="_blank" >web scraping&lt;/a> is commonly done with languages like Python and JavaScript, a statically typed functional programming language like Haskell can provide extra benefits. Types make sure that your scripts do what you want them to do and that the data scraped conforms to your requirements.&lt;/p>
&lt;p>In this article, you'll learn how to do web scraping in Haskell with libraries such as &lt;a href="https://hackage.haskell.org/package/scalpel" target="_blank" >Scalpel&lt;/a> and &lt;a href="https://hackage.haskell.org/package/webdriver" target="_blank" >webdriver&lt;/a>.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAAxElEQVR4nGL5//8/A7mAiWydKJr/////9&amp;#43;8/XA75&amp;#43;/cvPs1///w7f&amp;#43;LB/Zuv//75&amp;#43;/fPP2Rt379/v3Pv/sNHT379&amp;#43;oWsmQXBYmUWlxZ4ePvNn99/P3/&amp;#43;rm8qz8LKzMDA8P79h8PHTn75&amp;#43;vXv3386WhomRvrYnf3u9VdOLlYmJiZBYW5GJkaIuIiIsKyM1K9fv/h4eXS0NLDb/PfPPyERTn4BLg4utp8/fjMzI8wVFhLydHP&amp;#43;/PkLmp8ZB0FUkQEAAQAA//&amp;#43;Gw1ffccbf7QAAAABJRU5ErkJggg==); background-size: cover">
 &lt;svg width="1200" height="628" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/haskell-web-scraping/cover_hu3669966589352912998.png 1200w '
 data-src="https://www.scrapingbee.com/blog/haskell-web-scraping/cover_hu3669966589352912998.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/haskell-web-scraping/cover_hu3669966589352912998.png 1200w'
 src="https://www.scrapingbee.com/blog/haskell-web-scraping/cover.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h2 id="basic-scraping">Basic Scraping&lt;/h2>
&lt;p>Scraping a static website can be done with any language that has libraries for an HTTP client and HTML parsing. Haskell is no different. It even has a dedicated high-level scraping library called &lt;a href="https://hackage.haskell.org/package/scalpel" target="_blank" >Scalpel&lt;/a>, which puts it above similar languages like Rust.&lt;/p></description></item><item><title>The 6 Best mobile and 4G proxy providers for web scraping</title><link>https://www.scrapingbee.com/blog/best-mobile-4g-proxy-provider-webscraping/</link><pubDate>Wed, 02 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-mobile-4g-proxy-provider-webscraping/</guid><description>&lt;p>In this article, we will look at the six best mobile and 4G proxy providers for web scraping. We will not only look at the different features they offer but also perform a real-world test that includes the performance, speed, and success and error rate on some of the most popular websites: Instagram, Google, &lt;a href="https://www.scrapingbee.com/features/amazon/" target="_blank" >Amazon&lt;/a> and the top 1,000 Alexa rank (the list of the most visited domains in the world).&lt;/p></description></item><item><title>How to Web Scrape Walmart.com</title><link>https://www.scrapingbee.com/blog/web-scraping-walmart/</link><pubDate>Tue, 01 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-walmart/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>In this article, you will learn how to &lt;a href="https://www.scrapingbee.com/features/walmart/" target="_blank" >scrape product information from Walmart&lt;/a>, the world's largest company by revenue (US $570 billion), and the world's largest private employer with 2.2 million employees.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAAq0lEQVR4nGL5//8/A7mAiWydVNf8&amp;#43;x0IYYAf335&amp;#43;//rz3pMX377/hAuyIKv4/&amp;#43;EMw5&amp;#43;PYGF&amp;#43;RgETuPij&amp;#43;2&amp;#43;evPj6j&amp;#43;HfkddXvbR19JQVsGhmYOFhYOYCMRhRXPTh/bfPX3/&amp;#43;&amp;#43;8&amp;#43;gxyKrLS&amp;#43;L3WaGP1/gNiMLs7Gz/Pnz7x8DgxA/DzMLM1ycET2qIB5mFUIR&amp;#43;/33/buv//79FxDg5OBkw62ZFDBw8QwIAAD//6KPQ/fc4CkrAAAAAElFTkSuQmCC); background-size: cover">
 &lt;svg width="460" height="250" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/web-scraping-walmart/cover.png 460 '
 data-src="https://www.scrapingbee.com/blog/web-scraping-walmart/cover.png"
 width="460" height="250"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/web-scraping-walmart/cover.png 460'
 src="https://www.scrapingbee.com/blog/web-scraping-walmart/cover.png"
 width="460" height="250"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;p>You might want to scrape the product pages on Walmart for monitoring stock levels for a particular item or for monitoring product prices. This can be useful when a product is sold out on the website and you want to make sure you are notified as soon as the stock is replenished.&lt;br>&lt;br>In this article you will learn:&lt;/p></description></item><item><title>How to use a proxy with node-fetch?</title><link>https://www.scrapingbee.com/blog/proxy-node-fetch/</link><pubDate>Mon, 30 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/proxy-node-fetch/</guid><description>&lt;h2 id="why-node-fetch">Why node-fetch?&lt;/h2>
&lt;p>&lt;a href="https://www.scrapingbee.com/blog/node-fetch/" target="_blank" >Node-fetch&lt;/a> is a popular HTTP client library, with around twenty million downloads per week; according to NPM, it is also one of the most downloaded NPM packages of all-time.&lt;/p>
&lt;p>Node-fetch's primary motivation was to implement a server-side API similar to &lt;a href="https://developer.mozilla.org/fr/docs/Web/API/Fetch_API" target="_blank" >window.fetch&lt;/a>, a client-side one; since it is implemented in the browser.&lt;/p>
&lt;p>This API is primarily used to make asynchronous requests to load content on the browser side. However, on the server-side of things, there are many more use-cases.&lt;/p></description></item><item><title>What Is a Transparent Proxy?</title><link>https://www.scrapingbee.com/blog/what-is-a-transparent-proxy/</link><pubDate>Mon, 30 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/what-is-a-transparent-proxy/</guid><description>&lt;p>Whether you're an individual user seeking improved online privacy or a network administrator striving to optimize network performance and security for your organization, understanding the nuances of web proxies is crucial. Web proxies are web servers that act as a gateway between a client application and the server it needs to communicate with.&lt;/p>
&lt;p>One such proxy that plays a vital role in network management and cybersecurity is a transparent proxy. Transparent proxies are used to set up content filtering and caching, protect from common cybersecurity attacks such as DDoS, and facilitate network traffic management.&lt;/p></description></item><item><title>No-code web scraping</title><link>https://www.scrapingbee.com/blog/no-code-web-scraping/</link><pubDate>Sun, 29 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/no-code-web-scraping/</guid><description>&lt;p>You can create software without code.&lt;/p>
&lt;p>&lt;strong>It’s crazy, right?&lt;/strong>&lt;/p>
&lt;p>There are many tools that you can use to build fully functional software. They can do anything you want. Without code.&lt;/p>
&lt;p>You might be thinking to yourself, what if I need something complex, like a web scraper? That’s too much, right?&lt;/p>
&lt;p>To create a web scraper, you need to create a code block to &lt;strong>load the page&lt;/strong>. Then, you need another module &lt;strong>to parse it&lt;/strong>. Next, you build another block to deal with this &lt;strong>information and run actions&lt;/strong>. Also, you have to find ways to &lt;strong>deal with IP blocks&lt;/strong>. To make matters worse, you might need &lt;strong>to interact with the target page&lt;/strong>. Clicking buttons, waiting for elements, taking screenshots.&lt;/p></description></item><item><title>Study of Amazon’s Best Selling &amp; Most Read Book Charts Since 2017</title><link>https://www.scrapingbee.com/blog/study-of-amazons-best-selling-and-most-read-book-charts-since-2017/</link><pubDate>Sat, 28 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/study-of-amazons-best-selling-and-most-read-book-charts-since-2017/</guid><description>&lt;p>Amazon is most well known as an online shopping website, and among the tech folks for Amazon Web Services. However, it was initially started as an online bookstore. They are also well known for the Kindle eBook and the Audiobook experiences they offer.&lt;/p>
&lt;p>The extensive offerings in the literature space have given Amazon so much data about reading patterns on a global scale. They present this data by publishing 4 charts every week. These 4 charts are the most read and the most sold books in fiction and non-fiction categories in the USA.&lt;/p></description></item><item><title>OCaml Web Scraping</title><link>https://www.scrapingbee.com/blog/ocaml-web-scraping/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/ocaml-web-scraping/</guid><description>&lt;p>&lt;a href="https://ocaml.org/" target="_blank" >OCaml&lt;/a> is a modern, type-safe, and expressive functional programming language. Even though it's less commonly used than popular languages like Python or Java, you can create powerful applications like &lt;a href="https://www.scrapingbee.com/blog/what-is-web-scraping/" target="_blank" >web scrapers&lt;/a> with it.&lt;/p>
&lt;p>In this article, you'll learn how to scrape static and dynamic websites with OCaml.&lt;/p>
&lt;p>To follow along, you'll need to have OCaml installed on your computer, OPAM initialized, and Dune installed. All of these steps are explained in the &lt;a href="https://ocaml.org/install" target="_blank" >official installation instructions&lt;/a>, so go ahead and set up the development environment before you continue.&lt;/p></description></item><item><title>Extract Job Listings, Details and Salaries from Indeed with ScrapingBee and Make.com</title><link>https://www.scrapingbee.com/blog/no-code-job-data-extraction/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/no-code-job-data-extraction/</guid><description>&lt;p>Taking the time to read through target pages is usually not the best idea. It's too time-consuming and it's easy to miss important changes when you're scrolling through hundreds of pages. Therefore, learning how to perform updates automatically without the need for coding skills is crucial.&lt;/p>
&lt;p>In this tutorial, we will scrape jobs from &lt;a href="http://indeed.com/" target="_blank" >indeed.com&lt;/a>, one of the most popular job aggregator websites. Web scraping is an excellent tool for finding valuable information from a job listing database.&lt;/p></description></item><item><title>Guide to Choosing a Proxy API for Scraping</title><link>https://www.scrapingbee.com/blog/guide-to-choosing-a-proxy-for-scraping/</link><pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/guide-to-choosing-a-proxy-for-scraping/</guid><description>&lt;p>You're in the thick of it, scraping the web to extract data pivotal to your core product. During this process, you quickly realize that websites deploy defense mechanisms against potential scrapers. For instance, if your server IP address keeps hitting a site for data, it might get flagged and subsequently banned.&lt;/p>
&lt;p>This is where a proxy API can help. A proxy API is like your Swiss Army knife for web scraping. It's designed to provide you web scraping operations that are seamless, efficient, and most importantly, undetected.&lt;/p></description></item><item><title>Web Scraping with Objective C</title><link>https://www.scrapingbee.com/blog/web-scraping-with-objective-c/</link><pubDate>Tue, 24 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-with-objective-c/</guid><description>&lt;p>In this article, you’ll learn about the main tools and techniques for web scraping using Objective C for both static and dynamic web pages.&lt;/p>
&lt;p>This article assumes that you’re already familiar with Objective C and &lt;a href="https://developer.apple.com/documentation/xcode" target="_blank" >XCode&lt;/a>, which will be used to create, compile, and run the projects on a macOS—though you can easily change things to run on iOS if preferred.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAAyklEQVR4nKyRzUrEMBzE/0n6ZWitCr2KXkSLd0F8fxDBV/Ag4qVt0hpJmo/NsrC0pdtLy84tk/mRYRJ472Gr8GZyAe6VbmtxmjPGOOdmZjA9NJX4/eEAQLMkjI5X1lrGW8Z49yfu725vrq8QQnPYGvf13fmEGtb63TiEde7947NhrO&amp;#43;1lPLt9WWhNiH4UE5pCAOlzOAncVw&amp;#43;PRBM8vzyuXwcngUANF37XyjOZBiRosgQHkNV3RCCtTaUXmRpugyv1Vm/apX2AQAA//84slbCVoM2VAAAAABJRU5ErkJggg==); background-size: cover">
 &lt;svg width="1200" height="628" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/web-scraping-with-objective-c/cover_hu7998418013526718218.png 1200w '
 data-src="https://www.scrapingbee.com/blog/web-scraping-with-objective-c/cover_hu7998418013526718218.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/web-scraping-with-objective-c/cover_hu7998418013526718218.png 1200w'
 src="https://www.scrapingbee.com/blog/web-scraping-with-objective-c/cover.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h2 id="basic-scraping">Basic Scraping&lt;/h2>
&lt;p>First, let’s take a look at using Objective C to scrape a static web page from &lt;a href="https://en.wikipedia.org/wiki/Physics" target="_blank" >Wikipedia&lt;/a>:&lt;/p></description></item><item><title>Comparing Forward Proxies and Reverse Proxies</title><link>https://www.scrapingbee.com/blog/comparing-forward-proxies-and-reverse-proxies/</link><pubDate>Mon, 23 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/comparing-forward-proxies-and-reverse-proxies/</guid><description>&lt;p>In an age dominated by the internet, where data flows ceaselessly between devices and servers, proxies have grown to become an integral part of networks. Proxies play a vital role in the seamless exchange of information on the web.&lt;/p>
&lt;p>Proxies act as digital intermediaries, facilitating secure and efficient communication between your device and the destination server. There are two types, forward proxies and reverse proxies, each serving a distinct function.&lt;/p></description></item><item><title>Puppeteer Web Scraping Tutorial in Nodejs</title><link>https://www.scrapingbee.com/blog/puppeteer-web-scraping-tutorial-in-nodejs/</link><pubDate>Mon, 23 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/puppeteer-web-scraping-tutorial-in-nodejs/</guid><description>&lt;p>In this tutorial, we are going to take a look at &lt;a href="https://pptr.dev" target="_blank" >Puppeteer&lt;/a>, a JavaScript library developed by Google. Puppeteer provides a native automation interface for Chrome and Firefox, allowing you to launch a headless browser instance and take full control of websites, including taking screenshots, submitting forms, extracting data, and more. Let's dive right in with a real-world example. 🤿&lt;/p>
&lt;blockquote>
&lt;p>💡 If you are curious about the basics of web scraping in JavaScript, you may be also interested in &lt;a href="https://www.scrapingbee.com/blog/web-scraping-javascript/" >Web Scraping with JavaScript and Node.js&lt;/a>.&lt;/p></description></item><item><title>Top 5 Rotating and Residential Proxies for Web Scraping</title><link>https://www.scrapingbee.com/blog/rotating-proxies/</link><pubDate>Sun, 22 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/rotating-proxies/</guid><description>&lt;p>There are a lot of different proxy types you can use for web scraping, like residential proxies or data center proxies. A residential IP is an IP address that belongs to a real user, with a real Internet Service Provider (ISP). These IPs enable web requests to be seen as a real users, and are much less likely to be blocked by third party websites.&lt;/p>
&lt;p>A data center proxy is similar to a residential proxy except residential proxies are more trusted by websites. Data center proxies are the most common proxies available and it leads to one of the drawbacks of data center proxies: some websites can detect when you’re using a data center proxy and are more likely to block those IP addresses because many of them are used by bots.&lt;/p></description></item><item><title>Scrape Amazon products' price with no code</title><link>https://www.scrapingbee.com/blog/nocode-amazon/</link><pubDate>Sat, 21 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/nocode-amazon/</guid><description>&lt;p>It's safe to assume that many of us had bookmarked Amazon product pages from several retailers for a similar product to easily compare pricing.&lt;/p>
&lt;p>This article will guide you through scraping product information from &lt;a href="http://amazon.com/" target="_blank" >Amazon.com&lt;/a> so you never miss a great deal on a product. You will monitor similar ******product pages and compare the prices.&lt;/p>
&lt;p>This tutorial is designed so that you can follow along smoothly if you already know the basic concepts. Here's what we'll do:&lt;/p></description></item><item><title>Getting Started with Jaunt Java</title><link>https://www.scrapingbee.com/blog/getting-started-with-jaunt-java/</link><pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/getting-started-with-jaunt-java/</guid><description>&lt;p>While Python and Node.js are popular platforms for writing scraping scripts, &lt;a href="https://jaunt-api.com/index.htm" target="_blank" >Jaunt&lt;/a> provides similar capabilities for Java.&lt;/p>
&lt;p>Jaunt is a Java library that provides web scraping, web automation, and JSON querying abilities. It relies on a light, headless browser to load websites and query their DOM. The only downside is that it doesn't support JavaScript—but for that, you can use &lt;a href="https://jauntium.com/index.htm" target="_blank" >Jauntium&lt;/a>, a Java browser automation framework developed and maintained by the same person behind Jaunt, Tom Cervenka.&lt;/p></description></item><item><title>Playwright vs Selenium: Which is the best Headless Browser</title><link>https://www.scrapingbee.com/blog/playwright-vs-selenium/</link><pubDate>Thu, 19 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/playwright-vs-selenium/</guid><description>&lt;p>For years Selenium has reigned as the undisputed champion of web automation, dominating the ring with its vast capabilities and developer loyalty. But now a formidable rival has risen, Playwright. This battle of the titans is set to determine which tool truly deserves the crown of web automation champion. Each contender brings its own unique strengths and strategies to the arena, but which will emerge victorious in the fight for web automation supremacy?&lt;/p></description></item><item><title>ScrapingBee is joining Oxylabs’ group</title><link>https://www.scrapingbee.com/blog/scrapingbee-acquisition/</link><pubDate>Thu, 19 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/scrapingbee-acquisition/</guid><description>&lt;p>Today, we’re incredibly proud and excited to announce that ScrapingBee has officially become part of Oxylabs’ group.&lt;/p>
&lt;p>Oxylabs’ company group already offers a variety of industry-leading proxy and data gathering solutions. Through this acquisition, they aim to strengthen their position as a market leader while helping elevate the web scraping industry as a whole.&lt;/p>
&lt;p>At ScrapingBee, our mission has always been to offer a transparent, easy-to-use, and high-performance web scraping solution.&lt;/p></description></item><item><title>Web Scraping Handling Ajax Website</title><link>https://www.scrapingbee.com/blog/web-scraping-handling-ajax-website/</link><pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-handling-ajax-website/</guid><description>&lt;p>Today more and more websites are using Ajax for fancy user experiences, dynamic web pages, and many more good reasons.
Crawling Ajax heavy website can be tricky and painful, we are going to see some tricks to make it easier.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAAtElEQVR4nKRRXauCQBTcc1wvLl4QuQ9XK/z//6cepReJSgxFhfVrz&amp;#43;khiCU2CJu3M8wwwxnJzGItcLXTYTaGid50IXohpH10dWuaikkE/6n6VU9ed/0hv47hXxZCto0cycZQX5XerfyZmvp8sdNPlS5m1U08LOSuDQKYxP7Y5EWLiGCJQPoSvWGc9WTctdGDKEl3iwDAeJPYIiUhlqQXDv3A5uHTqR7fQlxlduGrne8BAAD//wYiTOstizjlAAAAAElFTkSuQmCC); background-size: cover">
 &lt;svg width="1349" height="674" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/web-scraping-handling-ajax-website/cover_hu8880260185297834566.png 1200w '
 data-src="https://www.scrapingbee.com/blog/web-scraping-handling-ajax-website/cover_hu8880260185297834566.png"
 width="1349" height="674"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/web-scraping-handling-ajax-website/cover_hu8880260185297834566.png 1200w'
 src="https://www.scrapingbee.com/blog/web-scraping-handling-ajax-website/cover.png"
 width="1349" height="674"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h2 id="prerequisite">Prerequisite&lt;/h2>
&lt;p>Before starting, please read the previous articles I wrote to understand how to set up your Java environment, and have a basic understanding of HtmlUnit &lt;a href="https://ksah.in/introduction-to-web-scraping-with-java/" target="_blank" >Introduction to Web Scraping With Java&lt;/a> and &lt;a href="https://ksah.in/how-to-log-in-to-almost-any-websites/" target="_blank" >Handling Authentication&lt;/a>.
After reading this you should be a little bit more familiar with web scraping.&lt;/p></description></item><item><title>XPath vs CSS selectors</title><link>https://www.scrapingbee.com/blog/xpath-vs-css-selector/</link><pubDate>Tue, 17 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/xpath-vs-css-selector/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>If you have already browsed our &lt;a href="https://www.scrapingbee.com/blog/" >web scraping blog&lt;/a> a bit, you will probably have already come across our &lt;a href="https://www.scrapingbee.com/blog/practical-xpath-for-web-scraping/" >introduction to XPath expressions&lt;/a>, as well as our article on &lt;a href="https://www.scrapingbee.com/blog/using-css-selectors-for-web-scraping/" >using CSS selectors for web scraping&lt;/a> - if you haven't yet, highly recommended 👍. Quite a few good reads.&lt;/p>
&lt;p>So you may already have a good idea of what they do and how they are used, but what might be missing - to complete the picture - is how they compare to each other. That's exactly what we are going to do in today's article.&lt;/p></description></item><item><title>What is data parsing?</title><link>https://www.scrapingbee.com/blog/data-parsing/</link><pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/data-parsing/</guid><description>&lt;p>Data parsing is the process of taking data in one format and transforming it to another format. You'll find parsers used everywhere. They are commonly used in compilers when we need to parse computer code and generate machine code.&lt;/p>
&lt;p>This happens all the time when developers write code that gets run on hardware. Parsers are also present in SQL engines. SQL engines parse a SQL query, execute it, and return the results.&lt;/p></description></item><item><title>Free AI Powered Proxy Scraper for Getting Fresh Public Proxies</title><link>https://www.scrapingbee.com/blog/free-ai-powered-proxy-scraper-for-getting-fresh-public-proxies/</link><pubDate>Sun, 15 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/free-ai-powered-proxy-scraper-for-getting-fresh-public-proxies/</guid><description>&lt;p>Proxies are your ultimate cheat code, helping you bypass the anti-scraping bosses guarding valuable data behind firewalls and restrictions. This guide shows you how to obtain free proxies with an &lt;a href="https://www.scrapingbee.com/features/ai-web-scraping-api/" target="_blank" >AI-powered scraper API&lt;/a>, saving you time and money while leveling up your scraping game like a pro.&lt;/p>
&lt;p>Free proxies are listed by several sources on the internet, and they usually allow us to filter by protocol type, country, and other parameters. &lt;a href="https://www.scrapingbee.com/blog/best-free-proxy-list-web-scraping/" target="_blank" >In a previous blog post, we looked at some of these sources and tested them for various quality parameters.&lt;/a> (In the context of proxies, quality would refer to whether the proxy actually works or not, and also the time it takes to complete a request.) In this tutorial we'll show you how to scrape fresh public proxies from any source and evaluate them to figure out which ones are working.&lt;/p></description></item><item><title>Google Ads Competitor Analysis: 4 Battle-Tested Methods</title><link>https://www.scrapingbee.com/blog/google-ads-competitor-analysis-system/</link><pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/google-ads-competitor-analysis-system/</guid><description>&lt;p>You're reviewing your &lt;a href="https://ads.google.com/home/" target="_blank" >Google Ads dashboard&lt;/a> on a Monday morning, coffee in hand, when you notice your cost-per-click has mysteriously skyrocketed over the weekend. Your best-performing keywords are suddenly bleeding money, and your once-reliable ad positions are slipping. Sound familiar?&lt;/p>
&lt;p>In my years of experience with PPC campaigns and developing web scraping solutions, I've learned that in the high-stakes world of Google Ads, flying blind to your competitors' moves isn't just risky – it's expensive.&lt;/p></description></item><item><title>AI and the Art of Reddit Humor: Mapping Which Countries Joke the Most</title><link>https://www.scrapingbee.com/blog/global-subreddit-humor-analysis-with-ai/</link><pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/global-subreddit-humor-analysis-with-ai/</guid><description>&lt;p>Making jokes on the internet is a fine art and Reddit users globally are working diligently to keep the dad jokes coming, because the only thing better than winning an internet argument is winning an internet upvote contest with a punchline your dad would be proud of.&lt;/p>
&lt;p>In fact, Reddit's vast reservoir of dad jokes may just be the secret ingredient that helped it reach a staggering $6.4 billion valuation at its recent IPO. Who knew that jokes your dad repeats at every family gathering could be worth their weight in Reddit Gold? But which country attempts to make the highest proportion of jokes in their comment sections?&lt;/p></description></item><item><title>The 11 best web scraping subreddits</title><link>https://www.scrapingbee.com/blog/11-best-subreddits-for-webscraping/</link><pubDate>Thu, 12 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/11-best-subreddits-for-webscraping/</guid><description>&lt;p>Web scraping is an essential skill for data analysts and developers who want to extract data from websites. However, finding reliable sources to learn and discuss web scraping techniques can be challenging. Fortunately, several subreddits on Reddit are dedicated to web scraping, data analysis, and programming-related discussion.&lt;/p>
&lt;p>In this article, we'll explore the 11 best subreddits for web scraping and share why each of these subreddits might be useful for you on your web scraping journey.&lt;/p></description></item><item><title>What are ISP proxies?</title><link>https://www.scrapingbee.com/blog/isp-proxy/</link><pubDate>Wed, 11 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/isp-proxy/</guid><description>&lt;p>Proxies, intermediary servers that route your internet traffic, usually fall into three categories: datacenter, residential, and ISP. By definition, ISP proxies are affiliated with an internet service provider, but in fact, it’s easier to see them as a combination of datacenter and residential proxies.&lt;/p>
&lt;p>Let’s take a closer look at ISP proxies and see how they’re particularly useful for web scraping.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAA20lEQVR4nGL5//8/A7mAiWydWDT/&amp;#43;/fv9&amp;#43;8/mOo&amp;#43;fPr64tW7f3/&amp;#43;Ydf879//9&amp;#43;8/PHn6/NyFS2/fvvv3D0Xd3ksXN5w/9evHb2RBFjjr//9/Z85deP323aePn9&amp;#43;9e&amp;#43;/iZM/EBDX63cfPrxh&amp;#43;fGT/&amp;#43;&amp;#43;HHN3FuNkZGRnSbmZmZDfR1///7z8fHq6OtwcoKNffnz98rDh/&amp;#43;8P0rMxPT4mMHPnz8CtfCiBzaHz9&amp;#43;&amp;#43;vHzJxMTExMjo7CwEMxF/28/eibEy8POyvr49Rt1eWlmZmYsmkkFVI0qkgAgAAD//5nTaFicH1ejAAAAAElFTkSuQmCC); background-size: cover">
 &lt;svg width="1200" height="628" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/isp-proxy/cover_hu18047000366882754256.png 1200w '
 data-src="https://www.scrapingbee.com/blog/isp-proxy/cover_hu18047000366882754256.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/isp-proxy/cover_hu18047000366882754256.png 1200w'
 src="https://www.scrapingbee.com/blog/isp-proxy/cover.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h2 id="what-are-isp-proxies">What are ISP Proxies?&lt;/h2>
&lt;p>ISP proxies are residential proxies hosted on a data center. With ISP proxies, you get the benefits of data center network speed, and the great reputation of residential IPs.&lt;/p></description></item><item><title>Ultimate Git and GitHub Tutorial with Examples</title><link>https://www.scrapingbee.com/blog/ultimate-git-and-github-commands-tutorial-with-examples/</link><pubDate>Tue, 10 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/ultimate-git-and-github-commands-tutorial-with-examples/</guid><description>&lt;p>In software development, &lt;strong>Git and GitHub&lt;/strong> have become essential tools for managing and collaborating on code. In this guide, we'll learn how to use Git, a powerful version control system, and GitHub, the leading platform for hosting and sharing Git repositories.&lt;/p>
&lt;p>We will start by discussing Git and its most important terms. We'll cover basic Git commands and approaches and then move on to GitHub. Finally, we'll explore commands to work with GitHub repositories and answer some common questions. By the end of this article, you'll be familiar with both Git and GitHub and all the standard approaches. So, let's get started!&lt;/p></description></item><item><title>Serverless Web Scraping With Aws Lambda and Java</title><link>https://www.scrapingbee.com/blog/serverless-web-scraping-with-aws-lambda-and-java/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/serverless-web-scraping-with-aws-lambda-and-java/</guid><description>&lt;p>Serverless is a term referring to the execution of code inside ephemeral containers (Function As A Service, or FaaS). It is a hot topic in 2019, after the “micro-service” hype, here come the “nano-services”!&lt;/p>
&lt;p>Cloud functions can be triggered by different things such as:&lt;/p>
&lt;ul>
&lt;li>An HTTP call to a REST API&lt;/li>
&lt;li>A job in a message queue&lt;/li>
&lt;li>A log&lt;/li>
&lt;li>IOT event&lt;/li>
&lt;/ul>
&lt;p>Cloud functions are a really good fit with web scraping tasks for many reasons. Web Scraping is I/O bound, most of the time is spent waiting for HTTP responses, so we don’t need high-end CPU servers. Cloud functions are cheap (first 1M request is free, then $0.20 per million requests) and easy to set up. Cloud functions are a good fit for parallel scraping, we can create hundreds or thousands of function at the same time for large-scale scraping.&lt;/p></description></item><item><title>The Best JavaScript Web Scraping Libraries</title><link>https://www.scrapingbee.com/blog/best-javascript-web-scraping-libraries/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-javascript-web-scraping-libraries/</guid><description>&lt;p>Ever need to pull data from websites – things like product details, news articles, or even just prices? Web scraping is your go-to, and luckily, JavaScript offers some nice tools for the job. Whether you're facing a simple HTML page or a dynamic interactive site, there's a library out there that can handle it.&lt;/p>
&lt;p>In this guide we'll dive into the best JavaScript web scraping tools that people are actually using in 2025. For each one, you'll get: a brief overview, a code snippet to get you started, as well as pros and cons.&lt;/p></description></item><item><title>Mapping the Funniest US States on Reddit using AI</title><link>https://www.scrapingbee.com/blog/funniest-us-states-on-reddit/</link><pubDate>Sun, 08 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/funniest-us-states-on-reddit/</guid><description>&lt;p>Reddit is a unique social media platform that works on upvotes rather than likes and followers. Needless to say, jokes are very important contributors to Reddit's upvote economy. To add to this, most users use the platform anonymously and miss no opportunity to crack a dad joke whenever they can.&lt;/p>
&lt;p>In a previous article, we analyzed and ranked country &lt;a href="https://www.scrapingbee.com/blog/global-subreddit-humor-analysis-with-ai/" target="_blank" >subreddits for humorous comments&lt;/a>. The USA was one of the top countries in terms of the percentage of attempted jokes. In this article, we drill down further and repeat the same analysis across the states of the USA. For each state, we obtained all the comments from the top 50 threads of this year. Then we ran the top-level comments through AI (Mistral 7B) to classify them as &amp;quot;joke&amp;quot; or &amp;quot;not joke&amp;quot;, with the thread topic in context.&lt;/p></description></item><item><title>Web Scraping vs Web Crawling: Ultimate Guide</title><link>https://www.scrapingbee.com/blog/scraping-vs-crawling/</link><pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/scraping-vs-crawling/</guid><description>&lt;p>There are many ways that businesses and individuals can gather information about their customers and web crawling and web scraping are some of the most common approaches. You'll hear these terms used interchangeably, but they are &lt;em>not&lt;/em> the same thing.&lt;/p>
&lt;p>In this article, we'll go over the differences between web scraping and web crawling and how they relate to each other. We will also cover some use cases for both approaches and tools you can use.&lt;/p></description></item><item><title>An Automatic Bill Downloader in Java</title><link>https://www.scrapingbee.com/blog/an-automatic-bill-downloader-in-java/</link><pubDate>Fri, 06 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/an-automatic-bill-downloader-in-java/</guid><description>&lt;p>In this article, I am going to show how to download bills (or any other file ) from a website with HtmlUnit.&lt;/p>
&lt;p>I suggest you read these articles first: Introduction of &lt;a href="https://www.scrapingbee.com/blog/introduction-to-web-scraping-with-java/" >how to do web scraping with Java&lt;/a> and &lt;a href="https://www.scrapingbee.com/blog/how-to-log-in-to-almost-any-websites/" >Autologin&lt;/a>&lt;/p>
&lt;p>Since I am hosting this blog on &lt;a href="https://m.do.co/c/0e940b26444e" target="_blank" >Digital Ocean&lt;/a> (10$ in credit if you sign up via this link), I will show you how to write a bot to automatically download every bill you have.&lt;/p></description></item><item><title>What are datacenter proxies?</title><link>https://www.scrapingbee.com/blog/datacenter-proxies/</link><pubDate>Thu, 05 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/datacenter-proxies/</guid><description>&lt;p>A datacenter proxy is a proxy service that offers quick internet access and a better user experience. As they’re not affiliated with an ISP, they will hide your real IP address, which means the website won’t be able to identify the user’s real IP address, enabling the user to access the website anonymously. That’s beneficial in a number of scenarios, like accessing all the information on a website hosted in a country whose servers may hide certain information, getting around a server block, or when you need high bandwidth without network lag.&lt;/p></description></item><item><title>No-code competitor monitoring with ScrapingBee and Integromat</title><link>https://www.scrapingbee.com/blog/no-code-competitor-monitoring/</link><pubDate>Wed, 04 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/no-code-competitor-monitoring/</guid><description>&lt;p>Competitor analysis is a vital task in big or small companies. It allows you to confirm market needs by looking at what competitors are offering. At the same time, it allows you to build better products and impress potential customers by fixing what is wrong with the current options.&lt;/p>
&lt;p>Of course, a company should focus on its own products. But you can’t just ignore what is happening out there. You can find amazing insights with data gathered from competitors, suppliers, customers.&lt;/p></description></item><item><title>Send stock prices update to Slack with Make and ScrapingBee</title><link>https://www.scrapingbee.com/blog/no-code-stock-price-slack/</link><pubDate>Tue, 03 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/no-code-stock-price-slack/</guid><description>&lt;p>It is unlikely that you will always be on top of your investments if you do not study your stock's price movements. The good news is that there are plenty of online resources available to you that allow you to monitor the financial health of a company whose shares you own, and to evaluate the stock's performance.&lt;/p>
&lt;p>&lt;a href="https://finance.yahoo.com/" target="_blank" >Yahoo Finance&lt;/a> supplies an up-to-date news feed of financial news from some of the most trusted sources online, as well as offering a comprehensive look at stocks and funds.&lt;/p></description></item><item><title>urllib3 vs. Requests: Which HTTP Client is Best for Python?</title><link>https://www.scrapingbee.com/blog/urllib3-vs-requests/</link><pubDate>Tue, 03 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/urllib3-vs-requests/</guid><description>&lt;p>Python is one of the most widely used programming languages for web scraping, and a large chunk of any web scraping task is sending HTTP requests. urllib3 and Requests are the most commonly used packages for this purpose. Naturally, the next question is which one do you use?&lt;/p>
&lt;p>In this blog, we briefly introduce both packages, highlighting the differences between urllib3 and Requests, and discuss which one of them is best suited for different scenarios.&lt;/p></description></item><item><title>Topic Analysis of US State Subreddits Using gpt-4o-mini</title><link>https://www.scrapingbee.com/blog/topic-analysis-of-us-state-subreddits-using-ai/</link><pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/topic-analysis-of-us-state-subreddits-using-ai/</guid><description>&lt;p>Ever wondered what people across the United States are talking about online? Reddit, often dubbed &amp;quot;the front page of the internet,&amp;quot; offers a treasure trove of conversations, and each state has its own dedicated subreddit reflecting local interests. But what exactly are these state-based communities discussing the most?&lt;/p>
&lt;p>In total, we looked at 50,947 threads from the different states of the USA. We used the “year” filter and the “top” sort on Reddit. We first made a word cloud consisting of the commonly occurring words in the thread topics. Based on this preliminary analysis, we made 8 categories, including an “others” category which we excluded from visualizations. We asked gpt-4o-mini to go over each topic and classify them into one of those. The 8 categories we used are as follows:&lt;/p></description></item><item><title>Shades of Success: The Trending E-commerce Colours of 2024</title><link>https://www.scrapingbee.com/blog/shades-of-success-e-commerce-trending-colours/</link><pubDate>Sun, 01 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/shades-of-success-e-commerce-trending-colours/</guid><description>&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAABTklEQVR4nJyQT05bMRCHf&amp;#43;Pxn5e&amp;#43;NmnVKlGlNq3aVaUegBPAHdhzB07AHdhwCU6BxJ4FS3YsQvLyFF6en2eQkyAlKNnghT2y5/PMfFZvfuG9y&amp;#43;SNVidhE9PWO21SDsCEttXJVCQBjlQgAljKDGNey9NMcuLrTQ6Y1gUsmO4f4tV1/f0bl6WpKkmio6/8/4&amp;#43;7vWuDozaqs2QtCk&amp;#43;LRkXQJT0&amp;#43;6v0dO4ukP4Z8elJ6R1Uty6iAGsLHHv37bX8ObbWQSSVsUHjjHRmDZauD0kCVsjDCupPUpPNLLGLpvYudGNIYk7WcUud8KEx1cSZcMBQQhYC2bSswnWPeFELCAlVthYKj2MXYYTiQz592bFrsqv3Sp37ZKcRAQaRKzIhdHjX41feH4FV1ZY5182H2XGj7mCQLG49sCPSG3AdnnoJtBr2EwJKbh&amp;#43;U9JICXAAAA///2EZVHGzcKpAAAAABJRU5ErkJggg==); background-size: cover">
 &lt;svg width="2309" height="1157" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/shades-of-success-e-commerce-trending-colours/cover_hu372721771777939466.png 1500w '
 data-src="https://www.scrapingbee.com/blog/shades-of-success-e-commerce-trending-colours/cover_hu372721771777939466.png"
 width="2309" height="1157"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/shades-of-success-e-commerce-trending-colours/cover_hu372721771777939466.png 1500w'
 src="https://www.scrapingbee.com/blog/shades-of-success-e-commerce-trending-colours/cover.png"
 width="2309" height="1157"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;p>As consumers, we love nothing more than jumping aboard a new micro trend
or aesthetic, and platforms such as Pinterest and TikTok have made it
easier than ever before to keep up with all the latest trends.&lt;/p>
&lt;p>Colour is at the heart of every fashion, interior and style trend, but
in the fast-paced world of 2024, colour is so much more than pastel
tones and monochrome palettes. It's no surprise that the likes of Dulux
and Pantone release an annual 'colour of the year'.&lt;/p></description></item><item><title>Minimum Advertised Price Monitoring with ScrapingBee</title><link>https://www.scrapingbee.com/blog/minimum-advertised-price-monitoring-with-scrapingbee/</link><pubDate>Sat, 31 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/minimum-advertised-price-monitoring-with-scrapingbee/</guid><description>&lt;h1 id="minimum-advertised-price-monitoring-with-scrapingbee">Minimum Advertised Price Monitoring with ScrapingBee&lt;/h1>
&lt;p>To uphold their brand image and protect profits, it's crucial for manufacturers to routinely monitor the advertised prices of their products. Minimum advertised price (MAP) monitoring helps brands check whether retailers are advertising their products below the minimum price set by the brand. This can prevent retailers from competing on product price, which can lead to a harmful race to the bottom. MAP monitoring helps brands identify and enforce their MAP policies. For instance, if a brand sets a MAP of $100 for a new cosmetic product, MAP monitoring would enable the company to identify and take action against retailers who advertise it for less than $100.&lt;/p></description></item><item><title>What is HTTP?</title><link>https://www.scrapingbee.com/blog/what-is-http/</link><pubDate>Fri, 30 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/what-is-http/</guid><description>&lt;p>Your browser uses it, as does your REST API. It connects you to your favorite restaurant whenever you order food online. It's built into your IoT gadget and allows you to unlock doors and adjust your living room temperature, when you are on the other side of the planet. And it's even used to occasionally tunnel other protocols - &lt;strong>HTTP&lt;/strong>&lt;/p>
&lt;p>But what exactly is HTTP? What does it do and how does it work? If you already read some of our other articles (e.g. &lt;a href="https://www.scrapingbee.com/blog/web-scraping-php/#1-http-requests" >Web Scraping with PHP&lt;/a>), you'll have already come across some details, but today we really want to go in-depth into what HTTP is.&lt;/p></description></item><item><title>Are Product Hunt's featured products still online today?</title><link>https://www.scrapingbee.com/blog/producthunt-cemetery/</link><pubDate>Thu, 29 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/producthunt-cemetery/</guid><description>&lt;p>Releasing any new product these days is a competitive business. Mountains of new products appear daily, complete with well produced intro videos with every new competitor bearing a striking resemblance to one other. But how many of the products of the past stood out from the crowd and continue to remain online today?&lt;/p>
&lt;p>In this article I'll be showing how to query the Product Hunt API to collect data. We collected information from all the featured products from Product Hunts 8-year history to determine how many of them still exist online or have disappeared into the tech wilderness. Along the way we'll also discover other interesting insights into the dataset.&lt;/p></description></item><item><title>'JMAP (YC S10) Linux Inside is hiring': the quest for the best Hacker News title</title><link>https://www.scrapingbee.com/blog/quest-best-hacker-news-title/</link><pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/quest-best-hacker-news-title/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>For those of you who don't know, &lt;a href="https://news.ycombinator.com" target="_blank" >Hacker News&lt;/a> is a successful social news website focusing on computer science and entrepreneurship visited by more than 10m people per month (source: SimilarWeb).&lt;/p>
&lt;p>Founded by Paul Graham, it works similarly to Reddit, users submit contents which can be upvoted by the community.
The most upvoted content, mostly links, then reach the front-page, resulting in tens of thousands of visits for the lucky website.&lt;/p></description></item><item><title>A JavaScript Developer's Guide to curl</title><link>https://www.scrapingbee.com/blog/a-javascript-developers-guide-to-curl/</link><pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/a-javascript-developers-guide-to-curl/</guid><description>&lt;p>curl, short for &lt;em>client URL&lt;/em>, is a command line tool for transferring data over various protocols, including HTTP and HTTPS. It's available on many platforms, where it's often installed by default, making it a popular tool for testing network requests, &lt;a href="https://www.scrapingbee.com/blog/what-is-web-scraping/" target="_blank" >scraping the web&lt;/a>, and downloading resources.&lt;/p>
&lt;p>curl's powerful and versatile feature set combined with a simple CLI makes it a go-to choice for many developers, with many guides and lots of API documentation, including curl-based examples. It's no wonder developers would like to use curl alongside a scripting language like JavaScript for demanding workflows like web scraping.&lt;/p></description></item><item><title>The Java Web Scraping Handbook</title><link>https://www.scrapingbee.com/java-webscraping-book/</link><pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/java-webscraping-book/</guid><description>&lt;p>This guide was originally written in 2018, and published here: &lt;a href="https://www.javawebscrapinghandbook.com/" target="_blank" >https://www.javawebscrapinghandbook.com/&lt;/a>. We've decided to republish it for free on our website. A PDF version is also available.&lt;/p>
&lt;p>&lt;em>You don't have to give us your email to download to eBook, because like you, we hate that&lt;/em>: &lt;a href="https://www.scrapingbee.com/download/webscrapinghandbook.pdf" >DIRECT PDF VERSION&lt;/a>.&lt;/p>
&lt;p>Feel free to distribute it, but &lt;em>&lt;strong>please include a link to the original content (this page)&lt;/strong>&lt;/em>.&lt;/p>
&lt;hr>
&lt;p>Web scraping or crawling is the act of fetching data from a third party website by downloading and parsing the HTML code to extract the data you want. It can be done manually, but generally this term refers to the automated process of downloading the HTML content of a page, parsing/extracting the data, and saving it into a database for further analysis or use.&lt;/p></description></item><item><title>Can you get SOCKS5 for free?</title><link>https://www.scrapingbee.com/webscraping-questions/proxy/can-you-get-socks5-for-free/</link><pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/proxy/can-you-get-socks5-for-free/</guid><description>&lt;h2 id="what-is-the-socks5-protocol">What Is The SOCKS5 Protocol?&lt;/h2>
&lt;p>SOCKS is an internet protocol used for proxies, i.e. to enable a client and a server machine to communicate over the internet without knowing each other, by means of an intermediary proxy server. SOCKS5 is the most recent version of this protocol, designed to be an upgrade to its predecessors SOCKS4 and SOCKS4a. SOCKS5 offers authentication support and includes support for IPv6 and UDP.&lt;/p>
&lt;h2 id="common-use-cases-for-socks5-proxies">Common Use Cases For SOCKS5 Proxies&lt;/h2>
&lt;p>In the world of web scraping, the most common use case of a proxy is to mask the IP address of the client making the HTTP request to the website being scraped. Proxies primarily help mask the IP address of the client from the server. This could be useful for privacy reasons, to bypass geographical restrictions, or to make requests from multiple IP addresses using multiple proxies to bypass IP-based rate limiting.&lt;/p></description></item><item><title>How to find elements by CSS selector in Selenium?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-find-elements-css-selector-selenium/</link><pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-find-elements-css-selector-selenium/</guid><description>&lt;p>Selenium is a popular browser automation framework that is also used for scraping data using headless browsers. While using Selenium, one of the most popular things to do is use CSS selectors to select particular HTML elements to interact with or extract data from.&lt;/p>
&lt;h2 id="using-browser-developer-tools-to-find-css-selectors">Using Browser Developer Tools To Find CSS Selectors&lt;/h2>
&lt;p>To scrape content or fill in forms using Selenium, we first need to know the CSS selector of the HTML element we'll be working with. To find the CSS selector, we need to go through the HTML structure of the web page, which could be confusing and cumbersome. Most modern browsers provide developer tools to make this easier.&lt;/p></description></item><item><title>How to parse a JSON file in JavaScript?</title><link>https://www.scrapingbee.com/webscraping-questions/json/how-to-parse-a-json-file-in-javascript/</link><pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/json/how-to-parse-a-json-file-in-javascript/</guid><description>&lt;h2 id="what-is-json-and-why-parse-it">What Is JSON And Why Parse It?&lt;/h2>
&lt;p>JSON stands for &amp;quot;JavaScript Object Notation&amp;quot;. It's one of the most popular formats used for storing and sharing data containing key-value pairs, which may also be nested or in a list. For many applications that work with data, including web scraping, it is important to be able to write and parse data in the JSON format.&lt;/p>
&lt;p>Here is a sample JSON string:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;John Doe&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;age&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">32&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;address&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;street&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;123 Main St&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;city&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Anytown&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;state&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;CA&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="how-to-read-a-json-file">How To Read A JSON File?&lt;/h2>
&lt;p>In JavaScript, you can parse a JSON string using the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse" target="_blank" >&lt;code>JSON.parse()&lt;/code>&lt;/a> method. A JSON file is essentially a text file containing a JSON string. Therefore, to read a JSON file, you first need to read the file as a string and then parse it into an object that contains key-value pairs.&lt;/p></description></item><item><title>How to use CSS Selectors in Python?</title><link>https://www.scrapingbee.com/webscraping-questions/css_selectors/how-to-use-css-selectors-in-python/</link><pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/css_selectors/how-to-use-css-selectors-in-python/</guid><description>&lt;h2 id="what-are-css-selectors">What Are CSS Selectors?&lt;/h2>
&lt;p>CSS selectors are patterns that are used to reference HTML elements, primarily for the purpose of styling them using CSS. Over the years, they've evolved into one of the key ways to select and manipulate HTML elements using in-browser JavaScript and other programming languages such as Python.&lt;/p>
&lt;h2 id="why-use-css-selectors-in-python">Why Use CSS Selectors in Python?&lt;/h2>
&lt;p>In Python, CSS selectors are primarily used to select one or more HTML elements while working with web pages, usually for scraping and browser automation.&lt;/p></description></item><item><title>How to wait for page to load in Playwright?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-wait-for-page-to-load-in-playwright/</link><pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-wait-for-page-to-load-in-playwright/</guid><description>&lt;p>Websites that render using JavaScript work in many different ways. Hence, waiting for the page to load might mean different things based on what we're looking to do. Sometimes the elements we need will appear on the first render, sometimes an app shell will load first and then the content. Sometimes we may even have to interact (click or scroll). Let's look at the different methods to wait in Playwright, so you can use the one that best works for your task.&lt;/p></description></item><item><title>What is Screen Scraping and How To Do It With Examples</title><link>https://www.scrapingbee.com/blog/screen-scraping-with-scrapingbee/</link><pubDate>Mon, 19 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/screen-scraping-with-scrapingbee/</guid><description>&lt;h2 id="what-is-screen-scraping">What is Screen Scraping?&lt;/h2>
&lt;p>The easiest way to get data from another program is to use a dedicated API (Application Programming Interface), but not all programs provide one. In fact, most programs don't.&lt;/p>
&lt;p>If there's no API provided, you can still get data from a program by using screen scraping, which is the process of capturing data from the screen output of a program.&lt;/p>
&lt;p>This can take all kinds of forms, ranging from parsing terminal output to reading text off screenshots, with the most common being classic web scraping.&lt;/p></description></item><item><title>Web Scraping with R Tutorial: Scraping BrickEconomy.com</title><link>https://www.scrapingbee.com/blog/web-scraping-r/</link><pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-r/</guid><description>&lt;p>In this tutorial we'll cover everything you need to know about web scraping using the &lt;a href="https://www.r-project.org/about.html" target="_blank" >R programming language&lt;/a>. We'll explore the ecosystem of R packages for web scraping, build complete scrapers for real-world datasets, tackle common challenges like JavaScript rendering and pagination, and even analyze our findings with some data science magic. Let's get started!&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Hearing web scraping for the first time?&lt;/strong> Take a quick detour to our &lt;a href="https://www.scrapingbee.com/blog/what-is-web-scraping/" target="_blank" >Web Scraping Fundamentals guide&lt;/a>. It covers all the basics, history, and common use cases that will help you build a solid foundation before diving into R-specific implementations. If you're a newbie, consider it your must-read primer!&lt;/p></description></item><item><title>ChatGPT Scraping - How to Vibe Scrape with ChatGPT</title><link>https://www.scrapingbee.com/blog/chatgpt-scraping/</link><pubDate>Fri, 09 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/chatgpt-scraping/</guid><description>&lt;p>LLMs such as ChatGPT have changed how developers write, review, and test code. The biggest testament to this is the rise of the term &amp;quot;Vibe coding&amp;quot;, which was coined by &lt;a href="https://x.com/karpathy/status/1886192184808149383" target="_blank" >Andrej Karpathy in an X post&lt;/a>. To quote the post:&lt;/p>
&lt;blockquote>
&lt;p>There's a new kind of coding I call &amp;quot;vibe coding&amp;quot;, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists. It's possible because the LLMs (e.g. Cursor Composer w Sonnet) are getting too good. Also I just talk to Composer with SuperWhisper so I barely even touch the keyboard. I ask for the dumbest things like &amp;quot;decrease the padding on the sidebar by half&amp;quot; because I'm too lazy to find it. I &amp;quot;Accept All&amp;quot; always, I don't read the diffs anymore. When I get error messages I just copy paste them in with no comment, usually that fixes it. The code grows beyond my usual comprehension, I'd have to really read through it for a while. Sometimes the LLMs can't fix a bug so I just work around it or ask for random changes until it goes away. It's not too bad for throwaway weekend projects, but still quite amusing. I'm building a project or webapp, but it's not really coding - I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works.
~ Andrej Karpathy on X&lt;/p></description></item><item><title>How to bypass PerimeterX anti-bot system in 2025</title><link>https://www.scrapingbee.com/blog/how-to-bypass-perimeterx-anti-bot-system/</link><pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-bypass-perimeterx-anti-bot-system/</guid><description>&lt;p>Today we're continuing our adventures in the wondrous world of scraping and taking a look at how to bypass the PerimeterX anti-bot system using a few potential solutions. It's not the easiest task, but I'll try to explain what to watch out for and will cover some key details to keep in mind.&lt;/p>
&lt;p>So, let's get started!&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAA9klEQVR4nMSRTUvDQBCG391E07W1KQGp3wfxYi/e/dl6EP0RgliEerFYtZqYmCAxm93OjtgWxItiL85hDsM8w8s8PjNj0ZILk99gR3&amp;#43;OMIfHd&amp;#43;n58UX6XPy8bezk7PpymCRfcJq8PT4VxurRfZ5nJQAmYmNdpbk2n91YJgLQvx2evA5Ob/p1ZQD4AOKXMq49P1obl2hl752oWV0NKMuFUqy1q63XbsmmWjk82OtuRKOgt7keNJbncCdUYaEf4mJ3p9tebQBQvX14npASzOxYSDHLGfj&amp;#43;Ubm9hRDTgZipYnJaW6WWIH/5P01ISCmn58S/ef4IAAD//6rVdKEU7Oz3AAAAAElFTkSuQmCC); background-size: cover">
 &lt;svg width="1200" height="628" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/how-to-bypass-perimeterx-anti-bot-system/cover_hu8255072659563914781.png 1200w '
 data-src="https://www.scrapingbee.com/blog/how-to-bypass-perimeterx-anti-bot-system/cover_hu8255072659563914781.png"
 width="1200" height="628"
 alt='How to bypass PerimeterX'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/how-to-bypass-perimeterx-anti-bot-system/cover_hu8255072659563914781.png 1200w'
 src="https://www.scrapingbee.com/blog/how-to-bypass-perimeterx-anti-bot-system/cover.png"
 width="1200" height="628"
 alt='How to bypass PerimeterX'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h2 id="what-is-perimeterx">What is PerimeterX?&lt;/h2>
&lt;p>I'm not sure about you, but to me the name &amp;quot;PerimeterX&amp;quot; sounds like it belongs to a secret military project or some evil AI. You could imagine it being announced by an overly dramatic voice-over and accompanied by &amp;quot;Ride of the Valkyries.&amp;quot; Jokes aside, PerimeterX (also known as &amp;quot;HUMAN&amp;quot; — kinda ironic, eh?) is a bot protection system used by some websites to detect and block automated traffic, including your scraping tools. You'll mostly find PerimeterX on large high-traffic sites like e-commerce, ticketing, login forms and any place where bots cause (financial) damage.&lt;/p></description></item><item><title>Playwright MCP - Scraping Smithery MCP database Tutorial with Cursor</title><link>https://www.scrapingbee.com/blog/playwright-mcp-web-scraping-smithery-tutorial-cursor/</link><pubDate>Mon, 28 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/playwright-mcp-web-scraping-smithery-tutorial-cursor/</guid><description>&lt;p>Humanity got itself a huge upgrade by embracing tool use a few million years ago and now AI is getting that upgrade. AI is now able to use various tools for you. For example, it can search the web, turn on your living room lamps, play Pokémon and of course &lt;a href="https://www.scrapingbee.com/blog/browseruse-how-to-use-ai-browser-automation-to-scrape/" target="_blank" >use browsers to scrape data&lt;/a>.&lt;/p>
&lt;p>A critical link in the interface between AI and software tools is the &lt;a href="https://modelcontextprotocol.io/introduction" target="_blank" >Model Context Protocol (MCP)&lt;/a>. It is an open protocol that defines how tools can expose their data and functionality to be used by AI models. It was introduced by &lt;a href="https://www.anthropic.com/news/model-context-protocol" target="_blank" >Anthropic in November 2024&lt;/a> and now the internet is full of MCP servers that can enable AI to do various things. Recently, OpenAI and Google have announced that they will be supporting MCP for ChatGPT and Gemini respectively. So it looks like MCP is going to be the industry standard.&lt;/p></description></item><item><title>Web Scraping with Perl</title><link>https://www.scrapingbee.com/blog/web-scraping-perl/</link><pubDate>Mon, 14 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-perl/</guid><description>&lt;p>Web scraping is a technique for retrieving data from web pages. While one could certainly load any site in their browser and copy-paste the relevant data manually, this hardly scales and so web scraping is a task destined for automation. If you are curious why one would scrape the web(/blog/what-is-web-scraping/#web-scraping-use-cases), you'll find a myriad of reasons for that:&lt;/p>
&lt;ul>
&lt;li>Generating leads for marketing&lt;/li>
&lt;li>Monitoring prices on a page (and purchase when the price drops low)&lt;/li>
&lt;li>Academic research&lt;/li>
&lt;li>&lt;a href="https://en.wikipedia.org/wiki/Arbitrage_betting" target="_blank" >Arbitrage betting&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>Perl is universally considered the &amp;quot;Swiss Army knife of programming&amp;quot; and there is a good reason for that, as it particularly excels in text processing and handling of textual input of any sort. This makes it a perfect companion for web scraping, which is inherently text-centric.&lt;/p></description></item><item><title>Web Scraping with Ruby</title><link>https://www.scrapingbee.com/blog/web-scraping-ruby/</link><pubDate>Mon, 07 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-ruby/</guid><description>&lt;p>In this tutorial we're diving into the world of web scraping with Ruby. We'll explore powerful Gems like Faraday for HTTP requests, Nokogiri for parsing HTML, and browser automation with Selenium and Capybara. Along the way, we'll scrape real websites with some example scripts, handle dynamic Javascript content and even run headless browsers in parallel.&lt;/p>
&lt;p>By the end of this tutorial, you'll be equipped with the knowledge and practical patterns needed to start scraping data from websites — whether for fun, research, or building something cool.&lt;/p></description></item><item><title>Web Scraping with Scala - Easily Scrape and Parse HTML</title><link>https://www.scrapingbee.com/blog/web-scraping-scala/</link><pubDate>Mon, 24 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-scala/</guid><description>&lt;p>This tutorial explains how to use three technologies for &lt;a href="https://www.scrapingbee.com/" target="_blank" >web scraping&lt;/a> with Scala. The article first explains how to scrape a static HTML page with Scala using &lt;a href="https://www.scrapingbee.com/blog/java-parse-html-jsoup/" target="_blank" >jsoup&lt;/a> and &lt;a href="https://index.scala-lang.org/ruippeixotog/scala-scraper" target="_blank" >Scala Scraper&lt;/a>. Then, it explains how to scrape a dynamic HTML website with Scala using &lt;a href="https://www.selenium.dev/" target="_blank" >Selenium&lt;/a>.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAAy0lEQVR4nGL5//8/A7mAiWydWDT//f3394/fmOp&amp;#43;//799&amp;#43;9fNEEWhPTP3482nPj08IWkh6mEngJc/M&amp;#43;fP&amp;#43;8/fHz3/sPnz58V5eWEhAQZGRnRNf/7&amp;#43;&amp;#43;/j/RffXr/99&amp;#43;8fsvF//v49cersu/cffvz8&amp;#43;e3bD1trc&amp;#43;zO/vv//59/DExMjMiCHOzs2prqzMxMAvx8utoacGsZGBgY4aH95&amp;#43;ef16dusvNz86lJs3CwIut/8/YdMxPTr9&amp;#43;/uTg5eXl5sGgmA1A1qkgCgAAAAP//SHtWNrz7kB4AAAAASUVORK5CYII=); background-size: cover">
 &lt;svg width="1200" height="628" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/web-scraping-scala/cover_hu18062781086090364684.png 1200w '
 data-src="https://www.scrapingbee.com/blog/web-scraping-scala/cover_hu18062781086090364684.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/web-scraping-scala/cover_hu18062781086090364684.png 1200w'
 src="https://www.scrapingbee.com/blog/web-scraping-scala/cover.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;blockquote>
&lt;p>💡 Interested in web scraping with Java? Check out our guide to the &lt;a href="https://www.scrapingbee.com/blog/best-java-web-scraping-libraries/" >best Java web scraping libraries&lt;/a>&lt;/p></description></item><item><title>BrowserUse: How to use AI Browser Automation to Scrape</title><link>https://www.scrapingbee.com/blog/browseruse-how-to-use-ai-browser-automation-to-scrape/</link><pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/browseruse-how-to-use-ai-browser-automation-to-scrape/</guid><description>&lt;p>AI agents, AI agents everywhere. This is one of the most popular and quickly evolving technologies out there. I'm not sure about you, but to me it seems like everyone is trying to use AI for literally everything: collecting data, writing letters, booking hotels, and even shopping. While I still prefer doing many of these things manually, automating boring tasks seems really tempting. Thus, in this article, we're going to see how to automate browser interactions with the help of &lt;strong>BrowserUse&lt;/strong>.&lt;/p></description></item><item><title>Web Scraping in C++ with libxml2 and libcurl</title><link>https://www.scrapingbee.com/blog/web-scraping-c++/</link><pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-c++/</guid><description>&lt;p>Web scraping is one of the rather important parts when it comes automated data extraction of web content. While languages like Python are commonly used, C++ offers significant advantages in performance and control. With its low-level memory management, speed, and ability to handle large-scale data efficiently, it is an excellent choice for web scraping tasks that demand high performance.&lt;/p>
&lt;p>In this article, we shall take a look at the advantages of developing our own custom web scraper in C++ and what its speed, resource efficiency, and scalability for complex scraping operations can bring to the table. You’ll learn how to implement a web scraper with the &lt;code>libcurl&lt;/code> and &lt;code>libxml2&lt;/code> libraries.&lt;/p></description></item><item><title>How to Scrape With Camoufox to Bypass Antibot Technology</title><link>https://www.scrapingbee.com/blog/how-to-scrape-with-camoufox-to-bypass-antibot-technology/</link><pubDate>Mon, 03 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-with-camoufox-to-bypass-antibot-technology/</guid><description>&lt;p>In a previous blog, &lt;a href="https://www.scrapingbee.com/blog/creepjs-browser-fingerprinting/" target="_blank" >we evaluated popular browser automation frameworks and patches developed for them to bypass CreepJS&lt;/a>, which is a browser fingerprinting tool that can detect headless browsers and stealth plugins. Of all the tools we tried, we found that &lt;a href="https://camoufox.com/" target="_blank" >Camoufox&lt;/a> scored the best, being indistinguishable from a real, human-operated browser. In this blog, we’ll see what it is, how it works, and try using it for some web scraping tasks.&lt;/p></description></item><item><title>Web Scraping in Rust with Reqwest, Scraper and Tokio</title><link>https://www.scrapingbee.com/blog/web-scraping-rust/</link><pubDate>Mon, 24 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-rust/</guid><description>&lt;p>In this Rust tutorial you'll learn how to create a basic web scraper by scraping the top ten movies list from IMDb. Rust is a language known for its speed and safety and we'll try two approaches: blocking IO and asynchronous IO with &lt;code>tokio&lt;/code>.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAA1klEQVR4nGL5//8/A7mAiWyd6Jp//fp17ty5e/fuYar7/fv3379/0QRZ4KwfP34UFRV9/vyZlZU1NjbW0dERIv7nz5/3Hz6&amp;#43;f//h0&amp;#43;fPivJyQkKCjIyM6JofPnz48uXL&amp;#43;/fvi4qKHjlyBKH579&amp;#43;Tp8&amp;#43;&amp;#43;fff&amp;#43;589f377/sLUyx&amp;#43;JsSUlJJiYmHx8fISEhKSkpuDgHO7uWhjozM7MAP5&amp;#43;utgbcWgYGBkbk0H7z5s3JkyeFhYXNzc2RFb15&amp;#43;46ZmenXr99cXJy8PDzYNZMKqBdVpAJAAAAA///3iFTUWxwYqQAAAABJRU5ErkJggg==); background-size: cover">
 &lt;svg width="1200" height="628" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/web-scraping-rust/cover_hu16995110867163926342.png 1200w '
 data-src="https://www.scrapingbee.com/blog/web-scraping-rust/cover_hu16995110867163926342.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/web-scraping-rust/cover_hu16995110867163926342.png 1200w'
 src="https://www.scrapingbee.com/blog/web-scraping-rust/cover.png"
 width="1200" height="628"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h2 id="implementing-a-web-scraper-in-rust">Implementing a Web Scraper in Rust&lt;/h2>
&lt;p>You’re going to set up a fully functioning web scraper in Rust. Your target for scraping will be &lt;a href="https://www.imdb.com/" target="_blank" >IMDb&lt;/a>, a database of movies, TV series, and other media.&lt;/p></description></item><item><title>Best 10 Java Web Scraping Libraries</title><link>https://www.scrapingbee.com/blog/best-java-web-scraping-libraries/</link><pubDate>Mon, 17 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/best-java-web-scraping-libraries/</guid><description>&lt;p>In this article, I will show you the most popular Java web scraping libraries and help you choose the right one. Web scraping is the process of extracting data from websites. At first sight, you might think that all you need is a standard HTTP client and basic programming skills, right?&lt;/p>
&lt;p>In theory, yes, but quickly, you will face challenges like session handling, cookies, dynamically loaded content and JavaScript execution, and even anti-scraping measures (for example, CAPTCHA, IP blocking, and rate limiting).&lt;/p></description></item><item><title>How to make API calls using Python</title><link>https://www.scrapingbee.com/blog/how-to-make-python-api-calls/</link><pubDate>Mon, 17 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-make-python-api-calls/</guid><description>&lt;p>This tutorial will show you how to make HTTP API calls using Python. There are many ways to skin a cat and there are multiple methods for making API calls in Python, but today we'll be demonstrating the &lt;code>requests&lt;/code> library, making API calls to the hugely popular &lt;a href="https://www.scrapingbee.com/features/chatgpt/" target="_blank" >OpenAI ChatGPT API&lt;/a>.&lt;/p>
&lt;p>We'll give you a demo of the more pragmatic approach and experiment with their dedicated Software Development Kit (SDK) so you can easily integrate AI into your project. We'll also explain how to make API requests to our Web Scraping API which will give you the power to pull data from any website into your project.&lt;/p></description></item><item><title>How to Web Scrape Amazon with Python</title><link>https://www.scrapingbee.com/blog/web-scraping-amazon/</link><pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-amazon/</guid><description>&lt;p>&lt;strong>Scraping Amazon&lt;/strong> can be tricky. I know the struggle. The site changes often, it has built-in protections and isn't exactly fond of being scraped. If you've ever tried going down this road, you've probably ran into roadblocks in the form of CAPTCHAs or empty responses. This tutorial will show you how to scrape Amazon shopping results step by step, bypassing anti-scraping measures with code examples.&lt;/p>
&lt;p>We'll demonstrate how to extract product details like names, prices, and links, and how to save this data into a CSV file easily. We'll also learn how to deal with common issues using proxies and other advanced tools. By the end you'll have a working Python script and full understanding of how all this ties together.&lt;/p></description></item><item><title>Web Scraping with PHP Tutorial with Example Scripts (2025)</title><link>https://www.scrapingbee.com/blog/web-scraping-php/</link><pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-php/</guid><description>&lt;p>You might have seen one of our other tutorials on how to scrape websites, for example with &lt;a href="https://www.scrapingbee.com/blog/web-scraping-ruby/" target="_blank" >Ruby&lt;/a>, &lt;a href="https://www.scrapingbee.com/blog/web-scraping-javascript/" target="_blank" >JavaScript&lt;/a> or &lt;a href="https://www.scrapingbee.com/blog/web-scraping-101-with-python/" target="_blank" >Python&lt;/a>, and wondered: what about &lt;a href="https://w3techs.com/technologies/overview/programming_language" target="_blank" >the most widely used server-side programming language for websites&lt;/a>, which, at the same time, is the &lt;a href="https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-dreaded" target="_blank" >one of the most dreaded&lt;/a>? Wonder no more - today it's time for &lt;strong>PHP&lt;/strong> 🥳!&lt;/p>
&lt;p>Believe it or not, PHP and web scraping have much in common: just like PHP, web scraping can be used either in a quick and dirty way or in a more elaborate fashion and supported with the help of additional tools and services.&lt;/p></description></item><item><title>How to Scrape Job Postings with a Free AI Job Board Scraper</title><link>https://www.scrapingbee.com/blog/build-job-board-web-scraping/</link><pubDate>Mon, 03 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/build-job-board-web-scraping/</guid><description>&lt;p>The Job market is a fiercely competitive place and getting an edge in your search can mean the difference between success and failure, so many tech-savvy Job seekers turn to web-scraping Job listings to get ahead of the competition, enabling them to see new relevant Jobs as soon as they hit the market.&lt;/p>
&lt;p>Scraping Job listings can be an invaluable tool for finding your next role and in this tutorial, we’ll teach you how to use our AI-powered Web Scraping API to harvest Job vacancies from any Job board with ease.&lt;/p></description></item><item><title>How to Bypass CreepJS and Spoof Browser Fingerprinting</title><link>https://www.scrapingbee.com/blog/creepjs-browser-fingerprinting/</link><pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/creepjs-browser-fingerprinting/</guid><description>&lt;p>&lt;a href="https://github.com/abrahamjuliot/creepjs" target="_blank" >CreepJS&lt;/a> is an open-source project designed to demonstrate vulnerabilities and leaks in extensions or browsers that users use to avoid being fingerprinted. It’s one of the newest projects in the browser fingerprinting scene, and it uses an advanced combination of techniques such as JavaScript tampering detection and finding inconsistencies between the detected user agent and the expected feature set.&lt;/p>
&lt;p>In this tutorial, we’ll see how the most popular headless browsers stack up against each other in an all-out battle to pass CreepJS’s “Headless” and “Stealth” detection scores.&lt;/p></description></item><item><title>What is Web Scraping? How to Scrape Data From Any Website</title><link>https://www.scrapingbee.com/blog/what-is-web-scraping-and-how-to-scrape-any-website-tutorial/</link><pubDate>Mon, 13 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/what-is-web-scraping-and-how-to-scrape-any-website-tutorial/</guid><description>&lt;p>Web Scraping can be one of the most challenging things to do on the internet. In this tutorial we’ll show you how to master Web Scraping and teach you how to extract data from any website at scale. We’ll give you prewritten code to get you started scraping data with ease.&lt;/p>
&lt;h2 id="what-is-web-scraping">What is Web Scraping?&lt;/h2>
&lt;p>Web scraping is the process of automatically extracting data from a website’s HTML. This can be done at scale to visit every page on the website and download the valuable data you need, storing it in a database for later use. For example, you could regularly scrape or extract all the product prices from an e-commerce store to track changes in price so your business can change the price of your products accordingly to compete.&lt;/p></description></item><item><title>Scrapy Playwright Tutorial: How to Scrape Dynamic Websites</title><link>https://www.scrapingbee.com/blog/scrapy-playwright-tutorial/</link><pubDate>Mon, 06 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/scrapy-playwright-tutorial/</guid><description>&lt;p>Playwright for Scrapy enables you to scrape javascript heavy dynamic websites at scale, with advanced web scraping features out of the box.&lt;/p>
&lt;p>In this tutorial, we’ll show you the ins and outs of scraping using this popular browser automation library that was originally invented by Microsoft, combining it with Scrapy to extract the content you need with ease.&lt;/p>
&lt;p>We’ll cover jobs to be done such as setting up your &lt;a href="https://www.scrapingbee.com/blog/web-scraping-101-with-python/" target="_blank" >Python&lt;/a> environment, inputting and submitting form data, all the way through to dealing with infinite scroll and scraping multiple pages.&lt;/p></description></item><item><title>Introduction to Web Scraping With Java</title><link>https://www.scrapingbee.com/blog/introduction-to-web-scraping-with-java/</link><pubDate>Mon, 25 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/introduction-to-web-scraping-with-java/</guid><description>&lt;p>Is there a website from where you'd like to regularly scrape data in a structured fashion, but that site does not offer a standardised API, such as a JSON REST interface yet? Don't fret, &lt;em>web scraping with Java&lt;/em> comes to the rescue.&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAAz0lEQVR4nKSRzWqDQBSF585MC6IWpdSp2m778wKF0tcvhDxAFtkkcSkmEkcyoM5PcJFkAgbEnNUM9373HDjUGIOmCk8mB2CtjVJjs1D7I2rRlAV0HX1mXujbI87rgxDxKxuGjUG8KJwqf3zAZa4d3yW0zyWl/J/N26bd7sr3t/Tv9wdjPBAbAyyzarHeIwMAp/OUsuhltckqztMkPpNXzgDoiUXJl1KdDNMEk8tSGATfnx8A4HmubQZjqlJKEUL6h9bEch4F39JdPR8DAAD//2vnSrDfH3RwAAAAAElFTkSuQmCC); background-size: cover">
 &lt;svg width="1299" height="650" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/introduction-to-web-scraping-with-java/cover_hu3813734125291400838.png 1200w '
 data-src="https://www.scrapingbee.com/blog/introduction-to-web-scraping-with-java/cover_hu3813734125291400838.png"
 width="1299" height="650"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/introduction-to-web-scraping-with-java/cover_hu3813734125291400838.png 1200w'
 src="https://www.scrapingbee.com/blog/introduction-to-web-scraping-with-java/cover.png"
 width="1299" height="650"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;blockquote>
&lt;p>💡 Interested in web scraping with Java? Check out our guide to the &lt;a href="https://www.scrapingbee.com/blog/best-java-web-scraping-libraries" >best Java web scraping libraries&lt;/a>&lt;/p></description></item><item><title>How to scrape websites with cloudscraper (python example)</title><link>https://www.scrapingbee.com/blog/how-to-scrape-websites-with-cloudscraper-python-example/</link><pubDate>Thu, 07 Mar 2024 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-websites-with-cloudscraper-python-example/</guid><description>&lt;p>Over &lt;a href="https://backlinko.com/cloudflare-users#cloudfare-key-stats" target="_blank" >7.59 million&lt;/a> active websites use Cloudflare. There's a high chance that the website you intend to scrape might be protected by it. Websites protected by services like Cloudflare can be challenging to scrape due to the various anti-bot measures they implement. If you've tried scraping such websites, you're likely already aware of the difficulty in bypassing Cloudflare's bot detection system.&lt;/p>
&lt;p>In this article, you’ll learn how to use Cloudscraper, an open-source Python library, to scrape Cloudflare-protected websites. You’ll learn about some of the advanced features of Cloudscraper, such as CAPTCHA bypass and user-agent manipulation. Furthermore, we’ll discuss the limitations of Cloudscraper and suggest the most effective alternative method.&lt;/p></description></item><item><title>How to scrape emails from any website</title><link>https://www.scrapingbee.com/blog/how-to-scrape-emails-from-any-website-for-sales-prospecting/</link><pubDate>Mon, 04 Mar 2024 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-emails-from-any-website-for-sales-prospecting/</guid><description>&lt;p>With the seemingly endless variety of platforms for instant communication these days (Slack, Whatsapp, RCS, and not to forget social media) one could easily forget about the original type of electronic communication - &lt;strong>email&lt;/strong>. Despite regular claims that a new technology will replace email, it continues to thrive and the number of messages keeps &lt;a href="https://www.statista.com/statistics/456500/daily-number-of-e-mails-worldwide/" target="_blank" >going up by about four percent&lt;/a> every year. For that reason it may not be surprising that email is a crucial tool for most businesses. Be that for keeping in touch with existing customers, or reaching out to new ones. When done right, email campaigns can prove immensely effective.&lt;/p></description></item><item><title>How to Web Scrape Airbnb data (Easy Working Code Example)</title><link>https://www.scrapingbee.com/blog/how-to-web-scrape-airbnb-data/</link><pubDate>Fri, 01 Mar 2024 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-web-scrape-airbnb-data/</guid><description>&lt;p>Imagine searching for the perfect vacation rental, only to be overwhelmed by options. Or perhaps you're a host curious about how your Airbnb listing compares to others in your area.&lt;/p>
&lt;p>&lt;a href="https://www.airbnb.com/" target="_blank" >Airbnb&lt;/a> is a popular online marketplace that connects people seeking unique accommodations with hosts offering their homes. But with so many listings, finding the ideal one can be a challenge.&lt;/p>
&lt;p>This article will explore the easiest way to scrape Airbnb listings using Python, BeautifulSoup, and ScrapingBee.&lt;/p></description></item><item><title>How to scrape websites with Google Sheets</title><link>https://www.scrapingbee.com/blog/how-to-scrape-websites-with-google-sheets/</link><pubDate>Wed, 20 Dec 2023 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/how-to-scrape-websites-with-google-sheets/</guid><description>&lt;h2 id="using-google-sheets-for-scraping">Using Google Sheets for Scraping&lt;/h2>
&lt;p>Web scraping, the process of extracting data from websites, has evolved into an indispensable tool for all kinds of industries, from market research to content aggregation. While programming languages like Python are often the go-to choice for scraping, a surprisingly efficient and accessible alternative is Google Sheets.&lt;/p>
&lt;p>Google Sheets is primarily known as a versatile spreadsheet application for creating, editing, and organizing data. However, it also offers some powerful web scraping capabilities that make it an attractive option, especially for individuals and organizations with minimal coding experience. With functions such as &lt;a href="https://support.google.com/docs/answer/3093342?hl=en&amp;amp;ref_topic=9199554&amp;amp;sjid=7580732861875045213-AP" target="_blank" >IMPORTXML&lt;/a> and &lt;a href="https://support.google.com/docs/answer/3093339?sjid=7580732861875045213-AP" target="_blank" >IMPORTHTML&lt;/a> that allow you to extract data from websites without writing any code, you can use Google Sheets as a web scraping tool.&lt;/p></description></item><item><title>Guide to Scraping E-commerce Websites</title><link>https://www.scrapingbee.com/blog/guide-to-scraping-e-commerce-websites/</link><pubDate>Mon, 11 Dec 2023 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/guide-to-scraping-e-commerce-websites/</guid><description>&lt;p>Scraping e-commerce websites has become increasingly important for companies to gain a competitive edge in the digital marketplace. It provides access to vast amounts of product data quickly and efficiently. These sites often feature a multitude of products, prices, and customer reviews that can be difficult to review manually. When the data extraction process is automated, businesses can save time and resources while obtaining comprehensive and up-to-date information about their competitors' offerings, pricing strategies, and customer sentiment.&lt;/p></description></item><item><title>Web Scraping with Kotlin</title><link>https://www.scrapingbee.com/blog/web-scraping-kotlin/</link><pubDate>Mon, 03 Apr 2023 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/web-scraping-kotlin/</guid><description>&lt;p>Kotlin is a modern, cross-platform programming language. It's open source and developed by &lt;a href="https://www.jetbrains.com/" target="_blank" >JetBrains&lt;/a>, the team behind IDEs &lt;a href="https://www.jetbrains.com/idea/" target="_blank" >IntelliJ&lt;/a>, &lt;a href="https://www.jetbrains.com/webstorm/" target="_blank" >WebStorm&lt;/a>, and &lt;a href="https://www.jetbrains.com/pycharm/" target="_blank" >PyCharm&lt;/a>. Kotlin is JVM-compatible and fully interoperable with Java. It has many features, including null safety, extension functions, higher-order functions, and coroutines.&lt;/p>
&lt;p>Released in 2011, the language has quickly risen to prominence and is currently used by &lt;a href="https://blog.jetbrains.com/kotlin/2021/09/the-actual-number-of-kotlin-developers-or-who-our-active-users-are" target="_blank" >over 5 million developers&lt;/a> across mobile, desktop, and backend. In 2017, Google made Kotlin a first-class language for developing Android apps.&lt;/p></description></item><item><title>Can I use XPath selectors in DOM Crawler?</title><link>https://www.scrapingbee.com/webscraping-questions/dom-crawler/can-i-use-xpath-selectors-in-dom-crawler/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/dom-crawler/can-i-use-xpath-selectors-in-dom-crawler/</guid><description>&lt;p>Yes, you can use XPath selectors in &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html" target="_blank" >DOM Crawler&lt;/a>. Here is some sample code that uses &lt;a href="https://docs.guzzlephp.org/en/stable/overview.html" target="_blank" >Guzzle&lt;/a> to load the &lt;a href="https://www.scrapingbee.com/" target="_blank" >ScrapingBee website&lt;/a> and then uses DOM Crawler's &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-filtering" target="_blank" >&lt;code>filterXPath&lt;/code> method&lt;/a> to extract and print the text content of the &lt;code>h1&lt;/code> tag:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">Symfony\Component\DomCrawler\Crawler&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Client&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Create a client to make the HTTP request
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$client &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">\GuzzleHttp\Client&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$response &lt;span style="color:#f92672">=&lt;/span> $client&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">get&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://www.scrapingbee.com/&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$html &lt;span style="color:#f92672">=&lt;/span> (&lt;span style="color:#a6e22e">string&lt;/span>) $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getBody&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$crawler &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Crawler&lt;/span>($html);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find the first h1 element on the page
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$h1 &lt;span style="color:#f92672">=&lt;/span> $crawler&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filterXPath&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;//h1[1]&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Get the text content of the h1 element
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$text &lt;span style="color:#f92672">=&lt;/span> $h1&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">text&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Print the text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">echo&lt;/span> $text; 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output: 
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;Tired of getting blocked while scraping the web?&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you do not want to use Guzzle, take a look at this sample code that directly passes in an HTML string:&lt;/p></description></item><item><title>Does Guzzle use cURL?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/does-guzzle-use-curl/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/does-guzzle-use-curl/</guid><description>&lt;p>Yes, &lt;a href="https://docs.guzzlephp.org/en/stable/index.html" target="_blank" >Guzzle&lt;/a> uses cURL as one of the underlying HTTP transport adapters. However, Guzzle supports multiple adapters, including cURL, PHP stream, and sockets, which can be used interchangeably depending on your needs. By default, Guzzle uses cURL as the preferred adapter, as it provides a robust and feature-rich API for sending HTTP requests and handling responses. However, Guzzle also provides an abstraction layer that allows developers to switch between adapters seamlessly, without having to modify their application code.&lt;/p></description></item><item><title>Handle Guzzle exception and get HTTP body?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/handle-guzzle-exception-and-get-http-body/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/handle-guzzle-exception-and-get-http-body/</guid><description>&lt;p>You can easily handle &lt;a href="https://docs.guzzlephp.org/en/stable/quickstart.html#exceptions" target="_blank" >Guzzle exceptions&lt;/a> and get the HTTP body of the response (if it has any) by catching &lt;code>RequestException&lt;/code>. This is a higher-level exception that covers &lt;code>BadResponseException&lt;/code>, &lt;code>TooManyRedirectsException&lt;/code>, and a few related exceptions.&lt;/p>
&lt;p>Here is how the exceptions in Guzzle depend on each other:&lt;/p>
&lt;pre tabindex="0">&lt;code>. \RuntimeException
└── TransferException (implements GuzzleException)
 ├── ConnectException (implements NetworkExceptionInterface)
 └── RequestException
 ├── BadResponseException
 │ ├── ServerException
 │ └── ClientException
 └── TooManyRedirectsException
&lt;/code>&lt;/pre>&lt;p>Here is an example of how to handle the &lt;code>RequestException&lt;/code> in Guzzle and get the HTTP body (if there is one):&lt;/p></description></item><item><title>How do I do HTTP basic authentication with Guzzle?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/how-do-i-do-http-basic-authentication-with-guzzle/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/how-do-i-do-http-basic-authentication-with-guzzle/</guid><description>&lt;p>You can easily do HTTP basic authentication with &lt;a href="https://docs.guzzlephp.org/en/stable/index.html" target="_blank" >Guzzle&lt;/a> by passing in an &lt;code>auth&lt;/code> array with the username and password as part of the options while creating the &lt;code>Client&lt;/code> object. Guzzle will make sure to use these authentication credentials with all the follow-up requests made by the &lt;code>$client&lt;/code>.&lt;/p>
&lt;p>Here is some sample code that uses an authentication endpoint at &lt;a href="https://httpbin.org/" target="_blank" >HTTP Bin&lt;/a> to demonstrate this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Client&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$client &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Client&lt;/span>([
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;auth&amp;#39;&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> [&lt;span style="color:#e6db74">&amp;#39;user&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;passwd&amp;#39;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$response &lt;span style="color:#f92672">=&lt;/span> $client&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">get&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://httpbin.org/basic-auth/user/passwd&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$body &lt;span style="color:#f92672">=&lt;/span> $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getBody&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">echo&lt;/span> $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getStatusCode&lt;/span>() &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">echo&lt;/span> $body;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// 200
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;authenticated&amp;#34;: true,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;user&amp;#34;: &amp;#34;user&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// }
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Alternatively, you can specify the &lt;code>auth&lt;/code> credentials on a per-request basis as well:&lt;/p></description></item><item><title>How do you handle client error in Guzzle?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/how-do-you-handle-client-error-in-guzzle/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/how-do-you-handle-client-error-in-guzzle/</guid><description>&lt;p>You can easily handle client errors in &lt;a href="https://docs.guzzlephp.org/en/stable/index.html" target="_blank" >Guzzle&lt;/a> by catching the thrown &lt;a href="https://docs.guzzlephp.org/en/stable/quickstart.html#exceptions" target="_blank" >exceptions&lt;/a>. You can either catch the &lt;code>RequestException&lt;/code> and it should cover most of the exceptions or you can catch the more specific &lt;code>ClientException&lt;/code> which covers only the client exceptions such as 4xx status codes.&lt;/p>
&lt;p>Here is an example of some code that results in a &lt;code>404 Not Found&lt;/code> exception that is handled by catching &lt;code>ClientException&lt;/code> in Guzzle:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Client&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Exception\ClientException&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$client &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Client&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">try&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> $response &lt;span style="color:#f92672">=&lt;/span> $client&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">get&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://httpbin.org/status/404&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Process response normally...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>} &lt;span style="color:#66d9ef">catch&lt;/span> (&lt;span style="color:#a6e22e">ClientException&lt;/span> $e) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// An exception was raised but there is an HTTP response body
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// with the exception (in case of 404 and similar errors)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> $response &lt;span style="color:#f92672">=&lt;/span> $e&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getResponse&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> $responseBodyAsString &lt;span style="color:#f92672">=&lt;/span> $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getBody&lt;/span>()&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getContents&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">echo&lt;/span> $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getStatusCode&lt;/span>() &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">echo&lt;/span> $responseBodyAsString;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// 404
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can read more about various exceptions thrown by Guzzle in the &lt;a href="https://docs.guzzlephp.org/en/stable/quickstart.html#exceptions" target="_blank" >official docs&lt;/a>.&lt;/p></description></item><item><title>How to find all links using DOM Crawler and PHP?</title><link>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-all-links-using-dom-crawler-and-php/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-all-links-using-dom-crawler-and-php/</guid><description>&lt;p>You can find all links using &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html" target="_blank" >DOM Crawler&lt;/a> and PHP by making use of either the &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-filtering" target="_blank" >&lt;code>filter&lt;/code> or the &lt;code>filterXPath&lt;/code> method&lt;/a>. Below, you can find two code samples that demonstrate how to use either of these methods. The code uses &lt;a href="https://docs.guzzlephp.org/en/stable/overview.html" target="_blank" >Guzzle&lt;/a> to load the &lt;a href="https://www.scrapingbee.com/" target="_blank" >ScrapingBee website&lt;/a> so you may want to install that as well using Composer.&lt;/p>
&lt;p>This example code uses the &lt;code>filter&lt;/code> method:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">Symfony\Component\DomCrawler\Crawler&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Client&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Create a client to make the HTTP request
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$client &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">\GuzzleHttp\Client&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$response &lt;span style="color:#f92672">=&lt;/span> $client&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">get&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://www.scrapingbee.com/&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$html &lt;span style="color:#f92672">=&lt;/span> (&lt;span style="color:#a6e22e">string&lt;/span>) $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getBody&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$crawler &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Crawler&lt;/span>($html);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all links on the page
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$links &lt;span style="color:#f92672">=&lt;/span> $crawler&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filter&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;a&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Loop over the links and print their href attributes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">foreach&lt;/span> ($links &lt;span style="color:#66d9ef">as&lt;/span> $link) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">echo&lt;/span> $link&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getAttribute&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;href&amp;#39;&lt;/span>) &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// /
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// https://app.scrapingbee.com/account/login
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// https://app.scrapingbee.com/account/register
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// /#pricing
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// /#faq
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// /blog/
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// #
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// /features/screenshot/
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// /features/google/
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This example code uses &lt;code>filterXPath&lt;/code> method:&lt;/p></description></item><item><title>How to find elements without specific attributes in DOM Crawler?</title><link>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-elements-without-specific-attributes-in-dom-crawler/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-elements-without-specific-attributes-in-dom-crawler/</guid><description>&lt;p>You have two options to find elements without specific attributes in &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html" target="_blank" >DOM Crawler&lt;/a>. The first option uses the &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-filtering" target="_blank" >&lt;code>filterXPath&lt;/code> method&lt;/a> with an XPath selector that includes a negative predicate. And the second option uses the &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-filtering" target="_blank" >&lt;code>filter&lt;/code> method&lt;/a> with the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:not" target="_blank" >&lt;code>:not&lt;/code> CSS pseudo-class&lt;/a> and the attribute selector.&lt;/p>
&lt;p>Here is some sample code that showcases the &lt;code>filterXPath&lt;/code> options and finds all &lt;code>img&lt;/code> tags that do not have an &lt;code>alt&lt;/code> attribute:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">Symfony\Component\DomCrawler\Crawler&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$html &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;lt;&amp;lt;&amp;lt;&lt;/span>&lt;span style="color:#e6db74">EOD&lt;/span>&lt;span style="color:#e6db74">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;lt;!DOCTYPE html&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;lt;html&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;lt;head&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">	&amp;lt;title&amp;gt;Example Page&amp;lt;/title&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;lt;/head&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;lt;body&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">	&amp;lt;h1&amp;gt;Hello, world!&amp;lt;/h1&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">	&amp;lt;p&amp;gt;This is an example page.&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">	&amp;lt;img src=&amp;#34;logo.png&amp;#34; /&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;img src=&amp;#34;header.png&amp;#34; alt=&amp;#34;header&amp;#34;/&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;img src=&amp;#34;yasoob.png&amp;#34; alt=&amp;#34;profile picture&amp;#34;/&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;lt;/body&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;lt;/html&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&lt;/span>&lt;span style="color:#e6db74">EOD&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$crawler &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Crawler&lt;/span>($html);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all img elements without an alt attribute
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$imagesWithoutAlt &lt;span style="color:#f92672">=&lt;/span> $crawler&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filterXPath&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;//img[not(@alt)]&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Loop over the images and print their src attributes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">foreach&lt;/span> ($imagesWithoutAlt &lt;span style="color:#66d9ef">as&lt;/span> $image) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">echo&lt;/span> $image&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getAttribute&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;src&amp;#39;&lt;/span>) &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// logo.png
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here is some sample code that uses the &lt;code>filter&lt;/code> method with &lt;code>:not&lt;/code> CSS pseudo-class instead:&lt;/p></description></item><item><title>How to find HTML elements by attribute using DOM Crawler?</title><link>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-html-elements-by-attribute-using-dom-crawler/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-html-elements-by-attribute-using-dom-crawler/</guid><description>&lt;p>You can find HTML elements by attribute using &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html" target="_blank" >DOM Crawler&lt;/a> by utilizing the &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-filtering" target="_blank" >&lt;code>filterXPath&lt;/code> method&lt;/a> with an XPath selector that includes an attribute selector. Here's an example that uses the &lt;code>filterXPath&lt;/code> method with an XPath selector to find all &lt;code>input&lt;/code> elements on &lt;a href="https://app.scrapingbee.com/account/login" target="_blank" >ScrapingBee's login page&lt;/a> that have a &lt;code>type&lt;/code> attribute equal to &lt;code>&amp;quot;email&amp;quot;&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">Symfony\Component\DomCrawler\Crawler&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Client&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Create a client to make the HTTP request
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$client &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">\GuzzleHttp\Client&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$response &lt;span style="color:#f92672">=&lt;/span> $client&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">get&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://app.scrapingbee.com/account/login&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$html &lt;span style="color:#f92672">=&lt;/span> (&lt;span style="color:#a6e22e">string&lt;/span>) $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getBody&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$crawler &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Crawler&lt;/span>($html);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all input elements with a type attribute equal to &amp;#34;email&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$textInputs &lt;span style="color:#f92672">=&lt;/span> $crawler&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filterXPath&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;//input[@type=&amp;#34;email&amp;#34;]&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Loop over the inputs and print their values
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">foreach&lt;/span> ($textInputs &lt;span style="color:#66d9ef">as&lt;/span> $input) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">echo&lt;/span> $input&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getAttribute&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;placeholder&amp;#39;&lt;/span>) &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Enter your email
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> This example uses Guzzle so you may have to install it.&lt;/p></description></item><item><title>How to find HTML elements by class with DOM Crawler?</title><link>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-html-elements-by-class-with-dom-crawler/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-html-elements-by-class-with-dom-crawler/</guid><description>&lt;p>You can find HTML elements by class with &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html" target="_blank" >DOM Crawler&lt;/a> by making use of the &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-filtering" target="_blank" >&lt;code>filter&lt;/code> method&lt;/a> with a [CSS selector](&lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/CSS_Selector" target="_blank" >CSS selectors&lt;/a>) that includes the class name. Here is some sample code that uses &lt;a href="https://docs.guzzlephp.org/en/stable/overview.html" target="_blank" >Guzzle&lt;/a> to load &lt;a href="https://www.scrapingbee.com/" target="_blank" >ScrapingBee's homepage&lt;/a> and then uses the &lt;code>filter&lt;/code> method to extract the tag with the class of &lt;code>mb-[33px]&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">Symfony\Component\DomCrawler\Crawler&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Client&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Create a client to make the HTTP request
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$client &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">\GuzzleHttp\Client&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$response &lt;span style="color:#f92672">=&lt;/span> $client&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">get&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://scrapingbee.com/&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$html &lt;span style="color:#f92672">=&lt;/span> (&lt;span style="color:#a6e22e">string&lt;/span>) $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getBody&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$crawler &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Crawler&lt;/span>($html);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all elements with the class &amp;#34;mb-[33px]&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$h1Tag &lt;span style="color:#f92672">=&lt;/span> $crawler&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filter&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;.mb-[33px]&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Loop over the elements and print their text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">foreach&lt;/span> ($h1Tag &lt;span style="color:#66d9ef">as&lt;/span> $element) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">echo&lt;/span> $element&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">textContent&lt;/span> &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Tired of getting blocked while scraping the web?
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Try ScrapingBee for Free
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> This example uses Guzzle so you may have to install it.&lt;/p></description></item><item><title>How to find HTML elements by multiple tags with DOM Crawler?</title><link>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-html-elements-by-multiple-tags-with-dom-crawler/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-html-elements-by-multiple-tags-with-dom-crawler/</guid><description>&lt;p>You can find HTML elements by multiple tags with &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html" target="_blank" >DOM Crawler&lt;/a> by pairing the &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-filtering" target="_blank" >&lt;code>filter&lt;/code> method&lt;/a> with a &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/CSS_Selector" target="_blank" >CSS selector&lt;/a> that includes multiple tag names separated by commas. Here's an example that loads &lt;a href="https://www.scrapingbee.com/" target="_blank" >ScrapingBee's homepage&lt;/a> using &lt;a href="https://docs.guzzlephp.org/en/stable/overview.html" target="_blank" >Guzzle&lt;/a> and then prints the text of all &lt;code>h1&lt;/code> and &lt;code>h2&lt;/code> tags using Dom Crawler:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">Symfony\Component\DomCrawler\Crawler&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Client&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Create a client to make the HTTP request
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$client &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">\GuzzleHttp\Client&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$response &lt;span style="color:#f92672">=&lt;/span> $client&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">get&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://scrapingbee.com/&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$html &lt;span style="color:#f92672">=&lt;/span> (&lt;span style="color:#a6e22e">string&lt;/span>) $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getBody&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$crawler &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Crawler&lt;/span>($html);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all h1 and h2 headings on the page
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$headings &lt;span style="color:#f92672">=&lt;/span> $crawler&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filter&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;h1, h2&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Loop over the headings and print their text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">foreach&lt;/span> ($headings &lt;span style="color:#66d9ef">as&lt;/span> $element) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">echo&lt;/span> $element&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">textContent&lt;/span> &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Tired of getting blocked while scraping the web?
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Render your web page as if it were a real browser.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Render JavaScript to scrape any website.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Rotate proxies to bypass rate limiting.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Simple, transparent pricing.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Developers are asking...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Who are we?
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Contact us
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Ready to get started?
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to find sibling HTML nodes using DOM Crawler and PHP?</title><link>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-sibling-html-nodes-using-dom-crawler-and-php/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-find-sibling-html-nodes-using-dom-crawler-and-php/</guid><description>&lt;p>You can find sibling HTML nodes using &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html" target="_blank" >DOM Crawler&lt;/a> and PHP by utilizing the &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-traversing" target="_blank" >&lt;code>siblings&lt;/code> method&lt;/a> of a &lt;code>Crawler&lt;/code> object. Here is some sample code that extracts the first &lt;code>p&lt;/code> node, then extracts its siblings using the &lt;code>siblings&lt;/code> method, and finally loops over these sibling nodes and prints their text content:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">Symfony\Component\DomCrawler\Crawler&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$html &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;lt;&amp;lt;&amp;lt;&lt;/span>&lt;span style="color:#e6db74">EOD&lt;/span>&lt;span style="color:#e6db74">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;This is the first paragraph.&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;This is the second paragraph.&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;This is the third paragraph.&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&lt;/span>&lt;span style="color:#e6db74">EOD&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$crawler &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Crawler&lt;/span>($html);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find the first p element
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$pElement &lt;span style="color:#f92672">=&lt;/span> $crawler&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filter&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;p&amp;#39;&lt;/span>)&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">first&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all sibling elements of the p element
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$siblings &lt;span style="color:#f92672">=&lt;/span> $pElement&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">siblings&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Loop over the siblings and print their text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">foreach&lt;/span> ($siblings &lt;span style="color:#66d9ef">as&lt;/span> $sibling) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">echo&lt;/span> $sibling&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">textContent&lt;/span> &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This is the second paragraph.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This is the third paragraph.
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to ignore SSL certificate error with Guzzle?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/how-to-ignore-ssl-certificate-error-with-guzzle/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/how-to-ignore-ssl-certificate-error-with-guzzle/</guid><description>&lt;p>You can easily ignore SSL certificate errors with &lt;a href="https://docs.guzzlephp.org/en/stable/index.html" target="_blank" >Guzzle&lt;/a> by setting the &lt;code>verify&lt;/code> option to &lt;code>false&lt;/code> while creating a new Guzzle Client object.&lt;/p>
&lt;p>Here is some sample code that creates a new Guzzle client with &lt;code>verify&lt;/code> set to &lt;code>false&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Client&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$client &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Client&lt;/span>([&lt;span style="color:#e6db74">&amp;#39;verify&amp;#39;&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#66d9ef">false&lt;/span>]);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$response &lt;span style="color:#f92672">=&lt;/span> $client&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">get&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://example.com/&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can read more about the &lt;code>verify&lt;/code> option in the &lt;a href="https://docs.guzzlephp.org/en/5.3/clients.html#verify" target="_blank" >official docs&lt;/a>.&lt;/p>
&lt;p>Do keep in mind that disabling SSL verification can compromise security and should be used with caution. It is generally recommended to only disable SSL verification for testing or development purposes and to enable it in production.&lt;/p></description></item><item><title>How to scrape tables with DOM Crawler?</title><link>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-scrape-tables-with-dom-crawler/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-scrape-tables-with-dom-crawler/</guid><description>&lt;p>You can scrape tables with &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html" target="_blank" >DOM Crawler&lt;/a> by combining the regular &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/CSS_Selector" target="_blank" >CSS selectors&lt;/a> with the &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-filtering" target="_blank" >&lt;code>filter&lt;/code>&lt;/a> and &lt;code>each&lt;/code> methods to iterate over the rows and cells of the table.&lt;/p>
&lt;p>Here is some sample code that demonstrates how to scrape a simple HTML table using DOM Crawler:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">Symfony\Component\DomCrawler\Crawler&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$html &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;lt;&amp;lt;&amp;lt;&lt;/span>&lt;span style="color:#e6db74">EOD&lt;/span>&lt;span style="color:#e6db74">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;table&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;th&amp;gt;Age&amp;lt;/th&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;th&amp;gt;Occupation&amp;lt;/th&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;Yasoob&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;35&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;Software Engineer&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;Pierre&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;28&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;Product Manager&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/table&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&lt;/span>&lt;span style="color:#e6db74">EOD&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$crawler &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Crawler&lt;/span>($html);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find the table element
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$table &lt;span style="color:#f92672">=&lt;/span> $crawler&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filter&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;table&amp;#39;&lt;/span>)&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">first&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Loop over the rows of the table
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$table&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filter&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;tr&amp;#39;&lt;/span>)&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">each&lt;/span>(&lt;span style="color:#66d9ef">function&lt;/span> ($row, $i) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Loop over the columns of the row
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> $row&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filter&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;td&amp;#39;&lt;/span>)&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">each&lt;/span>(&lt;span style="color:#66d9ef">function&lt;/span> ($column, $j) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Print the text content of the column
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">echo&lt;/span> $column&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">text&lt;/span>() &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> });
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>});
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Yasoob
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// 35
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Software Engineer
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Pierre
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// 28
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Product Manager
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to select values between two nodes in DOM Crawler and PHP?</title><link>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-select-values-between-two-nodes-in-dom-crawler-and-php/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/dom-crawler/how-to-select-values-between-two-nodes-in-dom-crawler-and-php/</guid><description>&lt;p>You can select values between two nodes in &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html" target="_blank" >DOM Crawler&lt;/a> by using the &lt;a href="https://symfony.com/doc/current/components/dom_crawler.html#node-filtering" target="_blank" >&lt;code>filterXPath&lt;/code> method&lt;/a> with an XPath expression that selects the nodes between the two nodes you want to use as anchors.&lt;/p>
&lt;p>Here is some sample code that prints the text content of all the nodes between the &lt;code>h1&lt;/code> and &lt;code>h2&lt;/code> nodes:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">Symfony\Component\DomCrawler\Crawler&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$html &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;lt;&amp;lt;&amp;lt;&lt;/span>&lt;span style="color:#e6db74">EOD&lt;/span>&lt;span style="color:#e6db74">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;h1&amp;gt;Header 1&amp;lt;/h1&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;Paragraph 1&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;Paragraph 2&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;h2&amp;gt;Header 2&amp;lt;/h2&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;Paragraph 3&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&lt;/span>&lt;span style="color:#e6db74">EOD&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$crawler &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Crawler&lt;/span>($html);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all nodes between the h1 and h2 elements
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>$nodesBetweenHeadings &lt;span style="color:#f92672">=&lt;/span> $crawler&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">filterXPath&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;//h1/
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">following-sibling::h2/
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">	preceding-sibling::*[
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">		preceding-sibling::h1
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">	]&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Loop over the nodes and print their text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">foreach&lt;/span> ($nodesBetweenHeadings &lt;span style="color:#66d9ef">as&lt;/span> $node) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">echo&lt;/span> $node&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">textContent&lt;/span> &lt;span style="color:#f92672">.&lt;/span> &lt;span style="color:#a6e22e">PHP_EOL&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The XPath expression used above can be read like this:&lt;/p></description></item><item><title>How to send a POST request in JSON with Guzzle?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/how-to-send-a-post-request-in-json-with-guzzle/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/how-to-send-a-post-request-in-json-with-guzzle/</guid><description>&lt;p>You can send a POST request with JSON data in Guzzle by passing in the JSON data as an array of key-value pairs via the &lt;code>json&lt;/code> option.&lt;/p>
&lt;p>Here is some sample code that sends a request to &lt;a href="https://httpbin.org/" target="_blank" >HTTP Bin&lt;/a> with some sample JSON data:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">use&lt;/span> &lt;span style="color:#a6e22e">GuzzleHttp\Client&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$client &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">new&lt;/span> &lt;span style="color:#a6e22e">Client&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$response &lt;span style="color:#f92672">=&lt;/span> $client&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">post&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://httpbin.org/post&amp;#39;&lt;/span>, [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#34;json&amp;#34;&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;key1&amp;#39;&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#e6db74">&amp;#39;value1&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;key2&amp;#39;&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#e6db74">&amp;#39;value2&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">echo&lt;/span> $response&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#a6e22e">getBody&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;args&amp;#34;: {},
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;data&amp;#34;: &amp;#34;{\&amp;#34;key1\&amp;#34;:\&amp;#34;value1\&amp;#34;,\&amp;#34;key2\&amp;#34;:\&amp;#34;value2\&amp;#34;}&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;files&amp;#34;: {},
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;form&amp;#34;: {},
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;headers&amp;#34;: {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;Content-Length&amp;#34;: &amp;#34;33&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;Content-Type&amp;#34;: &amp;#34;application/json&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;Host&amp;#34;: &amp;#34;httpbin.org&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;User-Agent&amp;#34;: &amp;#34;GuzzleHttp/7&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;X-Amzn-Trace-Id&amp;#34;: &amp;#34;Root=1-63fa252d-60bf3c1b2258ff5903bdd116&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// },
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;json&amp;#34;: {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;key1&amp;#34;: &amp;#34;value1&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;key2&amp;#34;: &amp;#34;value2&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// },
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;origin&amp;#34;: &amp;#34;119.73.117.169&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// &amp;#34;url&amp;#34;: &amp;#34;https://httpbin.org/post&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// }
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can read more about it in the &lt;a href="http://docs.guzzlephp.org/en/latest/request-options.html#json" target="_blank" >official Guzzle docs&lt;/a>.&lt;/p></description></item><item><title>How to use proxy with authentication with Guzzle?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/how-to-use-proxy-with-authentication-with-guzzle/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/how-to-use-proxy-with-authentication-with-guzzle/</guid><description>&lt;p>You can use an authenticated proxy with &lt;a href="https://docs.guzzlephp.org/en/stable/index.html" target="_blank" >Guzzle&lt;/a> very easily. You just need to pass in a &lt;code>proxy&lt;/code> option when either creating a new &lt;code>Client&lt;/code> object or when making the actual request. If the proxy uses authentication, just include the authentication options as part of the proxy string.&lt;/p>
&lt;p>Here is what a proxy string with authentication parameters will look like:&lt;/p>
&lt;pre tabindex="0">&lt;code>http://username:password@proxyendpoint.com:port
&lt;/code>&lt;/pre>&lt;p>Make sure to replace the &lt;code>username&lt;/code>, &lt;code>password&lt;/code>, &lt;code>proxyendpoint.com&lt;/code>, and &lt;code>port&lt;/code> with the required values based on the proxy you are using.&lt;/p></description></item><item><title>Is Guzzle a built-in PHP library?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/is-guzzle-a-built-in-php-library/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/is-guzzle-a-built-in-php-library/</guid><description>&lt;p>No, &lt;a href="https://github.com/guzzle/guzzle" target="_blank" >Guzzle&lt;/a> is not a built-in PHP library. It is a third-party library that needs to be installed separately.&lt;/p>
&lt;p>To use Guzzle in your PHP application, you need to first install it using a package manager such as &lt;a href="https://getcomposer.org/" target="_blank" >Composer&lt;/a>, which is the recommended way of managing dependencies in PHP projects. Once you have installed Guzzle, you can then include it in your PHP code and use its API to send HTTP requests and handle responses.&lt;/p></description></item><item><title>Is PHP Guzzle deprecated?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/is-php-guzzle-deprecated/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/is-php-guzzle-deprecated/</guid><description>&lt;p>No, &lt;a href="https://github.com/guzzle/guzzle" target="_blank" >Guzzle&lt;/a> is not deprecated. It is still actively maintained and supported by the developers.&lt;/p>
&lt;p>Although there have been some changes in the PHP ecosystem in recent years, such as the introduction of the PSR-7 HTTP message interfaces, Guzzle has adapted to these changes and continues to provide a modern and flexible API for working with HTTP.&lt;/p>
&lt;p>If you don't know what Guzzle is, it is a popular PHP library for sending HTTP requests and handling responses, and it is widely used in many PHP projects. The library provides a robust and feature-rich API for interacting with HTTP services, making it an essential tool for PHP developers who need to work with web APIs or other HTTP-based services.&lt;/p></description></item><item><title>What is Guzzle used for in PHP?</title><link>https://www.scrapingbee.com/webscraping-questions/guzzle/what-is-guzzle-used-for-in-php/</link><pubDate>Fri, 24 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/guzzle/what-is-guzzle-used-for-in-php/</guid><description>&lt;p>&lt;a href="https://github.com/guzzle/guzzle" target="_blank" >Guzzle&lt;/a> is a popular PHP library for sending HTTP requests and handling responses. It provides a flexible and feature-rich API for working with HTTP services and APIs, making it a valuable tool for many PHP developers.&lt;/p>
&lt;p>Here are some of the main use cases for Guzzle in PHP:&lt;/p>
&lt;ol>
&lt;li>Sending HTTP requests: Guzzle allows you to easily send HTTP requests using a variety of HTTP methods (GET, POST, PUT, DELETE, etc.) and set headers, query parameters, request bodies, and other options.&lt;/li>
&lt;li>Handling HTTP responses: Guzzle provides a powerful and flexible API for handling HTTP responses, including support for response headers, status codes, response bodies, and error handling.&lt;/li>
&lt;li>Working with web APIs: Guzzle is often used to interact with web APIs, allowing you to easily consume and manipulate data from a remote API in your PHP application.&lt;/li>
&lt;li>Testing HTTP services: Guzzle can also be used for testing HTTP services and APIs, providing a convenient and flexible way to write automated tests for your application's HTTP interactions.&lt;/li>
&lt;/ol>
&lt;p>If you are working with any sort of remote HTTP requests in your PHP application, chances are that you will end up using Guzzle.&lt;/p></description></item><item><title>Can I use XPath selectors in Cheerio?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/can-i-use-xpath-selectors-in-cheerio/</link><pubDate>Thu, 23 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/can-i-use-xpath-selectors-in-cheerio/</guid><description>&lt;p>No, you can not use XPath selectors in &lt;a href="https://cheerio.js.org/" target="_blank" >Cheerio&lt;/a>. According to &lt;a href="https://github.com/cheeriojs/cheerio/issues/152" target="_blank" >these&lt;/a> &lt;a href="https://github.com/cheeriojs/cheerio/issues/1098" target="_blank" >GitHub issues&lt;/a>, there is no plan to support XPaths in Cheerio.&lt;/p>
&lt;p>&lt;img src="https://www.scrapingbee.com/images/questions/github-issue.png" alt="GitHub Issue">&lt;/p>
&lt;p>However, if you simply want to work with XML documents and parse those using Cheerio, it is possible. Here is some sample code for parsing XML using Cheerio.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">xml&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;bookstore&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;book category=&amp;#34;web&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;title lang=&amp;#34;en&amp;#34;&amp;gt;Practical Python Projects&amp;lt;/title&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;author&amp;gt;Yasoob Khalid&amp;lt;/author&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;year&amp;gt;2022&amp;lt;/year&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;price&amp;gt;39.95&amp;lt;/price&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/book&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;book category=&amp;#34;web&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;title lang=&amp;#34;en&amp;#34;&amp;gt;Intermediate Python&amp;lt;/title&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;author&amp;gt;Yasoob Khalid&amp;lt;/author&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;year&amp;gt;2018&amp;lt;/year&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;price&amp;gt;29.99&amp;lt;/price&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/book&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/bookstore&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">`&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the XML document as a Cheerio object
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">xml&lt;/span>, { &lt;span style="color:#a6e22e">xml&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#66d9ef">true&lt;/span> });
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Select all book titles 
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">titles&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;book &amp;gt; title&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Print the text content of each title
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">titles&lt;/span>.&lt;span style="color:#a6e22e">each&lt;/span>((&lt;span style="color:#a6e22e">i&lt;/span>, &lt;span style="color:#a6e22e">title&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">title&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>});
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Practical Python Projects
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Intermediate Python
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to find elements without specific attributes in Cheerio?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-elements-without-specific-attributes-in-cheerio/</link><pubDate>Thu, 23 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-elements-without-specific-attributes-in-cheerio/</guid><description>&lt;p>You can find elements without specific attributes in &lt;a href="https://cheerio.js.org/" target="_blank" >Cheerio&lt;/a> by using the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:not" target="_blank" >&lt;code>:not&lt;/code> CSS pseudo-class&lt;/a> and the attribute selector.&lt;/p>
&lt;p>Here's an example that demonstrates how to find all &lt;code>div&lt;/code> elements without a &lt;code>class&lt;/code> attribute using Cheerio:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">html&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div class=&amp;#34;content&amp;#34;&amp;gt;This div has a class attribute&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;This div does not have a class attribute&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div class=&amp;#34;footer&amp;#34;&amp;gt;This div also has a class attribute&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">`&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML content into a Cheerio object
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">html&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all div elements without a class attribute using the :not pseudo-class and the attribute selector
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">divsWithoutClass&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;div:not([class])&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Iterate over each div element without a class attribute and print its text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">divsWithoutClass&lt;/span>.&lt;span style="color:#a6e22e">each&lt;/span>((&lt;span style="color:#a6e22e">i&lt;/span>, &lt;span style="color:#a6e22e">div&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">div&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>});
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output: 
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This div does not have a class attribute
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to find HTML elements by attribute using Cheerio?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-html-elements-by-attribute-using-cheerio/</link><pubDate>Thu, 23 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-html-elements-by-attribute-using-cheerio/</guid><description>&lt;p>You can find HTML elements by attribute in &lt;a href="https://cheerio.js.org/" target="_blank" >Cheerio&lt;/a> using the attribute selector.&lt;/p>
&lt;p>Here's some sample code that demonstrates how to find all div elements with a data-attribute of &amp;quot;example&amp;quot; using Cheerio:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">html&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div data-example=&amp;#34;1&amp;#34;&amp;gt;This div has a data-example attribute with a value of 1&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div data-example=&amp;#34;2&amp;#34;&amp;gt;This div has a data-example attribute with a value of 2&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;This div does not have a data-example attribute&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">`&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML content into a Cheerio object
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">html&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all div elements with a data-example attribute of &amp;#34;1&amp;#34; using the attribute selector
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">divsWithAttribute&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;div[data-example=&amp;#34;1&amp;#34;]&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Iterate over each div element with a data-example attribute of &amp;#34;1&amp;#34; and print its text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">divsWithAttribute&lt;/span>.&lt;span style="color:#a6e22e">each&lt;/span>((&lt;span style="color:#a6e22e">i&lt;/span>, &lt;span style="color:#a6e22e">div&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">div&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>});
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output: 
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This div has a data-example attribute with a value of 1
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to find HTML elements by class with Cheerio?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-html-elements-by-class-with-cheerio/</link><pubDate>Thu, 23 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-html-elements-by-class-with-cheerio/</guid><description>&lt;p>You can find HTML elements by class in &lt;a href="https://cheerio.js.org/" target="_blank" >Cheerio&lt;/a> by using the class selector.&lt;/p>
&lt;p>Here's some sample code that demonstrates how to find all &lt;code>div&lt;/code> elements with a &lt;code>class&lt;/code> of &lt;code>example&lt;/code> using Cheerio:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">html&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div class=&amp;#34;example&amp;#34;&amp;gt;This div has a class of example&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div class=&amp;#34;example&amp;#34;&amp;gt;This div also has a class of example&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;This div does not have a class of example&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">`&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML content into a Cheerio object
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">html&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all div elements with a class of &amp;#34;example&amp;#34; using the class selector
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">divsWithClass&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;div.example&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Iterate over each div element with a class of &amp;#34;example&amp;#34; and print its text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">divsWithClass&lt;/span>.&lt;span style="color:#a6e22e">each&lt;/span>((&lt;span style="color:#a6e22e">i&lt;/span>, &lt;span style="color:#a6e22e">div&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">div&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>});
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output: 
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This div has a class of example
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This div also has a class of example
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to find HTML elements by multiple tags with Cheerio?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-html-elements-by-multiple-tags-with-cheerio/</link><pubDate>Thu, 23 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-html-elements-by-multiple-tags-with-cheerio/</guid><description>&lt;p>You can find HTML elements by multiple tags in &lt;a href="https://cheerio.js.org/" target="_blank" >Cheerio&lt;/a> by separating the tag selectors with a &lt;code>,&lt;/code>.&lt;/p>
&lt;p>Here's some sample code that demonstrates how to find all &lt;code>div&lt;/code> and &lt;code>span&lt;/code> elements using Cheerio:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">html&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;This is a div element&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;span&amp;gt;This is a span element&amp;lt;/span&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;This is another div element&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">`&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML content into a Cheerio object
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">html&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all div and span elements
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">divsAndSpans&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;div, span&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Iterate over each div and span element and print its text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">divsAndSpans&lt;/span>.&lt;span style="color:#a6e22e">each&lt;/span>((&lt;span style="color:#a6e22e">i&lt;/span>, &lt;span style="color:#a6e22e">element&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">element&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>});
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This is a div element
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This is a span element
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This is another div element
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to find sibling HTML nodes using Cheerio and NodeJS?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-sibling-html-nodes-using-cheerio-and-nodejs/</link><pubDate>Thu, 23 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-find-sibling-html-nodes-using-cheerio-and-nodejs/</guid><description>&lt;p>You can find sibling HTML nodes using &lt;a href="https://cheerio.js.org/" target="_blank" >Cheerio&lt;/a> and Node.js by utilizing the &lt;code>siblings&lt;/code> method of a Cheerio object.&lt;/p>
&lt;p>Here's some sample code that demonstrates how to find all sibling elements of a given element using Cheerio:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">html&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;This is the first paragraph.&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;This is the second paragraph.&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;This is the third paragraph.&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">`&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML content into a Cheerio object
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">html&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Select the second paragraph element
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">secondParagraph&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;p:nth-of-type(2)&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Find all sibling elements of the second paragraph using the siblings method
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">siblingElements&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">secondParagraph&lt;/span>.&lt;span style="color:#a6e22e">siblings&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Iterate over each sibling element and print its text content
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">siblingElements&lt;/span>.&lt;span style="color:#a6e22e">each&lt;/span>((&lt;span style="color:#a6e22e">i&lt;/span>, &lt;span style="color:#a6e22e">element&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">element&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>());
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>});
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This is the first paragraph.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// This is the third paragraph.
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> &lt;code>p:nth-of-type(2)&lt;/code> is used to select the second paragraph element. You can replace it with any other appropriate selector.&lt;/p></description></item><item><title>How to scrape tables with Cheerio?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-scrape-tables-with-cheerio/</link><pubDate>Thu, 23 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-scrape-tables-with-cheerio/</guid><description>&lt;p>You can scrape tables with &lt;a href="https://cheerio.js.org/" target="_blank" >Cheerio&lt;/a> by combining the regular &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/CSS_Selector" target="_blank" >CSS selectors&lt;/a> with the &lt;a href="https://cheerio.js.org/docs/basics/traversing/#find" target="_blank" >&lt;code>find&lt;/code>&lt;/a> and &lt;code>each&lt;/code> methods to iterate over the rows and cells of the table.&lt;/p>
&lt;p>Here's some sample code that demonstrates how to scrape a simple HTML table using Cheerio:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">html&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;table&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;th&amp;gt;Age&amp;lt;/th&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;th&amp;gt;Occupation&amp;lt;/th&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;Yasoob&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;35&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;Software Engineer&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;Pierre&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;28&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;td&amp;gt;Product Manager&amp;lt;/td&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/tr&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/table&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">`&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML content into a Cheerio object
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">html&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Select the table element
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">table&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;table&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Initialize an empty array to store the table data
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">tableData&lt;/span> &lt;span style="color:#f92672">=&lt;/span> [];
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Iterate over each row of the table using the find and each methods
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">table&lt;/span>.&lt;span style="color:#a6e22e">find&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;tr&amp;#39;&lt;/span>).&lt;span style="color:#a6e22e">each&lt;/span>((&lt;span style="color:#a6e22e">i&lt;/span>, &lt;span style="color:#a6e22e">row&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Initialize an empty object to store the row data
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">rowData&lt;/span> &lt;span style="color:#f92672">=&lt;/span> {};
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Iterate over each cell of the row using the find and each methods
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">row&lt;/span>).&lt;span style="color:#a6e22e">find&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;td, th&amp;#39;&lt;/span>).&lt;span style="color:#a6e22e">each&lt;/span>((&lt;span style="color:#a6e22e">j&lt;/span>, &lt;span style="color:#a6e22e">cell&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Add the cell data to the row data object
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#a6e22e">rowData&lt;/span>[&lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">cell&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>()] &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">j&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> });
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Add the row data to the table data array
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#a6e22e">tableData&lt;/span>.&lt;span style="color:#a6e22e">push&lt;/span>(&lt;span style="color:#a6e22e">rowData&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>});
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Print the table data
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">tableData&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// [
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// { Name: 0, Age: 1, Occupation: 2 },
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// { &amp;#39;35&amp;#39;: 1, Yasoob: 0, &amp;#39;Software Engineer&amp;#39;: 2 },
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// { &amp;#39;28&amp;#39;: 1, Pierre: 0, &amp;#39;Product Manager&amp;#39;: 2 }
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// ]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to select values between two nodes in Cheerio and Node.js?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-select-values-between-two-nodes-in-cheerio-and-nodejs/</link><pubDate>Thu, 23 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/how-to-select-values-between-two-nodes-in-cheerio-and-nodejs/</guid><description>&lt;p>You can select values between two nodes in &lt;a href="https://cheerio.js.org/" target="_blank" >Cheerio&lt;/a> and Node.js by making use of a combination of the &lt;a href="https://cheerio.js.org/docs/basics/traversing/#nextuntil-and-prevuntil" target="_blank" >&lt;code>nextUntil&lt;/code>&lt;/a> and &lt;code>map&lt;/code> methods to iterate over the elements between the two nodes and extract the desired values.&lt;/p>
&lt;p>Here's an example that demonstrates how to select values between two nodes in a simple HTML structure using Cheerio:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">html&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">`
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;h1&amp;gt;Header 1&amp;lt;/h1&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;Paragraph 1&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;Paragraph 2&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;h2&amp;gt;Header 2&amp;lt;/h2&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;p&amp;gt;Paragraph 3&amp;lt;/p&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">`&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Load the HTML content into a Cheerio object
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">html&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Select the first and second nodes using the CSS selector
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">startNode&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;h1&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">endNode&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;h2&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Use the nextUntil method to select all elements between the start and end nodes
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">betweenNodes&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">startNode&lt;/span>.&lt;span style="color:#a6e22e">nextUntil&lt;/span>(&lt;span style="color:#a6e22e">endNode&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Use the map method to extract the text content of the elements
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">valuesBetweenNodes&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">betweenNodes&lt;/span>.&lt;span style="color:#a6e22e">map&lt;/span>((&lt;span style="color:#a6e22e">i&lt;/span>, &lt;span style="color:#a6e22e">el&lt;/span>) =&amp;gt; &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">el&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>()).&lt;span style="color:#a6e22e">get&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Print the selected values
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">valuesBetweenNodes&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// Output:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">// [ &amp;#39;Paragraph 1&amp;#39;, &amp;#39;Paragraph 2&amp;#39; ]
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to load local files in Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-load-local-files-in-puppeteer/</link><pubDate>Wed, 15 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-load-local-files-in-puppeteer/</guid><description>&lt;p>You can load local files in Puppeteer by using the same &lt;code>page.goto&lt;/code> method that you use for URLs, but you need to provide it with the file URL using the file protocol (&lt;code>file://&lt;/code>). The file path must be an absolute path.&lt;/p>
&lt;p>Here's some example code that opens a file located at &lt;code>/Users/yasoob/Desktop/ScrapingBee/index.html&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">puppeteer&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;puppeteer&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">filePath&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;file://&amp;#39;&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#e6db74">&amp;#39;/Users/yasoob/Desktop/ScrapingBee/index.html&amp;#39;&lt;/span>;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">async&lt;/span> &lt;span style="color:#66d9ef">function&lt;/span> &lt;span style="color:#a6e22e">loadLocalFile&lt;/span>() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">browser&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">puppeteer&lt;/span>.&lt;span style="color:#a6e22e">launch&lt;/span>({
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">headless&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> });
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">page&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">browser&lt;/span>.&lt;span style="color:#a6e22e">newPage&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">page&lt;/span>.&lt;span style="color:#66d9ef">goto&lt;/span>(&lt;span style="color:#a6e22e">filePath&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">loadLocalFile&lt;/span>();
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It's important to note that loading local files in most browsers is subject to the same-origin policy, which means that the loaded file should come from the same origin as the web page running the JavaScript code. Additionally, it is important to make sure that the path being accessed is accessible by the running script. You can read more about these security implications in &lt;a href="https://stackoverflow.com/questions/29371600/chrome-browser-security-implications-of-allow-file-access-from-files" target="_blank" >this StackOverflow answer&lt;/a>.&lt;/p></description></item><item><title>How to run Puppeteer in Jupyter notebooks?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-run-puppeteer-in-jupyter-notebooks/</link><pubDate>Wed, 15 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-run-puppeteer-in-jupyter-notebooks/</guid><description>&lt;p>You can run Puppeteer in Jupyter notebook by using a JavaScript kernel instead of the default Python one. There is the famous &lt;a href="https://github.com/n-riesco/ijavascript" target="_blank" >IJavaScript&lt;/a> kernel but that does not work with Puppeteer. The reason is that Puppeteer is async and needs a kernel that supports that. You can instead use &lt;a href="https://www.npmjs.com/package/ijavascript-await" target="_blank" >this patched version&lt;/a> of the IJavaScript kernel that adds this async support.&lt;/p>
&lt;p>Assuming that you already have &lt;code>jupyter&lt;/code> installed, you can install the &lt;a href="https://www.npmjs.com/package/ijavascript-await" target="_blank" >patched IJavaScript&lt;/a> kernel using npm:&lt;/p></description></item><item><title>How to wait for page to load in Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-wait-for-page-to-load-in-puppeteer/</link><pubDate>Wed, 15 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-wait-for-page-to-load-in-puppeteer/</guid><description>&lt;p>You can wait for the page to load in Puppeteer by using the &lt;code>waitForSelector&lt;/code> method. This will pause execution until a specific element shows up on the page and indicates that the page has fully loaded. This feature is extremely helpful while performing web scraping on dynamic websites.&lt;/p>
&lt;p>Here is some sample code that opens up &lt;a href="https://scrapingbee.com" target="_blank" >ScrapingBee homepage&lt;/a> and waits for the content section to show up:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">puppeteer&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;puppeteer&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">async&lt;/span> &lt;span style="color:#66d9ef">function&lt;/span> &lt;span style="color:#a6e22e">waitForSelector&lt;/span>() {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">browser&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">puppeteer&lt;/span>.&lt;span style="color:#a6e22e">launch&lt;/span>({
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">headless&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> });
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">page&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">browser&lt;/span>.&lt;span style="color:#a6e22e">newPage&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">page&lt;/span>.&lt;span style="color:#66d9ef">goto&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com&amp;#34;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">await&lt;/span> &lt;span style="color:#a6e22e">page&lt;/span>.&lt;span style="color:#a6e22e">waitForSelector&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;#content&amp;#39;&lt;/span>, { &lt;span style="color:#a6e22e">timeout&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">5_000&lt;/span> });
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Do whatever you want with the page next
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">waitForSelector&lt;/span>();
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can read more about the &lt;code>waitForSelector&lt;/code> API in the &lt;a href="https://pptr.dev/api/puppeteer.page.waitforselector" target="_blank" >official docs&lt;/a>.&lt;/p></description></item><item><title>Who owns Playwright?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/who-owns-playwright/</link><pubDate>Wed, 15 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/who-owns-playwright/</guid><description>&lt;p>Playwright is an open-source web automation framework, which is developed and maintained by Microsoft, as well as a community of contributors from all around the world. The development of Playwright takes place on GitHub and the contributors have to sign a &lt;a href="https://cla.opensource.microsoft.com/" target="_blank" >one-time Contributor License Agreement&lt;/a> before making contributions to the project. The project has an Apache 2.0 License which allows users to freely use the framework in their private as well as commercial projects.&lt;/p></description></item><item><title>Why do we need Playwright?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/why-do-we-need-playwright/</link><pubDate>Wed, 15 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/why-do-we-need-playwright/</guid><description>&lt;p>Playwright is a web automation framework that allows developers to automate web applications and browsers, much like Selenium and Puppeteer. It provides a powerful, flexible, and reliable way to automate end-to-end testing, browser automation, and web scraping in &lt;a href="https://playwright.dev/python/docs/intro" target="_blank" >Python&lt;/a>, &lt;a href="https://playwright.dev/dotnet/docs/intro" target="_blank" >.NET&lt;/a>, &lt;a href="https://playwright.dev/java/docs/intro" target="_blank" >Java&lt;/a>, or &lt;a href="https://github.com/microsoft/playwright" target="_blank" >Node.js&lt;/a>.&lt;/p>
&lt;p>One of the major features of Playwright is its ability to support multiple web browsers, such as Chromium, Firefox, and Webkit-based Safari, out of the box, which allows developers to test their web apps on different browsers with minimal effort.&lt;/p></description></item><item><title>How do I read a JSON in Python?</title><link>https://www.scrapingbee.com/webscraping-questions/json/how-do-i-read-a-json-in-python/</link><pubDate>Sat, 11 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/json/how-do-i-read-a-json-in-python/</guid><description>&lt;p>To read a JSON file in Python, you can use the built-in &lt;code>json&lt;/code> module. Here is a sample &lt;code>file.json&lt;/code> file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;John Doe&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;age&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">32&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;address&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;street&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;123 Main St&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;city&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Anytown&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;state&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;CA&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>And here is some sample Python code for reading this file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">with&lt;/span> open(&lt;span style="color:#e6db74">&amp;#39;file.json&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;r&amp;#39;&lt;/span>) &lt;span style="color:#66d9ef">as&lt;/span> json_file:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> data &lt;span style="color:#f92672">=&lt;/span> json&lt;span style="color:#f92672">.&lt;/span>load(json_file)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print(data[&lt;span style="color:#e6db74">&amp;#34;name&amp;#34;&lt;/span>])
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Output: John Doe&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>json.loads&lt;/code> method takes in a JSON string and converts it into a Python dictionary. You can read more about the JSON library in the &lt;a href="https://docs.python.org/3/library/json.html" target="_blank" >official Python docs&lt;/a>.&lt;/p></description></item><item><title>How does JSON parser work?</title><link>https://www.scrapingbee.com/webscraping-questions/json/how-does-json-parser-work/</link><pubDate>Sat, 11 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/json/how-does-json-parser-work/</guid><description>&lt;p>A JSON (JavaScript Object Notation) parser is a program that reads a JSON-formatted text file and converts it into a more easily usable data structure, such as a dictionary or a list in Python or an object in JavaScript.&lt;/p>
&lt;p>The parser works by tokenizing the input JSON text, breaking it up into individual elements such as keys, values, and punctuation. It then builds a data structure, such as a dictionary, a list, or an object, that corresponds to the structure of the input JSON.&lt;/p></description></item><item><title>What is a JSON parser?</title><link>https://www.scrapingbee.com/webscraping-questions/json/what-is-a-json-parser/</link><pubDate>Sat, 11 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/json/what-is-a-json-parser/</guid><description>&lt;p>A JSON parser is a software component or library that reads a JSON (JavaScript Object Notation) formatted text file and converts it into a more usable data structure, such as a dictionary or a list in Python, or an object in JavaScript.&lt;/p>
&lt;p>JSON is a text-based, human-readable format for representing structured data. It is commonly used for transmitting data between a server and a web application or for storing data in a file or a database. A JSON parser provides a way to read JSON text and convert it into a more usable data structure, making it easier to access and manipulate the data.&lt;/p></description></item><item><title>Are HTTP websites safe?</title><link>https://www.scrapingbee.com/webscraping-questions/http/are-http-websites-safe/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/http/are-http-websites-safe/</guid><description>&lt;p>HTTP websites are not as secure as HTTPS websites. In HTTP, the communication between the client and server is not encrypted, so it's possible for someone to intercept and view sensitive information like passwords and credit card numbers. On the other hand, HTTPS encrypts the communication, providing a secure connection and protecting the privacy of users. It's recommended to use HTTPS for websites that handle sensitive information. Moreover, with the availability of free SSL certificates by &lt;a href="https://letsencrypt.org" target="_blank" >Let's Encrypt&lt;/a>, there is very little reason to still use naked HTTP.&lt;/p></description></item><item><title>Does WebCrawler still exist?</title><link>https://www.scrapingbee.com/webscraping-questions/web-crawling/does-webcrawler-still-exist/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-crawling/does-webcrawler-still-exist/</guid><description>&lt;p>WebCrawler still exists and is chugging along. According &lt;a href="https://en.wikipedia.org/wiki/WebCrawler" target="_blank" >to Wikipedia&lt;/a>, the website last changed hands in 2016 and the homepage was redesigned in 2018.&lt;/p>
&lt;p>Since then it has been working under the same company: System1.&lt;/p>
&lt;p>It is not as popular as it used to be, however, you can still search for information on the platform and get relevant results.&lt;/p>
&lt;p>According to SimilarWeb, WebCrawler has only 240,000 monthly visitors, making it not even in the top 100,000 websites in the world.&lt;/p></description></item><item><title>How do I hide my IP address for free?</title><link>https://www.scrapingbee.com/webscraping-questions/proxy/how-do-i-hide-my-ip-address-for-free/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/proxy/how-do-i-hide-my-ip-address-for-free/</guid><description>&lt;p>There are several ways to hide your IP address for free:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Use a free proxy server:&lt;/strong> You can use a free proxy server to hide your IP address and browse the web anonymously. However, it is important to keep in mind that free proxies can be risky to use as they may be operated by malicious individuals who could use them to snoop and steal your personal data or compromise your security. You can get a free proxy from the &lt;a href="http://free-proxy.cz/en/proxylist/country/all/socks5/ping/all" target="_blank" >Free Proxy&lt;/a> or similar websites.&lt;/li>
&lt;li>&lt;strong>Use a free VPN (Virtual Private Network):&lt;/strong> Some VPN services offer a free version that allows you to hide your IP address, encrypt your internet traffic, and browse the web securely. However, free VPN services may have data usage or speed limitations and may not be as secure as paid services. You can use &lt;a href="https://protonvpn.com/" target="_blank" >ProtonVPN&lt;/a>. It is provided by a reliable company with a good track record and has a free plan.&lt;/li>
&lt;li>&lt;strong>Use the Tor browser:&lt;/strong> The Tor browser is a free, open-source browser that routes your internet traffic through a series of servers to hide your IP address and provide anonymity. The Tor browser is highly secure but can be slower than a proxy or VPN as it routes the traffic through multiple successive servers (like the layers of an onion :)). You can download Tor &lt;a href="https://www.torproject.org/download/" target="_blank" >from here&lt;/a>.&lt;/li>
&lt;/ol>
&lt;p>There is also an option to use the freemium plans of paid proxy services like &lt;a href="https://scrapingbee.com" target="_blank" >ScrapingBee&lt;/a>. You can only make a limited amount of proxied requests using the freemium plans of such services but if your needs are small then this might suffice.&lt;/p></description></item><item><title>Is Google a web crawler?</title><link>https://www.scrapingbee.com/webscraping-questions/web-crawling/is-google-a-web-crawler/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-crawling/is-google-a-web-crawler/</guid><description>&lt;p>Google is most definitely a web crawler. They operate a web crawler with the name of Googlebot which searches for new websites, crawls them, and saves them in the massive search engine database. This is how Google powers its search engine and keeps it fresh with results from new websites. You can learn more about Googlebot over at Google's &lt;a href="https://developers.google.com/search/docs/crawling-indexing/googlebot" target="_blank" >documentation website&lt;/a>.&lt;/p>
&lt;p>So yes, Google is a web crawler, but it is not WebCrawler, as WebCrawler is a company, also crawling the web, but not Google.&lt;/p></description></item><item><title>Is it better to use IPv6 or IPv4?</title><link>https://www.scrapingbee.com/webscraping-questions/proxy/is-it-better-to-use-ipv6-or-ipv4/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/proxy/is-it-better-to-use-ipv6-or-ipv4/</guid><description>&lt;p>It is generally considered better to use IPv6, which is a newer and latest version of the Internet Protocol (IP) after IPv4. There are several reasons for this:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Larger Address Space:&lt;/strong> IPv6 has a much larger address space than IPv4, which allows for a much larger number of unique IP addresses. This is important as the increasing number of devices connecting to the internet is rapidly depleting the available IPv4 addresses.&lt;/li>
&lt;li>&lt;strong>Improved Security:&lt;/strong> IPv6 includes built-in security features, such as IPsec (Internet Protocol Security) encryption, which helps to protect against attacks and improve the overall security of the internet.&lt;/li>
&lt;li>&lt;strong>Better Support for Mobile Devices:&lt;/strong> IPv6 has better support for mobile devices and enables easier network transitions for mobile users, allowing for smoother and more efficient mobile connectivity. This is possible because IPv6 gets rid of the NAT and allows for a &lt;a href="https://www.extremetech.com/mobile/145765-ipv6-makes-mobile-networks-faster" target="_blank" >few different optimizations&lt;/a>.&lt;/li>
&lt;li>&lt;strong>More Efficient Routing:&lt;/strong> IPv6 uses simpler and more efficient routing algorithms, which helps to reduce network congestion and improve network performance.&lt;/li>
&lt;/ol>
&lt;p>That being said, IPv4 is still widely used and many networks continue to use both IPv4 and IPv6, with IPv4 being used as a fallback for devices that do not support IPv6. The transition to IPv6 is ongoing and is expected to take several more years to complete.&lt;/p></description></item><item><title>Is it legal to use proxies?</title><link>https://www.scrapingbee.com/webscraping-questions/proxy/is-it-legal-to-use-proxies/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/proxy/is-it-legal-to-use-proxies/</guid><description>&lt;p>Using a proxy server in and of itself is not illegal. However, the legality of using a proxy depends on how it is being used and in which jurisdiction.&lt;/p>
&lt;p>In some countries, using a proxy to bypass internet censorship or access restricted websites may be illegal. In other countries, the use of a proxy to protect privacy is allowed and protected by law. Some of the countries which completely or partially block proxies and VPNs include:&lt;/p></description></item><item><title>Is SOCKS5 the same as VPN?</title><link>https://www.scrapingbee.com/webscraping-questions/proxy/is-socks5-same-as-vpn/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/proxy/is-socks5-same-as-vpn/</guid><description>&lt;p>No, SOCKS5 and VPN are not the same things.&lt;/p>
&lt;p>SOCKS5 is a proxy protocol that provides routing for network traffic, allowing clients to bypass network restrictions and access the internet securely and anonymously. SOCKS5 does not provide encryption for the data being sent through the proxy, meaning that your internet traffic can be intercepted and monitored by third parties. However, due to no encryption, it might be slightly faster than a VPN.&lt;/p></description></item><item><title>Should I use IPv6 at home?</title><link>https://www.scrapingbee.com/webscraping-questions/proxy/should-i-use-ipv6-at-home/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/proxy/should-i-use-ipv6-at-home/</guid><description>&lt;p>Yes, you can use IPv6 at home. In fact, it is recommended to use IPv6 as it is the future of the internet and provides many benefits over IPv4, such as a larger address space, improved security, and better network auto-configuration capabilities. However, whether or not you can or should use IPv6 at home depends on a few factors:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Availability:&lt;/strong> IPv6 is not yet widely available and many home internet service providers do not support it. Before you can use IPv6 at home, you need to ensure that your internet service provider supports it and that your home network is configured to use it.&lt;/li>
&lt;li>&lt;strong>Devices:&lt;/strong> Many devices, such as smartphones, laptops, and smart home devices, already support IPv6, but others, such as older devices, may not. You should check to see if all the devices on your home network support IPv6 and if not, whether they can be upgraded to support it.&lt;/li>
&lt;li>&lt;strong>Performance:&lt;/strong> IPv6 can provide faster and more reliable connections, but this will depend on your internet service provider and the quality of your network connection and your ISP's support for IPv6. Simply upgrading to IPv6 will not magically solve all of the performance issues if there is a separate underlying cause.&lt;/li>
&lt;/ol>
&lt;p>So as you see, IPv6 is the preferred protocol to use but you may have some dependencies that will prevent a complete adoption of this newer IP protocol.&lt;/p></description></item><item><title>What are examples of proxies?</title><link>https://www.scrapingbee.com/webscraping-questions/proxy/what-are-examples-of-proxies/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/proxy/what-are-examples-of-proxies/</guid><description>&lt;p>A proxy is a server that acts as an intermediary between a client and a server, forwarding requests from clients to servers and vice versa. Here are some examples of different types of proxies used in web scraping:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Data Center Proxies:&lt;/strong> These are proxy servers that are owned and operated by data centers. They are used to hide the user's real IP address and provide a different IP address from the data center's pool of IP addresses. They can be sourced from regional data centers or from AWS, Google, and other similar cloud providers. Data center proxies are typically faster than residential proxies but are easily detectable by websites and services that block proxy usage.&lt;/li>
&lt;li>&lt;strong>Residential Proxies:&lt;/strong> These are proxy servers that use residential IP addresses provided by internet service providers (ISPs). They are considered better than data center proxies because they provide a real IP address from a physical location and are less likely to be detected as a proxy. However, they tend to be slower and more expensive than data center proxies.&lt;/li>
&lt;li>&lt;strong>4G Proxies:&lt;/strong> These are proxy servers that use mobile 4G network IP addresses. They are similar to residential proxies, providing a real IP address from a physical location, but they also offer the added benefit of mobility. However, the speed and reliability of 4G proxies can vary depending on the proxy location and network conditions.&lt;/li>
&lt;/ol>
&lt;p>If you ever have to use proxies, make sure you get them from a reliable provider like &lt;a href="https://scrapingbee.com" target="_blank" >ScrapingBee&lt;/a> as some providers in the market source these proxies using illegal and shady tactics.&lt;/p></description></item><item><title>What are the 3 types of HTTP cookies?</title><link>https://www.scrapingbee.com/webscraping-questions/http/what-are-the-three-types-of-http-cookies/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/http/what-are-the-three-types-of-http-cookies/</guid><description>&lt;p>The three types of HTTP cookies are:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Session Cookies:&lt;/strong> These are temporary cookies that are stored in the browser's memory only while a user is on a website. Once the user closes the browser, the session cookie is deleted.&lt;/li>
&lt;li>&lt;strong>Persistent Cookies:&lt;/strong> These are also known as first-party cookies. They have an expiration date and are stored on the user's device for a specified period of time, even after the user has closed the browser.&lt;/li>
&lt;li>&lt;strong>Third-party Cookies:&lt;/strong> These are also referred to as tracking cookies. They are set by a domain other than the one the user is visiting. For example, a user visiting a website might see ads served by an ad network that uses third-party cookies to track the user's behavior and show relevant ads.&lt;/li>
&lt;/ol></description></item><item><title>What is a proxy vs VPN?</title><link>https://www.scrapingbee.com/webscraping-questions/proxy/what-is-a-proxy-vs-vpn/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/proxy/what-is-a-proxy-vs-vpn/</guid><description>&lt;p>A proxy and a VPN (Virtual Private Network) both provide a means to hide your IP address and protect your privacy online, but they differ in several key ways:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Purpose:&lt;/strong> A proxy and a VPN are both designed to act as intermediaries between a client and a server and forward network requests between them. However, a VPN works on the operating system level and usually routes all of the network traffic, whereas, a proxy works at the application level and routes only a specific application's traffic.&lt;/li>
&lt;li>&lt;strong>Security:&lt;/strong> A proxy typically provides minimal security and encryption. The traffic going through a proxy is usually not encrypted. Whereas a VPN provides a high level of security and encryption and protects your internet traffic from prying eyes. This means that even though your scummy ISP might be able to surveil your proxy traffic, it won't be able to pry on your VPN traffic due to its encrypted nature.&lt;/li>
&lt;li>&lt;strong>Performance:&lt;/strong> A proxy may be faster than a VPN because it does not need to encrypt and decrypt data. However, with the improvements in the speed and performance of systems and networks, this difference is slowly vanishing.&lt;/li>
&lt;li>&lt;strong>Cost:&lt;/strong> Proxies can be free or low-cost, while VPNs can be a bit more expensive. This makes proxies a better option for tasks like web scraping where you might want to source thousands or millions of different IPs for making automated requests.&lt;/li>
&lt;/ol>
&lt;p>As you can see, both a proxy and a VPN can be used to hide the IP address. And while a VPN provides a more secure and private connection, it may be slower and more expensive than a proxy. The best option for you will depend on your specific needs and the level of security required.&lt;/p></description></item><item><title>What is a web crawler used for?</title><link>https://www.scrapingbee.com/webscraping-questions/web-crawling/what-is-a-web-crawler-used-for/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-crawling/what-is-a-web-crawler-used-for/</guid><description>&lt;p>A web crawler is a &amp;quot;bot&amp;quot; generally used by search engines to look for new websites, download their data, and index it. They power most of the popular search engines like Google, Yahoo!, and Bing. These bots are called crawlers as this is the technical term to define what they do which is automatically opening a website and obtaining its data.&lt;/p>
&lt;p>You can learn more about web crawlers from &lt;a href="https://en.wikipedia.org/wiki/Web_crawler" target="_blank" >Wikipedia&lt;/a>.&lt;/p></description></item><item><title>Which is better Scrapy or BeautifulSoup?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/which-is-better-scrapy-or-beautifulsoup/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/which-is-better-scrapy-or-beautifulsoup/</guid><description>&lt;p>It is hard to say whether Scrapy is better or BeautifulSoup as both of them are complementary to each other and do different things.&lt;/p>
&lt;p>Scrapy is a robust, feature-complete, extensible, and maintained web scraping framework. It contains advanced features like rate-limiting, proxy rotation, automated URL discovery, pause/resume crawling functionality, remote control, and multiple output formats.&lt;/p>
&lt;p>BeautifulSoup on the other hand is simply an HTML parsing library. You can couple BeautifulSoup with Scrapy to parse HTML responses using BeautifulSoup in Scrapy callbacks. You can follow &lt;a href="https://docs.scrapy.org/en/latest/faq.html#faq-scrapy-bs-cmp" target="_blank" >this guide&lt;/a> to learn more about this.&lt;/p></description></item><item><title>Which is faster IPv4 or IPv6?</title><link>https://www.scrapingbee.com/webscraping-questions/proxy/which-is-faster-ipv4-or-ipv6/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/proxy/which-is-faster-ipv4-or-ipv6/</guid><description>&lt;p>In theory, IPv6 is faster than IPv4 as it uses an efficient routing algorithm and gets rid of the necessity of NAT (Network Address Translation). At the same time, it also eliminates the need for IP-level fragmentation, which is required in IPv4 networks, and has a simpler header format that reduces the processing overhead required to handle network packets. However, in practice, these speed improvements may not always be realized due to certain reasons.&lt;/p></description></item><item><title>Why is HTTPS not used for all web traffic?</title><link>https://www.scrapingbee.com/webscraping-questions/http/why-is-https-not-used-for-all-web-traffic/</link><pubDate>Mon, 06 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/http/why-is-https-not-used-for-all-web-traffic/</guid><description>&lt;p>There are several reasons why HTTPS is not used for all web traffic:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Cost:&lt;/strong> Implementing HTTPS requires an SSL or TLS certificate, which can be expensive for some organizations. Smaller websites may not have the budget to purchase and maintain a certificate. However, this is less of a concern now as Let's Encrypt and similar websites offer free SSL certificates.&lt;/li>
&lt;li>&lt;strong>Lack of Awareness:&lt;/strong> Some website owners and developers may not fully understand the importance of using HTTPS, or may not realize that their website is not currently using HTTPS. However, with Google and other search engines penalizing HTTP-only websites in their search results, the awareness would eventually improve with time.&lt;/li>
&lt;li>&lt;strong>Legacy Systems:&lt;/strong> Some older websites and systems may not be able to support HTTPS due to technical limitations. On top of it, implementing HTTPS can be technically complex, especially for older websites that were not originally designed with security in mind. This can make the transition to HTTPS difficult and time-consuming.&lt;/li>
&lt;/ol>
&lt;p>In recent years, there has been a push to increase the use of HTTPS across the web, and many browsers now display security warnings for websites that are not using HTTPS. For example, this is how an HTTP-only website shows on Google Chrome:&lt;/p></description></item><item><title>Are Python requests deprecated?</title><link>https://www.scrapingbee.com/webscraping-questions/requests/are-python-requests-deprecated/</link><pubDate>Fri, 03 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/requests/are-python-requests-deprecated/</guid><description>&lt;p>&lt;a href="https://github.com/psf/requests" target="_blank" >Requests&lt;/a> is an HTTP library for Python-based programs. It is under active development and not deprecated at all. While writing this answer, the latest release of Requests was in January 2023. Around 1.8 million+ repositories &lt;a href="https://github.com/psf/requests/network/dependents?package_id=UGFja2FnZS01NzA4OTExNg%3D%3D" target="_blank" >depend on this project&lt;/a> so the chances of Requests being deprecated are very slim. Its maintenance and further development falls under the umbrella of the Python Software Foundation. There are alternatives like the &lt;a href="https://github.com/encode/httpx/" target="_blank" >httpx&lt;/a> project but their existence does not mean that the original Requests project is dead or deprecated.&lt;/p></description></item><item><title>Is requests a built-in Python library?</title><link>https://www.scrapingbee.com/webscraping-questions/requests/is-requests-a-built-in-python-library/</link><pubDate>Fri, 03 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/requests/is-requests-a-built-in-python-library/</guid><description>&lt;p>&lt;a href="https://github.com/psf/requests" target="_blank" >Requests&lt;/a> is not a built-in Python library. It is available on PyPI and can be installed using the typical PIP command like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ python -m pip install requests
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It officially supports Python 3.7+ so you need to make sure your project is either using Python 3.7 or above in order to use Requests.&lt;/p>
&lt;p>You can learn more about this library on the &lt;a href="https://requests.readthedocs.io/" target="_blank" >official website&lt;/a> or &lt;a href="https://github.com/psf/requests" target="_blank" >GitHub page&lt;/a>.&lt;/p></description></item><item><title>What is Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/what-is-puppeteer/</link><pubDate>Fri, 03 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/what-is-puppeteer/</guid><description>&lt;p>Puppeteer is a browser automation library developed by the Chrome Dev Tools team.&lt;/p>
&lt;p>Simply put, it is a tool that allows you to control your web browser with NodeJS scripts.&lt;/p>
&lt;p>In more technical terms it supports automating Chrome/Chromium over the non-standard DevTools Protocol.&lt;/p>
&lt;p>There is experimental Firefox support as well.&lt;/p>
&lt;p>You can do almost anything with Puppeteer that you normally do manually. According to the &lt;a href="https://pptr.dev/" target="_blank" >official website&lt;/a>, this list of possible actions includes:&lt;/p></description></item><item><title>What is requests used for in Python?</title><link>https://www.scrapingbee.com/webscraping-questions/requests/what-is-requests-used-for-in-python/</link><pubDate>Fri, 03 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/requests/what-is-requests-used-for-in-python/</guid><description>&lt;p>&lt;a href="https://github.com/psf/requests" target="_blank" >Requests&lt;/a> is an HTTP library for Python-based programs. It is one of the most downloaded Python packages. It provides a nice API for making HTTP requests.&lt;/p>
&lt;p>Requests is popular because it is very simple to use compared to HTTP libraries like &lt;a href="https://docs.python.org/3/library/urllib.html" target="_blank" >urllib&lt;/a> and &lt;a href="https://docs.python.org/3/library/urllib.request.html" target="_blank" >urllib2&lt;/a>.&lt;/p>
&lt;p>You can use it to make GET, POST, PUT, DELETE, HEAD, OPTIONS, PATCH requests. It also supports HTTP Basic/Digest Authentication, Cookies, Redirects, and more.&lt;/p>
&lt;p>While being the most popular by far, Requests is lacking some modern feature that other HTTP libraries like https have like Async and HTTP/2 support.&lt;/p></description></item><item><title>Which is better Playwright or Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/which-is-better-playwright-or-puppeteer/</link><pubDate>Fri, 03 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/which-is-better-playwright-or-puppeteer/</guid><description>&lt;p>Playwright and Puppeteer are both browser automation tools and libraries. They are both mature and contain all the necessary features for browser automation. There is no clear answer as to which library you should use. However, there are a few significant differences between both that might help you decide which one might suit you better.&lt;/p>
&lt;h2 id="puppeteer">Puppeteer&lt;/h2>
&lt;ul>
&lt;li>Developed by Chrome Dev Team in 2017&lt;/li>
&lt;li>Puppeteer officially only supports Javascript. There is an unofficial port &lt;a href="https://github.com/pyppeteer/pyppeteer" target="_blank" >in Python&lt;/a> but that's it.&lt;/li>
&lt;li>Fully supports Chromium along with experimental Firefox support&lt;/li>
&lt;/ul>
&lt;h2 id="playwright">Playwright&lt;/h2>
&lt;ul>
&lt;li>Developed by Microsoft and released in 2020&lt;/li>
&lt;li>Supports Golang, Python, Java, JavaScript, and C#&lt;/li>
&lt;li>Supports Chromium, Firefox, and WebKit&lt;/li>
&lt;/ul>
&lt;p>Playwright is more recent so there is a smaller community as compared to Puppeteer. Look at this NPM popularity graph to decide which one is more popular:&lt;/p></description></item><item><title>Who owns Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/who-owns-puppeteer/</link><pubDate>Fri, 03 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/who-owns-puppeteer/</guid><description>&lt;p>Puppeteer is owned by Google and is developed as an open-source project with contributions from developers from all over the world. Puppeteer was initially developed and released by the Chrome DevTools team in 2017 and the current development takes place &lt;a href="https://github.com/puppeteer/puppeteer" target="_blank" >on GitHub&lt;/a>. Most of the individual contributors are not affiliated with Google. However, the project still falls under Google's umbrella and the contributors have to sign a one-time Contributor License Agreement before they can contribute.&lt;/p></description></item><item><title>Why do we need Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/why-do-we-need-puppeteer/</link><pubDate>Fri, 03 Feb 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/why-do-we-need-puppeteer/</guid><description>&lt;p>Puppeteer is a Node.js library used for automating web page interactions. It provides a high-level API to control Chrome or Chromium-based browsers, enabling developers to automate browser tasks, generate screenshots and PDFs, crawl web pages, and perform end-to-end testing. This library becomes extremely useful when doing web scraping as it allows you to execute website JavaScript and even hide the fact that you are using a browser automation library via &lt;a href="https://www.npmjs.com/package/puppeteer-extra-plugin-stealth" target="_blank" >puppeteer-extra-plugin-stealth&lt;/a> and similar plugins.&lt;/p></description></item><item><title>What are the 6 characteristics of a REST API?</title><link>https://www.scrapingbee.com/blog/six-characteristics-of-rest-api/</link><pubDate>Mon, 30 Jan 2023 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/six-characteristics-of-rest-api/</guid><description>&lt;p>REST API architecture was put forward by Dr. Roy Fielding in his 2000 doctoral dissertation. This architecture has been around for roughly 23 years and most of the popular APIs follow it. Despite this widespread use, most programmers are still unaware of the six underlying characteristics that define a REST or RESTful API.&lt;/p>
&lt;p>You can ensure you are not among that list of programmers by going through Dr. Fielding's &lt;a href="https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf" target="_blank" >180-page dissertation&lt;/a>. Or better yet, spend the next few minutes reading this very article where we go over this list of characteristics and discuss why each one is important. We can assure you the latter option is more fun and time friendly 😄&lt;/p></description></item><item><title>403 status code - what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/403-status-code-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/403-status-code-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>A 403 status code refers to the Forbidden response status. It is thrown by the server when it recognizes the request as being valid but is not willing to fulfil it. It might be caused by a lack of proper headers in your request so make sure you are passing all the required CORS/JWT/Authentication headers that the server is expecting.&lt;/p>
&lt;p>However, if the website is normally accessible and sending proper headers is still not making it work, your requests might be getting recognized by the server as being automated. In such a scenario, make sure you are using &lt;a href="https://github.com/ultrafunkamsterdam/undetected-chromedriver" target="_blank" >undetected-chromedriver&lt;/a> or a similar tool and pair it up with proxies from a reliable proxy provider like ScrapingBee. Or better yet, use &lt;a href="https://www.scrapingbee.com" target="_blank" >ScrapingBee's web scraping API&lt;/a> and let us handle the task of not getting blocked. This should help solve the issue.&lt;/p></description></item><item><title>429 status code - what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/429-status-code-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/429-status-code-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>A 429 status code refers to the &lt;code>Too Many Requests&lt;/code> error. It might be thrown by the server if the user has made excessive requests in a short amount of time and the server is using rate-limiting. The best way to avoid this error is to do either of these two things:&lt;/p>
&lt;ol>
&lt;li>Throttle your requests. Make sure you are making only a few requests in a given timeframe so as not to hit the rate-limit&lt;/li>
&lt;li>Distribute your requests across proxies so that they all go from different IPs and don't trigger the rate-limit&lt;/li>
&lt;/ol>
&lt;p>For the second option, you can use ScrapingBee's reliable proxies to make sure they aren't part of any blocklist. Or better yet, use &lt;a href="https://www.scrapingbee.com" target="_blank" >ScrapingBee's web scraping API&lt;/a> and let us handle the task of not getting blocked.&lt;/p></description></item><item><title>444 status code - what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/444-status-code-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/444-status-code-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>A 444 status code is thrown when a website unexpectedly closes the connection without sending any response to the client. It is an unofficial code and specific to NGINX. There are multiple reasons why NGINX might throw this error. It might occur when the server has identified your requests to be automated. The best way to avoid it is to make every effort to conceal your automated requests and make them resemble a regular user's browsing pattern. You can use &lt;a href="https://github.com/ultrafunkamsterdam/undetected-chromedriver" target="_blank" >undetected-chromedriver&lt;/a> and pair it up with proxies from a reliable proxy provider like ScrapingBee. Or better yet, use &lt;a href="https://www.scrapingbee.com" target="_blank" >ScrapingBee's web scraping API&lt;/a> and let us handle the task of not getting blocked.&lt;/p></description></item><item><title>499 status code - what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/499-status-code-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/499-status-code-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>A 499 status code refers to &amp;quot;client closed request&amp;quot; error. This is a client-side code where the client did not wait long enough for the server to respond. It generally occurs in reverse proxy setups where NGINX is acting as a reverse proxy for a UWSGI or similar upstream server and did not wait long enough for the server to return the response.&lt;/p>
&lt;p>If the website is working fine under normal settings then the chances are that your requests might be getting identified as being automated. In such a scenario, make sure you are using &lt;a href="https://github.com/ultrafunkamsterdam/undetected-chromedriver" target="_blank" >undetected-chromedriver&lt;/a> or a similar tool and pairing it up with proxies from a reliable proxy provider like ScrapingBee. Or better yet, use &lt;a href="https://www.scrapingbee.com" target="_blank" >ScrapingBee's web scraping API&lt;/a> and let us handle the task of not getting blocked. This should help solve the issue.&lt;/p></description></item><item><title>503 status code - what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/503-status-code-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/503-status-code-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>A 503 status code refers to the Service Unavailable error. This might be thrown by a web server when it is not ready to serve any requests at the moment. This status code also means that there aren't any issues with the server but it is just not ready to serve your request. It might be caused by resource exhaustion or the server being down for maintainance.&lt;/p>
&lt;p>You can solve this error by figuring out if the server is actually down for maintenance or whether it is just not responding specifically to your requests. If it is the former, then waiting for a while before trying again might solve the issue. However, it it is the latter, make sure you are using &lt;a href="https://github.com/ultrafunkamsterdam/undetected-chromedriver" target="_blank" >undetected-chromedriver&lt;/a> or a similar tool and pairing it up with proxies from a reliable proxy provider like ScrapingBee. Or better yet, use &lt;a href="https://www.scrapingbee.com" target="_blank" >ScrapingBee's web scraping API&lt;/a> and let us handle the task of getting around the 503 error. This should help solve the issue.&lt;/p></description></item><item><title>520 status code - what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/520-status-code-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/520-status-code-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>A 520 status code is related to Cloudflare. It is used by Cloudflare as a catch-all response for when the origin server sends something unexpected. It might be caused by some technical issues on the website. However, it can also be caused if your requests do not contain the required data that the website is expecting. So make sure that you are including all the required headers (CORS, Referrer, Auth) in your requests.&lt;/p></description></item><item><title>Cloudflare Error 1009: what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-error-1009-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-error-1009-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>Cloudflare Error 1009 refers to the Access Denied: Country or region banned error. It is thrown by Cloudflare when the website owner has banned the country or region where your IP address is originating from.&lt;/p>
&lt;p>&lt;img src="https://www.scrapingbee.com/images/questions/cloudflare-error-1009.png" alt="Cloudflare Error 1009">&lt;/p>
&lt;p>The only way to get around these errors is to use a reliable premium proxy provider like ScrapingBee that lets you manually select the proxy region as well. This way you can continue web scraping from a country or region that is not banned by the website. This should help you bypass the 1009 error.&lt;/p></description></item><item><title>Cloudflare Error 1010: what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-error-1010-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-error-1010-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>Cloudflare Error 1010 means that the owner of the website has banned your access based on your browser's signature. This can happen when you are trying to scrape a website using automated tools like Selenium, Puppeteer, or Playwright. These tools are very easy to fingerprint using Javascript.&lt;/p>
&lt;p>&lt;img src="https://www.scrapingbee.com/images/questions/cloudflare-error-1010.png" alt="Cloudflare Error 1010">&lt;/p>
&lt;p>You can get around this error in two ways. One is to use tools like &lt;a href="https://github.com/ultrafunkamsterdam/undetected-chromedriver" target="_blank" >undetected-chromedriver&lt;/a> which can not easily be fingerprinted. And another is to use web scraping APIs by companies like ScrapingBee. We use anti-fingerprinting browsers for web scraping. This makes sure our scrapers are not easily fingerprinted and banned by websites.&lt;/p></description></item><item><title>Cloudflare Error 1015: what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-error-1015-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-error-1015-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>Cloudflare Error 1015 refers to the rate limiting error. It is thrown by Cloudflare when the website owner has implemented a rate limit for requests and you are violating that rate limit. This can happen when you are sending a ton of requests in a very short amount of time.&lt;/p>
&lt;p>&lt;img src="https://www.scrapingbee.com/images/questions/cloudflare-error-1015.png" alt="Cloudflare Error 1015">&lt;/p>
&lt;p>You can get around this error in two ways. One is to throttle your requests. Make sure you are only sending a limited number of requests in a given time. Another way to get around this error is to use a reliable premium proxy provider like ScrapingBee. ScrapingBee makes sure to rotate the proxies so no one proxy triggers the rate limiting. This should help you bypass the Cloudflare 1015 error.&lt;/p></description></item><item><title>Cloudflare Error 1020: what is it and how to avoid it?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-error-1020-what-it-is-and-how-to-avoid-it/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-error-1020-what-it-is-and-how-to-avoid-it/</guid><description>&lt;p>Cloudflare Error 1020 refers to the Access Denied error. It is thrown by Cloudflare when you violate a firewall rule set up by the Cloudflare-protected website. This violation can occur due to various reasons including sending too many requests to the website.&lt;/p>
&lt;p>&lt;img src="https://www.scrapingbee.com/images/questions/cloudflare-error-1020.png" alt="Cloudflare Error 1020">&lt;/p>
&lt;p>If the website is working fine without using automated tools then you need to improve your web scraping techniques. You can hide your automated requests by making use of &lt;a href="https://github.com/ultrafunkamsterdam/undetected-chromedriver" target="_blank" >undetected-chromedriver&lt;/a> or a similar tool and pairing it up with premium proxies from a reliable proxy provider like ScrapingBee. Or better yet, use ScrapingBee's APIs and let us handle the task of not getting blocked. This should help you avoid the 1020 error.&lt;/p></description></item><item><title>Cloudflare Errors 1006, 1007, 1008: how to avoid them?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-errors-1006-1007-1008-how-to-avoid-them/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/cloudflare-errors-1006-1007-1008-how-to-avoid-them/</guid><description>&lt;p>Cloudflare Errors 1006, 1007, and 1008 refer to Access Denied errors. They vary only slightly from each other. They are thrown by Cloudflare when your IP address has been banned. This generally occurs when a Cloudflare customer (the website you are trying to scrape) bans traffic originating from your IP address. They might do this when they have identified that you are trying to scrape their website.&lt;/p>
&lt;p>&lt;img src="https://www.scrapingbee.com/images/questions/cloudflare-error-1006.png" alt="Cloudflare Error 1006">&lt;/p></description></item><item><title>How to scrape Perimeter X: Please verify you are human?</title><link>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/how-to-scrape-perimeterx-verify-you-are-a-human/</link><pubDate>Tue, 24 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-scraping-blocked/how-to-scrape-perimeterx-verify-you-are-a-human/</guid><description>&lt;p>While web scraping, you might come across PerimeterX. It is a service that helps protect websites from automated scraping. You can recognize PerimeterX by the &amp;quot;Press &amp;amp; Hold&amp;quot; and &amp;quot;Please verify you are a human&amp;quot; messages similar to the image below:&lt;/p>
&lt;p>&lt;img src="https://www.scrapingbee.com/images/questions/perimeterX-error.png" alt="PerimeterX">&lt;/p>
&lt;p>PerimeterX and similar anti-scraping tools rely on JavaScript fingerprinting and similar techniques which are hard to get around by using regular scraping frameworks.&lt;/p>
&lt;p>The best way to work around PerimeterX is to make sure the server does not recognize automated requests. You can hide your automated requests by making use of &lt;a href="https://github.com/ultrafunkamsterdam/undetected-chromedriver" target="_blank" >undetected-chromedriver&lt;/a> or a similar tool and pairing it up with premium proxies from a reliable proxy provider like ScrapingBee. Or better yet, use &lt;a href="https://www.scrapingbee.com" target="_blank" >ScrapingBee's web scraping API&lt;/a> and let us handle the task of not getting blocked.&lt;/p></description></item><item><title>How to download a file using cURL?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/download-file-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/download-file-curl/</guid><description>&lt;p>To download a file using cURL you simply need to make a GET request (default behavior) and to specify the -o (output) command line option so that the response is written to a file. Here is a sample command that downloads a file from our hosted version of &lt;a href="https://httpbin.scrapingbee.com/" target="_blank" >HTTPBin&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl https://httpbin.scrapingbee.com/images/png &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> -o image.png
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here we ask for cURL to fetch a png image and write the result inside a file named &lt;code>image.png&lt;/code>.&lt;/p></description></item><item><title>How to follow redirect using cURL?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/follow-redirect-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/follow-redirect-curl/</guid><description>&lt;p>To follow redirect using cURL you need to use the -L option. Here is a sample command that sends a &lt;code>GET&lt;/code> request to our hosted version of &lt;a href="https://httpbin.scrapingbee.com/" target="_blank" >HTTPBin&lt;/a> and follows the redirect:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl -L https://httpbin.scrapingbee.com/redirect-to?url&lt;span style="color:#f92672">=&lt;/span>https://httpbin.scrapingbee.com/headers?json
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here we ask for cURL to follow redirection, and the url we hit, redirect us to the &lt;code>headers&lt;/code> endpoint. The response will be:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;headers&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;Host&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;httpbin.scrapingbee.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;User-Agent&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;curl/7.86.0&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;Accept&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;*/*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now, if we remove the -L option, cURL no longer follow redirection the response will be:&lt;/p></description></item><item><title>How to get file type of an URL in Python?</title><link>https://www.scrapingbee.com/webscraping-questions/web-crawling/how-to-get-file-type-of-url-in-python/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-crawling/how-to-get-file-type-of-url-in-python/</guid><description>&lt;p>You can get the file type of a URL in Python via two different methods.&lt;/p>
&lt;ol>
&lt;li>Use the &lt;code>mimetypes&lt;/code> module&lt;/li>
&lt;/ol>
&lt;p>&lt;code>mimetypes&lt;/code> module comes by default with Python and can infer the file type from the URL. This relies on the file extension being present in the URL. Here is some sample code:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> mimetypes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mimetypes&lt;span style="color:#f92672">.&lt;/span>guess_type(&lt;span style="color:#e6db74">&amp;#34;http://example.com/file.pdf&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Output: (&amp;#39;application/pdf&amp;#39;, None)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mimetypes&lt;span style="color:#f92672">.&lt;/span>guess_type(&lt;span style="color:#e6db74">&amp;#34;http://example.com/file&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Output: (None, None)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>Perform a HEAD request to the URL and investigate the response headers&lt;/li>
&lt;/ol>
&lt;p>A head request does not download the whole response but rather makes a short request to a URL to get some metadata. An important piece of information that it provides is the &lt;code>Content-Type&lt;/code> of the response. This can give you a very good idea of the file type of a URL. Here is some sample code for making a HEAD request and figuring out the file type:&lt;/p></description></item><item><title>How to get JSON with cURL ?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/get-json-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/get-json-curl/</guid><description>&lt;p>You can get JSON with cURL by sending a GET request with the -H &amp;quot;Accept: application/json&amp;quot; option. Here is a sample command that sends a GET request to our hosted version of &lt;a href="https://httpbin.scrapingbee.com/anything?json" target="_blank" >HTTPBin&lt;/a> and returns the response in JSON format:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl https://httpbin.scrapingbee.com/anything?json &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> -H &lt;span style="color:#e6db74">&amp;#34;Accept: application/json&amp;#34;&lt;/span> 
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It is quite simple because &lt;code>GET&lt;/code> is the default request method used by cURL.&lt;/p>
&lt;p>Also, in many cases, you won't have to specify the &lt;code>Accept&lt;/code> header because the server will return JSON by default.&lt;/p></description></item><item><title>How to get XML with cURL ?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/get-xml-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/get-xml-curl/</guid><description>&lt;p>You can get XML with cURL by sending a GET request with the -H &amp;quot;Accept: application/xml&amp;quot; option. Here is a sample command that sends a GET request to our hosted version of &lt;a href="https://httpbin.scrapingbee.com/xml" target="_blank" >HTTPBin&lt;/a> and returns the response in JSON format:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl https://httpbin.scrapingbee.com/xml &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> -H &lt;span style="color:#e6db74">&amp;#34;Accept: application/xml&amp;#34;&lt;/span> 
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It is quite simple because &lt;code>GET&lt;/code> is the default request method used by cURL.&lt;/p>
&lt;h2 id="what-is-curl">What is cURL?&lt;/h2>
&lt;p>cURL is an open-source command-line tool used to transfer data to and from a server. It is extremely versatile and supports various protocols including HTTP, FTP, SMTP, and many others. It is generally used to test and interact with APIs, download files, and perform various other tasks involving network communication.&lt;/p></description></item><item><title>How to ignore invalid and self-signed certificates using cURL?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/ignore-invalid-certificate-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/ignore-invalid-certificate-curl/</guid><description>&lt;p>To ignore invalid and self-signed certificates using cURL you need to use the -k option. Here is a sample command that sends a &lt;code>GET&lt;/code> request to our hosted version of &lt;a href="https://httpbin.scrapingbee.com/" target="_blank" >HTTPBin&lt;/a> with the -k option:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl -k https://httpbin.scrapingbee.com
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Be careful, ignoring invalid and self-signed certificates is a security risk and should only be used for testing purposes. In production, you should always use valid certificates as accepting invalid ones mean that you will be vulnerable to man-in-the-middle attacks.&lt;/p></description></item><item><title>How to ignore non-HTML URLs when web crawling?</title><link>https://www.scrapingbee.com/webscraping-questions/web-crawling/how-to-ignore-non-html-urls-when-web-crawling/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/web-crawling/how-to-ignore-non-html-urls-when-web-crawling/</guid><description>&lt;p>You can ignore non-HTML URLs when web crawling via two methods.&lt;/p>
&lt;ol>
&lt;li>Check the URL suffix for unwanted file extensions&lt;/li>
&lt;/ol>
&lt;p>Here is some sample code that filters out image file URLs based on extension:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> os
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>IMAGE_EXTENSIONS &lt;span style="color:#f92672">=&lt;/span> [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;mng&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;pct&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;bmp&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;gif&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;jpg&amp;#39;&lt;/span>, 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;jpeg&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;png&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;pst&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;psp&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;tif&amp;#39;&lt;/span>, 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;tiff&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;ai&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;drw&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;dxf&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;eps&amp;#39;&lt;/span>, 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#e6db74">&amp;#39;ps&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;svg&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;cdr&amp;#39;&lt;/span>, &lt;span style="color:#e6db74">&amp;#39;ico&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>url &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com/logo.png&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">if&lt;/span> os&lt;span style="color:#f92672">.&lt;/span>path&lt;span style="color:#f92672">.&lt;/span>splitext(url)[&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>][&lt;span style="color:#ae81ff">1&lt;/span>:] &lt;span style="color:#f92672">in&lt;/span> IMAGE_EXTENSIONS:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(&lt;span style="color:#e6db74">&amp;#34;Abort the request&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">else&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(&lt;span style="color:#e6db74">&amp;#34;Continue the request&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>Perform a HEAD request to the URL and investigate the response headers&lt;/li>
&lt;/ol>
&lt;p>A head request does not download the whole response but rather makes a short request to a URL to get some metadata. An important piece of information that it provides is the &lt;code>Content-Type&lt;/code> of the response. This can give you a very good idea of the file type of a URL. If the HEAD request returns a non-HTML &lt;code>Content-Type&lt;/code> then you can skip the complete request. Here is some sample code for making a HEAD request and figuring out the response type:&lt;/p></description></item><item><title>How to parse dynamic CSS classes when web scraping?</title><link>https://www.scrapingbee.com/webscraping-questions/data-parsing/how-to-parse-dynamic-css-class-when-scraping/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/data-parsing/how-to-parse-dynamic-css-class-when-scraping/</guid><description>&lt;p>You can parse dynamic CSS classes using text-based XPath matching. Here is a short example of what HTML with dynamic CSS classes might look like:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span>&amp;lt;&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;dd&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">h1&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;aa&amp;#34;&lt;/span>&amp;gt;Product Details&amp;lt;/&lt;span style="color:#f92672">h1&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;ffa&amp;#34;&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;la&amp;#34;&lt;/span>&amp;gt;Remaining Stock&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#f92672">div&lt;/span> &lt;span style="color:#a6e22e">class&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;ad&amp;#34;&lt;/span>&amp;gt;5&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;lt;/&lt;span style="color:#f92672">div&lt;/span>&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you want to extract the value of the remaining stock you can target the HTML &lt;code>div&lt;/code> tag that contains &amp;quot;Remaining Stock&amp;quot; and then select the sibling &lt;code>div&lt;/code> that contains the stock count. You can do so using text-based XPath matching like this:&lt;/p></description></item><item><title>How to POST JSON using cURL?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/post-json-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/post-json-curl/</guid><description>&lt;p>You can send JSON with a &lt;code>POST&lt;/code> request using cURL using the -X option with POST and the -d option (data).&lt;/p>
&lt;p>Here is a sample command that sends a &lt;code>POST&lt;/code> request to our hosted version of &lt;a href="https://httpbin.scrapingbee.com/" target="_blank" >HTTPBin&lt;/a> with JSON data:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl -X POST https://httpbin.scrapingbee.com/post &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> -d &lt;span style="color:#e6db74">&amp;#39;{&amp;#34;name&amp;#34;:&amp;#34;John Doe&amp;#34;,&amp;#34;age&amp;#34;:30,&amp;#34;city&amp;#34;:&amp;#34;New York&amp;#34;}&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that your JSON data must be enclosed in single quotes.&lt;/p>
&lt;h2 id="what-is-curl">What is cURL?&lt;/h2>
&lt;p>cURL is an open-source command-line tool used to transfer data to and from a server. It is extremely versatile and supports various protocols including HTTP, FTP, SMTP, and many others. It is generally used to test and interact with APIs, download files, and perform various other tasks involving network communication.&lt;/p></description></item><item><title>How to select elements by class in XPath?</title><link>https://www.scrapingbee.com/webscraping-questions/xpath/how-to-select-elements-by-class-in-xpath/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/xpath/how-to-select-elements-by-class-in-xpath/</guid><description>&lt;p>You can select elements by class in XPath by using the &lt;code>contains(@class, &amp;quot;class-name&amp;quot;)&lt;/code> or &lt;code>@class=&amp;quot;class-name&amp;quot;&lt;/code> expressions.&lt;/p>
&lt;p>The first expression will match any element that contains &lt;code>class-name&lt;/code>. Even if the element has additional classes defined it will still match. However, the second expression will match the elements that only have one class named &lt;code>class-name&lt;/code> and no additional classes.&lt;/p>
&lt;p>Here is some Selenium XPath sample code that extracts the &lt;code>h1&lt;/code> tag from the ScrapingBee website using the class name:&lt;/p></description></item><item><title>How to select elements by text in XPath?</title><link>https://www.scrapingbee.com/webscraping-questions/xpath/how-to-select-elements-by-text-in-xpath/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/xpath/how-to-select-elements-by-text-in-xpath/</guid><description>&lt;p>Do you need to &lt;strong>grab elements by text using XPath&lt;/strong>? Well, today we're going to discuss just that. Our tutorial keeps things simple: exact matches with &lt;code>text() = '...'&lt;/code>, partial matches with &lt;code>contains()&lt;/code>, plus &lt;code>starts-with()&lt;/code> and &lt;code>normalize-space()&lt;/code> to avoid whitespace-related issues. You'll learn about case sensitivity, special characters, and how text matching differs for attributes vs. inner text. Of course, this article also includes copy-pasteable examples for Python/lxml and Selenium.&lt;/p></description></item><item><title>How to send a DELETE request using cURL?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/send-delete-request-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/send-delete-request-curl/</guid><description>&lt;p>You can send a &lt;code>DELETE&lt;/code> request using cURL via the following command:&lt;/p>
&lt;pre tabindex="0">&lt;code>curl -X DELETE &amp;lt;url&amp;gt;
&lt;/code>&lt;/pre>&lt;p>Where:&lt;/p>
&lt;ul>
&lt;li>&lt;code>-X&lt;/code> flag is used to define the request method that cURL should use. By default cURL sends a GET request.&lt;/li>
&lt;/ul>
&lt;p>Replace &lt;code>&amp;lt;url&amp;gt;&lt;/code> with the URL of the resource you want to delete. Here is a sample command that sends a &lt;code>DELETE&lt;/code> request to our hosted version of &lt;a href="https://httpbin.scrapingbee.com/" target="_blank" >HTTPBin&lt;/a>:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ curl -X DELETE &amp;#34;https://httpbin.scrapingbee.com/delete&amp;#34;
&lt;/code>&lt;/pre>&lt;h2 id="what-is-curl">What is cURL?&lt;/h2>
&lt;p>cURL is an open-source command-line tool used to transfer data to and from a server. It is extremely versatile and supports various protocols including HTTP, FTP, SMTP, and many others. It is generally used to test and interact with APIs, download files, and perform various other tasks involving network communication.&lt;/p></description></item><item><title>How to send a GET request using cURL?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/send-get-request-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/send-get-request-curl/</guid><description>&lt;p>You can send a &lt;code>GET&lt;/code> request using cURL via the following command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl &amp;lt;url&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It is quite simple because &lt;code>GET&lt;/code> is the default request method used by cURL.&lt;/p>
&lt;p>Replace &lt;code>&amp;lt;url&amp;gt;&lt;/code> with the URL of the resource you want to delete. Here is a sample command that sends a &lt;code>GET&lt;/code> request to our hosted version of &lt;a href="https://httpbin.scrapingbee.com/" target="_blank" >HTTPBin&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ curl &lt;span style="color:#e6db74">&amp;#34;https://httpbin.scrapingbee.com/anything?json&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="what-is-curl">What is cURL?&lt;/h2>
&lt;p>cURL is an open-source command-line tool used to transfer data to and from a server. It is extremely versatile and supports various protocols including HTTP, FTP, SMTP, and many others. It is generally used to test and interact with APIs, download files, and perform various other tasks involving network communication.&lt;/p></description></item><item><title>How to send Basic Auth credentials using cURL?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/basic-auth-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/basic-auth-curl/</guid><description>&lt;p>To send Basic Auth credentials using cURL you need to use the -u option with &amp;quot;login:password&amp;quot; where &amp;quot;login&amp;quot; and &amp;quot;password&amp;quot; are your credentials.&lt;/p>
&lt;p>Here is a sample command that sends a &lt;code>GET&lt;/code> request to our hosted version of &lt;a href="https://httpbin.scrapingbee.com/" target="_blank" >HTTPBin&lt;/a> with Basic Auth credentials:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl https://httpbin.scrapingbee.com/basic-auth/login/password &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> -u &lt;span style="color:#e6db74">&amp;#34;login:password&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When using this method, the credentials are sent in plain text, if used over HTTP, so it is not recommended to use it in production.&lt;/p></description></item><item><title>How to send HTTP header using cURL?</title><link>https://www.scrapingbee.com/webscraping-questions/curl/http-header-curl/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/curl/http-header-curl/</guid><description>&lt;p>To send HTTP header using cURL you just have to use the -H command line option with the header name and value. Here is a sample command that sends a &lt;code>GET&lt;/code> request to our hosted version of &lt;a href="https://httpbin.scrapingbee.com/" target="_blank" >HTTPBin&lt;/a> with a custom HTTP header:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl https://httpbin.scrapingbee.com/headers?json &lt;span style="color:#ae81ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">&lt;/span> -H &lt;span style="color:#e6db74">&amp;#34;custom-header: custom-value&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>And since this particular URL returns the headers sent to the server in JSON format, the response will be:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;headers&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;Custom-Header&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;custom-value&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;Host&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;httpbin.scrapingbee.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;User-Agent&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;curl/7.86.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can also pass several headers by using the -H option multiple times:&lt;/p></description></item><item><title>How to turn HTML to text in Python?</title><link>https://www.scrapingbee.com/webscraping-questions/data-parsing/how-to-turn-html-to-text-in-python/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/data-parsing/how-to-turn-html-to-text-in-python/</guid><description>&lt;p>You can easily extract text from an HTML page using any of the famous HTML parsing libraries in Python. Here is an example of extracting text using BeautifulSoup's &lt;code>get_text()&lt;/code> method:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> bs4 &lt;span style="color:#f92672">import&lt;/span> BeautifulSoup
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>soup &lt;span style="color:#f92672">=&lt;/span> BeautifulSoup(&lt;span style="color:#e6db74">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;lt;body&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;h1 class=&amp;#34;product&amp;#34;&amp;gt;Product Details&amp;lt;/h1&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div class=&amp;#34;details&amp;#34;&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;Remaining Stock&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;div&amp;gt;5&amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74"> &amp;lt;/div&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;lt;/body&amp;gt;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#e6db74">&amp;#34;&amp;#34;&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>body &lt;span style="color:#f92672">=&lt;/span> soup&lt;span style="color:#f92672">.&lt;/span>find(&lt;span style="color:#e6db74">&amp;#39;body&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>body_text &lt;span style="color:#f92672">=&lt;/span> body&lt;span style="color:#f92672">.&lt;/span>get_text()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print(body_text)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It will produce the following output:&lt;/p>
&lt;pre tabindex="0">&lt;code>
Product Details

Remaining Stock
5
&lt;/code>&lt;/pre>&lt;p>Selenium also offers something similar. You can use the &lt;code>.text&lt;/code> property of an &lt;code>HTMLElement&lt;/code> to extract text from it.&lt;/p></description></item><item><title>How to use XPath selectors in Python?</title><link>https://www.scrapingbee.com/webscraping-questions/xpath/how-to-use-xpath-selectors-in-python/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/xpath/how-to-use-xpath-selectors-in-python/</guid><description>&lt;p>There are multiple ways for using XPath selectors in Python. One popular option is to use &lt;code>lxml&lt;/code> and &lt;code>BeautifulSoup&lt;/code> and pair it with &lt;code>requests&lt;/code>. And the second option is to use Selenium.&lt;/p>
&lt;p>Here is some sample code for using lxml, BeautifulSoup, and Requests for opening up the ScrapingBee homepage and extracting the text from &lt;code>h1&lt;/code> tag using XPath:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> requests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> lxml &lt;span style="color:#f92672">import&lt;/span> etree
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> bs4 &lt;span style="color:#f92672">import&lt;/span> BeautifulSoup
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>html &lt;span style="color:#f92672">=&lt;/span> requests&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>soup &lt;span style="color:#f92672">=&lt;/span> BeautifulSoup(html&lt;span style="color:#f92672">.&lt;/span>text, &lt;span style="color:#e6db74">&amp;#34;html.parser&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dom &lt;span style="color:#f92672">=&lt;/span> etree&lt;span style="color:#f92672">.&lt;/span>HTML(str(soup))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>first_h1_text &lt;span style="color:#f92672">=&lt;/span> dom&lt;span style="color:#f92672">.&lt;/span>xpath(&lt;span style="color:#e6db74">&amp;#39;//h1&amp;#39;&lt;/span>)[&lt;span style="color:#ae81ff">0&lt;/span>]&lt;span style="color:#f92672">.&lt;/span>text
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print(first_h1_text)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Output: Tired of getting blocked while scraping the web?&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here is some sample code for doing the same with Selenium:&lt;/p></description></item><item><title>Scraper doesn't see the data I see in the browser - why?</title><link>https://www.scrapingbee.com/webscraping-questions/data-parsing/scraper-doesnt-see-the-data-i-see/</link><pubDate>Thu, 19 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/data-parsing/scraper-doesnt-see-the-data-i-see/</guid><description>&lt;p>This issue can often show up when you are using an HTML parser like BeautifulSoup or lxml instead of a browser engine via Selenium or Puppeteer. The data you are seeing in the browser might be getting generated via client-side JavaScript after the page load. BeautifulSoup, lxml, and similar HTML parsing libraries do not execute JavaScript.&lt;/p>
&lt;p>There are two options to solve this issue:&lt;/p>
&lt;ol>
&lt;li>Use a browser automation framework like Selenium or Puppeteer and execute the JavaScript before attempting data extraction&lt;/li>
&lt;li>Search for required data in the &lt;code>&amp;lt;script&amp;gt;&lt;/code> tags. Most of the time, the required data is hidden inside &lt;code>&amp;lt;script&amp;gt;&lt;/code> tags as JavaScript variables and then rendered on the page after the page load&lt;/li>
&lt;/ol></description></item><item><title>How to find HTML elements by class?</title><link>https://www.scrapingbee.com/webscraping-questions/css_selectors/how-to-find-html-elements-by-class/</link><pubDate>Wed, 18 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/css_selectors/how-to-find-html-elements-by-class/</guid><description>&lt;p>You can find HTML elements by class via multiple ways in Python. The method you choose will depend on the library you are using. Some of the most famous libraries that allow selecting HTML elements by class are &lt;code>BeautifulSoup&lt;/code> and &lt;code>Selenium&lt;/code>.&lt;/p>
&lt;p>You can use the &lt;code>find&lt;/code> or &lt;code>find_all&lt;/code> methods of BeautifulSoup and pass in a &lt;code>class_&lt;/code> argument to match elements with a particular class. This is how it will look like:&lt;/p></description></item><item><title>How to fix ConnectTimeout error in Python requests?</title><link>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-connecttimeout-error-in-python-requests/</link><pubDate>Wed, 18 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-connecttimeout-error-in-python-requests/</guid><description>&lt;p>&lt;code>ConnectTimeout&lt;/code> occurs when the website you are trying to connect to doesn't respond to your connect request in time. You can simulate this error for a website by using a custom connect timeout in your &lt;code>request.get()&lt;/code> call:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> requests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Timeout is in seconds&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>connect_timeout &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0.1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>read_timeout &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>response &lt;span style="color:#f92672">=&lt;/span> requests&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com/&amp;#34;&lt;/span>, timeout&lt;span style="color:#f92672">=&lt;/span>(connect_timeout, read_timeout))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you are sure your IP is not being blocked by the website and the website is working fine, then you can fix this error by increasing the connect timeout value:&lt;/p></description></item><item><title>How to fix MissingSchema error in Python requests?</title><link>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-missingschema-error-in-python-requests/</link><pubDate>Wed, 18 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-missingschema-error-in-python-requests/</guid><description>&lt;p>&lt;code>MissingSchema&lt;/code> occurs when you don't provide the complete URL to &lt;code>requests&lt;/code>. This often means you skipped &lt;code>http://&lt;/code> or &lt;code>https://&lt;/code> and/or provided a relative URL.&lt;/p>
&lt;p>You can fix this error by making use of the &lt;code>urljoin&lt;/code> function from the &lt;code>urllib.parse&lt;/code> library to join URLs before making a remote request. The solution will look something like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> urllib.parse &lt;span style="color:#f92672">import&lt;/span> urljoin
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> requests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>url &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>relative_url &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;/path/to/resource&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>final_url &lt;span style="color:#f92672">=&lt;/span> urljoin(url, relative_url)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>html &lt;span style="color:#f92672">=&lt;/span> requests&lt;span style="color:#f92672">.&lt;/span>get(final_url)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>urljoin&lt;/code> will merge two URLs only if the second argument is a relative path. For example, the following sample code will print &lt;code>https://scrapingbee.com&lt;/code>:&lt;/p></description></item><item><title>How to fix ReadTimeout error in Python requests?</title><link>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-readtimeout-error-in-python-requests/</link><pubDate>Wed, 18 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-readtimeout-error-in-python-requests/</guid><description>&lt;p>&lt;code>ReadTimeout&lt;/code> occurs when the website you are trying to connect to doesn't send back data in time. You can simulate this error for a website by using a custom read timeout in your &lt;code>request.get()&lt;/code> call:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> requests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Timeout is in seconds&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>connect_timeout &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>read_timeout &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0.1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>response &lt;span style="color:#f92672">=&lt;/span> requests&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com/&amp;#34;&lt;/span>, timeout&lt;span style="color:#f92672">=&lt;/span>(connect_timeout, read_timeout))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you are sure your IP is not being blocked by the website and the website just needs more time before returning data, then you can fix this error by increasing the read timeout:&lt;/p></description></item><item><title>How to fix SSLError in Python requests?</title><link>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-ssl-error-in-python-requests/</link><pubDate>Wed, 18 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-ssl-error-in-python-requests/</guid><description>&lt;p>&lt;code>SSLError&lt;/code> occurs when you request a remote URL that does not provide a trusted SSL certificate. The easiest way to fix this issue is to disable SSL verification for that particular web address by passing in &lt;code>verify=False&lt;/code> as an argument to the method calls. Just make sure you are not sending any sensitive data in your request.&lt;/p>
&lt;p>Here is some sample code that disables SSL verification:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> requests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>response &lt;span style="color:#f92672">=&lt;/span> requests&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;https://example.com/&amp;#34;&lt;/span>, verify&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">False&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can optionally provide a custom certificate for the website to fix this error as well. Here is some sample code for providing a custom &lt;code>.pem&lt;/code> certificate file to &lt;code>requests&lt;/code>:&lt;/p></description></item><item><title>How to fix TooManyRedirects error in Python requests?</title><link>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-toomanyredirects-error-in-python-requests/</link><pubDate>Wed, 18 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/requests/how-to-fix-toomanyredirects-error-in-python-requests/</guid><description>&lt;p>&lt;code>TooManyRedirects&lt;/code> error occurs when the request redirects continuously. By default, &lt;code>requests&lt;/code> has a limit of 30 redirects. If it encounters more than 30 redirects in a row then it throws this error.&lt;/p>
&lt;p>Firstly, you should make sure that the website is not buggy. There aren't a lot of scenarios where more than 30 redirects make sense. Maybe the website is detecting your requests as automated and intentionally sending you in a redirection loop.&lt;/p></description></item><item><title>How to select HTML elements by text using CSS Selectors?</title><link>https://www.scrapingbee.com/webscraping-questions/css_selectors/how-to-select-html-elements-by-text-using-css-selectors/</link><pubDate>Wed, 18 Jan 2023 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/css_selectors/how-to-select-html-elements-by-text-using-css-selectors/</guid><description>&lt;p>There used to be a way to select HTML elements by text using CSS Selectors by making use of &lt;code>:contains(text)&lt;/code>. However, this has been deprecated for a long time and is no longer supported by the W3C standard. If you want to select an element by text, you should look into other options. Most Python libraries provide a way for you to do so.&lt;/p>
&lt;p>For instance, you can select an element by text using XPath Selectors in Selenium like this:&lt;/p></description></item><item><title>Using Parsel to Extract Text from HTML in Python</title><link>https://www.scrapingbee.com/blog/parsel-python/</link><pubDate>Tue, 11 Oct 2022 08:10:27 +0200</pubDate><guid>https://www.scrapingbee.com/blog/parsel-python/</guid><description>&lt;p>Web scraping describes the ability to extract or “scrape” data from the internet using an automated program. These programs conduct web queries and retrieve HTML data, which is then parsed to obtain the required information.&lt;/p>
&lt;p>Whether you need to collect large amounts of data, data from multiple sources, or data not available through APIs, automating the extraction of this information can save you a lot of time and effort.&lt;/p>
&lt;p>In this tutorial, you’ll learn how to use the &lt;a href="https://parsel.readthedocs.io/en/latest/usage.html" target="_blank" >Parsel&lt;/a> Python library to create your own web scraping scripts. Specifically, you’ll learn how to parse HTML documents using Selectors and how to extract data from HTML markup using CSS and XPath. You’ll also learn about removing the elements using the selector object. By the end of the article, you’ll be able to create your own scraping scripts and complex expressions to retrieve data from a web page using the Parsel library.&lt;/p></description></item><item><title>What is Web Scraping</title><link>https://www.scrapingbee.com/blog/what-is-web-scraping/</link><pubDate>Thu, 25 Aug 2022 09:24:27 +0000</pubDate><guid>https://www.scrapingbee.com/blog/what-is-web-scraping/</guid><description>&lt;h2 id="what-is-web-scraping">What is Web Scraping?&lt;/h2>
&lt;p>&lt;a href="https://www.scrapingbee.com/" target="_blank" >Web scraping&lt;/a> has many names: web crawling, data extraction, web harvesting, and a few more.&lt;/p>
&lt;p>While there are subtle nuances between these terms, the overall idea is the same: &lt;em>to gather data from a website, transform that data to a custom format, and persist it for later use&lt;/em>&lt;/p>
&lt;p>Search engines are a great example for, both, web crawling and web scraping. They are continuously scouting the web, with the aim to create a &amp;quot;library&amp;quot; of sites and their content, so that when a user then searches for a particular search query they can easily and quickly provide a list of all sites on that particular topic. Just imagine a web without search engines 😨.&lt;/p></description></item><item><title>What is the best framework for web scraping with Python?</title><link>https://www.scrapingbee.com/webscraping-questions/python/what-is-the-best-framework-for-web-scraping-with-python/</link><pubDate>Thu, 07 Jul 2022 09:10:00 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/what-is-the-best-framework-for-web-scraping-with-python/</guid><description>&lt;h2 id="scrapy">Scrapy&lt;/h2>
&lt;p>Scrapy framework is a robust and complete web scraping tool that allows you to:&lt;/p>
&lt;ul>
&lt;li>explore a whole website from a single URL (crawling)&lt;/li>
&lt;li>rate-limit the exploration to avoid getting banned&lt;/li>
&lt;li>generates data export in CSV, JSON, and XML&lt;/li>
&lt;li>storing the data in S3, databases, etc &lt;/li>
&lt;li>cookies and session handling&lt;/li>
&lt;li>HTTP features like compression, authentication, caching&lt;/li>
&lt;li>user-agent spoofing&lt;/li>
&lt;li>robots.txt&lt;/li>
&lt;li>crawl depth restriction&lt;/li>
&lt;li>and more&lt;/li>
&lt;/ul>
&lt;p>However, this framework can be a bit hard to use, especially for beginners. If you want to learn this framework, check out our &lt;a href="https://www.scrapingbee.com/blog/web-scraping-with-scrapy/" >Scrapy tutorial&lt;/a>.&lt;/p></description></item><item><title>Which is better for web scraping Python or JavaScript?</title><link>https://www.scrapingbee.com/webscraping-questions/python/which-is-better-for-web-scraping-python-or-javascript/</link><pubDate>Thu, 07 Jul 2022 09:10:00 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/which-is-better-for-web-scraping-python-or-javascript/</guid><description>&lt;h2 id="short-answer-python">Short answer: Python!&lt;/h2>
&lt;p>Long answer: it depends.&lt;/p>
&lt;p>If you're scraping simple websites with a simple HTTP request. Python is your best bet.&lt;/p>
&lt;p>Libraries such as &lt;code>requests&lt;/code> or &lt;code>HTTPX&lt;/code> makes it very easy to scrape websites that don't require JavaScript to work correctly. Python offers a lot of simple-to-use &lt;a href="https://www.scrapingbee.com/blog/best-python-http-clients/" >HTTP clients&lt;/a>.&lt;/p>
&lt;p>And once you get the response, it's also very easy to &lt;a href="https://www.scrapingbee.com/blog/python-web-scraping-beautiful-soup/" >parse the HTML with BeautifulSoup&lt;/a> for example. &lt;br> &lt;/p>
&lt;p>Here is a very quick example of how simple it is to scrape a website and extract its title:&lt;/p></description></item><item><title>Which is better Scrapy or BeautifulSoup?</title><link>https://www.scrapingbee.com/webscraping-questions/python/which-is-better-scrapy-or-beautifulsoup/</link><pubDate>Mon, 04 Jul 2022 09:10:00 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/which-is-better-scrapy-or-beautifulsoup/</guid><description>&lt;h2 id="scrapy">Scrapy&lt;/h2>
&lt;p>Scrapy is a more robust, feature-complete, more extensible, and more maintained web scraping tool.&lt;/p>
&lt;p>Scrapy allows you to crawl, extract, and store a full website. BeautilfulSoup on the other end only allows you to parse HTML and extract the information you're looking for.&lt;/p>
&lt;p>However, Scrapy is much harder to use, this is why we suggest you check out this tutorial showing you &lt;a href="https://www.scrapingbee.com/blog/web-scraping-with-scrapy/" >how to start with Scrapy&lt;/a> if you want to use it.&lt;/p></description></item><item><title>Introduction to Chrome Headless with Java</title><link>https://www.scrapingbee.com/blog/introduction-to-chrome-headless/</link><pubDate>Tue, 21 Jun 2022 09:45:11 +0100</pubDate><guid>https://www.scrapingbee.com/blog/introduction-to-chrome-headless/</guid><description>&lt;p>In previous articles, we talked about two different approaches to perform basic &lt;a href="https://www.scrapingbee.com/java-webscraping-book/" target="_blank" >web scraping with Java&lt;/a>. &lt;em>HtmlUnit&lt;/em> for &lt;a href="https://www.scrapingbee.com/blog/introduction-to-web-scraping-with-java/" >scraping basic sites&lt;/a> and &lt;em>PhantomJS&lt;/em> for &lt;a href="https://www.scrapingbee.com/blog/web-scraping-handling-ajax-website/" >scraping dynamic sites which make heavy use of JavaScript&lt;/a>.&lt;/p>
&lt;p>Both are tremendous tools and there's a reason why PhantomJS happened to be the leader in that market for a long time. Nonetheless, there occasionally were issues, either with performance or with support of web standards. Then, in 2017, there was a real game changer in this field, when both, Google and Mozilla, started to natively support a feature called &lt;em>headless mode&lt;/em> in their respective browsers.&lt;/p></description></item><item><title>How to put scraped website data into Google Sheets</title><link>https://www.scrapingbee.com/blog/scrape-content-google-sheet/</link><pubDate>Wed, 09 Mar 2022 08:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/blog/scrape-content-google-sheet/</guid><description>&lt;p>The process of scraping at scale can be challenging. You have to handle javascript rendering, &lt;a href="https://www.scrapingbee.com/blog/introduction-to-chrome-headless/" >chrome headless&lt;/a>, captchas, and proxy configuration. Our &lt;a href="https://www.scrapingbee.com/" target="_blank" >scraping tool&lt;/a> offers all the above in one API.&lt;/p>
&lt;p>Paired with &lt;a href="https://www.make.com/en" target="_blank" >Make&lt;/a> (formerly known as Integromat), we will build a no-code workflow to perform any number of actions with the scraped data. &lt;a href="https://www.make.com/en" target="_blank" >Make&lt;/a> allows you to design, build, and automate anything—from tasks and workflows to apps and systems—without coding.&lt;/p></description></item><item><title>Pyppeteer: the Puppeteer for Python Developers</title><link>https://www.scrapingbee.com/blog/pyppeteer/</link><pubDate>Thu, 24 Feb 2022 09:10:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/pyppeteer/</guid><description>&lt;p>The web acts like a giant, powerful database, with tons of data being generated every single day. With the rise of trends such as big data and data science, data has become more useful than ever, being used to train machine learning algorithms, generate insights, forecast the future, and many other purposes. Extracting this data manually, page by page, can be a very slow and time consuming process. The process of &lt;em>web scraping&lt;/em> can be a helpful solution, programmatically extracting data from the web. Thanks to browser automation, which emulates human actions such as clicking and scrolling through a web system, users can simply and efficiently gather useful data without being hindered by a manual process.&lt;/p></description></item><item><title>C# HTML parsers</title><link>https://www.scrapingbee.com/blog/csharp-html-parser/</link><pubDate>Wed, 09 Feb 2022 09:02:00 +0000</pubDate><guid>https://www.scrapingbee.com/blog/csharp-html-parser/</guid><description>&lt;p>Web scraping is essential when trying to retrieve massive amounts of data from the internet, and the most crucial part of the process is HTML parsing, or extracting needed data from HTML code.&lt;/p>
&lt;p>If you need an HTML parser, you may be overwhelmed by the many choices. These are the basic criteria to keep in mind:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>It must be open-source and free.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>It must offer reasonable documentation.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The library must be actively maintained.&lt;/p></description></item><item><title>Using wget with a proxy</title><link>https://www.scrapingbee.com/blog/wget-proxy/</link><pubDate>Mon, 27 Sep 2021 11:10:27 +0200</pubDate><guid>https://www.scrapingbee.com/blog/wget-proxy/</guid><description>&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>In this article, you will examine how to use wget commands, to retrieve or transfer data, with a proxy server. Proxy servers are often referenced as the gateway between you and the world wide web and can make accessing data more secure. Feel free to learn more about proxies &lt;a href="https://www.varonis.com/blog/what-is-a-proxy-server/" target="_blank" >here&lt;/a>, but let's get started!&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAAxElEQVR4nKyRQUuFQBRGZ&amp;#43;5oBvEerjTCVRD0//9HEVEKFS0KpphGsham43i/dulihJR3lsMczoUvAiC2QpvNgAyIpVvADMai7H76p&amp;#43;vKvH7MH/3gX&amp;#43;5K17nyVhv9ySMHZEB8mfejY&amp;#43;WH0er6Lx/FUZpn1dWjtq21bbgMhu/adO93SYN&amp;#43;KgCoG36zPrl/KPITUhSQScn9aeGGuHOxSnbTJwhrvs8vsuLyrL55npflf6YCQ5IUQjAzEa2Tlzjozqv4DQAA///RvWuw7TP8LAAAAABJRU5ErkJggg==); background-size: cover">
 &lt;svg width="460" height="250" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/wget-proxy/cover.png 460 '
 data-src="https://www.scrapingbee.com/blog/wget-proxy/cover.png"
 width="460" height="250"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/wget-proxy/cover.png 460'
 src="https://www.scrapingbee.com/blog/wget-proxy/cover.png"
 width="460" height="250"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h2 id="prerequisites--installation">Prerequisites &amp;amp; Installation&lt;/h2>
&lt;p>This article is for a wide range of developers, ✨&lt;em>including you juniors&lt;/em>!✨ But to get the most of the material, it is advised to:&lt;/p></description></item><item><title>Using cURL with a proxy</title><link>https://www.scrapingbee.com/blog/curl-proxy/</link><pubDate>Wed, 14 Jul 2021 11:10:27 +0200</pubDate><guid>https://www.scrapingbee.com/blog/curl-proxy/</guid><description>&lt;p>In this article, you will learn how to use the command line tool cURL to transfer data using a proxy server. A proxy server acts as a middleman between a client and a destination server. The client can forward each command they want to execute to the proxy and then the proxy executes it and returns the result to the client.&lt;/p>
&lt;p>We might want to do this when say data on a target service uses geo localization to restrict the data displayed, or completely blocks access to clients in certain countries. On a variety of global shopping sites this approach is used to display prices in a local currency - e.g. Euros rather than dollars. If we were to visit the site directly, we would end up with data in the wrong currency. By using a proxy, we can fetch the data we require based on the locale of the proxy.&lt;/p></description></item><item><title>How to download a file with Puppeteer?</title><link>https://www.scrapingbee.com/blog/download-file-puppeteer/</link><pubDate>Fri, 23 Apr 2021 11:10:27 +0200</pubDate><guid>https://www.scrapingbee.com/blog/download-file-puppeteer/</guid><description>&lt;p>In this article, we will discuss how to efficiently download files with Puppeteer. Automating file downloads can sometimes be complicated. You perhaps need to explicitly specify a download location, download multiple files at the same time, and so on. Unfortunately, all these use cases are not well documented. That’s why I wrote this article to share some of the tips and tricks that I came up with over the years while working with Puppeteer. We will go through several practical examples and take a deep dive into Puppeteer’s APIs used for file download. Exciting! let’s get started.&lt;/p></description></item><item><title>Scraping the web with Playwright</title><link>https://www.scrapingbee.com/blog/playwright-web-scraping/</link><pubDate>Wed, 07 Apr 2021 11:27:59 +0000</pubDate><guid>https://www.scrapingbee.com/blog/playwright-web-scraping/</guid><description>&lt;p>Playwright is a browser automation library for Node.js (similar to Selenium or Puppeteer) that allows reliable, fast, and efficient browser automation with a few lines of code. Its simplicity and powerful automation capabilities make it an ideal tool for web scraping and data mining. It also comes with headless browser support (more on headless browsers later on in the article). The biggest difference compared to Puppeteer is its cross-browser support. In this article, we will discuss:&lt;/p></description></item><item><title>How do I get a title in Cheerio?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/how-do-i-get-a-title-in-cheerio/</link><pubDate>Sat, 16 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/how-do-i-get-a-title-in-cheerio/</guid><description>&lt;p>You can get a title in Cheerio by using the &lt;code>title&lt;/code> as the selector expression and then executing the &lt;code>text()&lt;/code> method. Here is some sample code that extracts and prints the title from the ScrapingBee homepage:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">fetch&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://scrapingbee.com&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">then&lt;/span>(&lt;span style="color:#66d9ef">function&lt;/span> (&lt;span style="color:#a6e22e">response&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">response&lt;/span>.&lt;span style="color:#a6e22e">text&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> })
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">then&lt;/span>(&lt;span style="color:#66d9ef">function&lt;/span> (&lt;span style="color:#a6e22e">html&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Load HTML in Cheerio
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">html&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Use `title` as a selector and extract
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// the text using the `text()` method
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;title&amp;#39;&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> })
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#66d9ef">catch&lt;/span>(&lt;span style="color:#66d9ef">function&lt;/span> (&lt;span style="color:#a6e22e">err&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Failed to fetch page: &amp;#39;&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> });
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How do I get links in Cheerio?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/how-do-i-get-links-in-cheerio/</link><pubDate>Sat, 16 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/how-do-i-get-links-in-cheerio/</guid><description>&lt;p>You can get links in Cheerio by using the relevant selector expression and then using the &lt;code>.attr()&lt;/code> method to extract the &lt;code>href&lt;/code> from the nodes.&lt;/p>
&lt;p>Here is some sample code that extracts all the anchor tags from the ScrapingBee homepage and then prints the text and &lt;code>href&lt;/code> from the tags in the console:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-javascript" data-lang="javascript">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">require&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;cheerio&amp;#39;&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a6e22e">fetch&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;https://scrapingbee.com&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">then&lt;/span>(&lt;span style="color:#66d9ef">function&lt;/span> (&lt;span style="color:#a6e22e">response&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">return&lt;/span> &lt;span style="color:#a6e22e">response&lt;/span>.&lt;span style="color:#a6e22e">text&lt;/span>();
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> })
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#a6e22e">then&lt;/span>(&lt;span style="color:#66d9ef">function&lt;/span> (&lt;span style="color:#a6e22e">html&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Load the HTML in Cheerio
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">cheerio&lt;/span>.&lt;span style="color:#a6e22e">load&lt;/span>(&lt;span style="color:#a6e22e">html&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Select all anchor tags from the page
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#66d9ef">const&lt;/span> &lt;span style="color:#a6e22e">links&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Loop over all the anchor tags
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#a6e22e">links&lt;/span>.&lt;span style="color:#a6e22e">each&lt;/span>((&lt;span style="color:#a6e22e">index&lt;/span>, &lt;span style="color:#a6e22e">value&lt;/span>) =&amp;gt; {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Print the text from the tags and the associated href
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">value&lt;/span>).&lt;span style="color:#a6e22e">text&lt;/span>(), &lt;span style="color:#e6db74">&amp;#34; =&amp;gt; &amp;#34;&lt;/span>, &lt;span style="color:#a6e22e">$&lt;/span>(&lt;span style="color:#a6e22e">value&lt;/span>).&lt;span style="color:#a6e22e">attr&lt;/span>(&lt;span style="color:#e6db74">&amp;#34;href&amp;#34;&lt;/span>));
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> })
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> })
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> .&lt;span style="color:#66d9ef">catch&lt;/span>(&lt;span style="color:#66d9ef">function&lt;/span> (&lt;span style="color:#a6e22e">err&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#a6e22e">console&lt;/span>.&lt;span style="color:#a6e22e">log&lt;/span>(&lt;span style="color:#e6db74">&amp;#39;Failed to fetch page: &amp;#39;&lt;/span>, &lt;span style="color:#a6e22e">err&lt;/span>);
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> });
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Is Cheerio faster than Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/is-cheerio-faster-than-puppeteer/</link><pubDate>Sat, 16 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/is-cheerio-faster-than-puppeteer/</guid><description>&lt;p>Cheerio is much faster than Puppeteer. This is because Cheerio is just a DOM parser and helps us traverse raw HTML and XML data. It does not execute any Javascript on the page. On the other hand, Puppeteer runs a full browser and executes all the Javascript, and processes all XHR requests.&lt;/p>
&lt;p>You won't be able to observe the speed difference in small projects but it compounds on large projects and becomes very apparent.&lt;/p></description></item><item><title>What is Cheerio in JavaScript?</title><link>https://www.scrapingbee.com/webscraping-questions/cheerio/what-is-cheerio-in-javascript/</link><pubDate>Sat, 16 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/cheerio/what-is-cheerio-in-javascript/</guid><description>&lt;p>Cheerio is a fast, lean implementation of core jQuery. It helps in traversing the DOM using a friendly and familiar API and works both in the browser and the server. It simply parses the HTML and XML and does not execute any Javascript in the document or load any external resources. This makes Cheerio extremely fast when compared to full browser automation tools like Puppeteer and Selenium. However, if a project requires executing Javascript on the page or executing background XHR requests then Cheerio is not the right tool for the job.&lt;/p></description></item><item><title>Can I use XPath selectors in BeautifulSoup?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/can-i-use-xpath-selectors-in-beautifulsoup/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/can-i-use-xpath-selectors-in-beautifulsoup/</guid><description>&lt;h2 id="what-is-xpath">What is XPath?&lt;/h2>
&lt;p>XPath is an expression language designed to support the query or transformation of XML documents. It was defined by the W3C and can be used to navigate through elements and attributes in an XML document.&lt;/p>
&lt;h2 id="can-we-use-xpath-with-beautifulsoup">Can we use XPath with BeautifulSoup?&lt;/h2>
&lt;p>Technically, no. But we can BeautifulSoup4 with lxml Python library to achieve that.&lt;/p>
&lt;p>To install lxml, all you have to do is run this command: &lt;code>pip install lxml&lt;/code>, and that's it!&lt;/p></description></item><item><title>How long does it take to learn web scraping in Python?</title><link>https://www.scrapingbee.com/webscraping-questions/python/how-long-does-it-take-to-learn-web-scraping-in-python/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/how-long-does-it-take-to-learn-web-scraping-in-python/</guid><description>&lt;p> &lt;/p>
&lt;p>Depending on your Python knowledge, and how much time you're allocating to learn this skill, it could take anywhere from two days to two years.&lt;/p>
&lt;p>- Generally, it takes about one to six months to learn the fundamentals of Python, that means being able to work with variables, objects &amp;amp; data structures, flow control (conditions &amp;amp; loops), file I/O, functions, classes and basic web scraping tools such as &lt;code>requests&lt;/code>​​​​​ library.&lt;/p></description></item><item><title>How to capture background requests and responses in Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-capture-background-requests/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-capture-background-requests/</guid><description>&lt;p>You can use the page.on() function to capture the background requests and responses that go in the background when a request is made.&lt;/p>
&lt;p>For example, to capture the background requests of ScrapingBee's home page, you can use this code:&lt;/p>
&lt;pre tabindex="0">&lt;code>const puppeteer = require(&amp;#39;puppeteer&amp;#39;)
try {
 (async () =&amp;gt; {
 const browser = await puppeteer.launch();
 const page = await browser.newPage();
 var requests = [];
 var responses = [];

 page.on(&amp;#39;request&amp;#39;, request =&amp;gt; {
 requests.push(request);
 });

 page.on(&amp;#39;response&amp;#39;, response =&amp;gt; {
 responses.push(response);
 });
 await page.goto(&amp;#39;https://scrapingbee.com&amp;#39;);
 await browser.close();
 console.log(requests);
 console.log(responses)
 })()
} catch (err) {
 console.error(err);
}
&lt;/code>&lt;/pre></description></item><item><title>How to extract data from website using selenium python?</title><link>https://www.scrapingbee.com/webscraping-questions/python/how-to-extract-data-from-website-using-selenium-python/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/how-to-extract-data-from-website-using-selenium-python/</guid><description>&lt;p> &lt;/p>
&lt;p>You can use Selenium to scrape data from specific elements of a web page. Let's take the same example from our previous post: &lt;a href="https://www.scrapingbee.com/webscraping-questions/python/how-to-web-scrape-with-python-selenium/" target="_blank" >How to web scrape with python selenium?&lt;/a>&lt;/p>
&lt;p>We have used this Python code (with Selenium) to wait for the content to load by adding some waiting time:&lt;/p>
&lt;pre tabindex="0">&lt;code>from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

options = Options()
options.headless = True

driver = webdriver.Chrome(options=options, executable_path=&amp;#34;PATH_TO_CHROMEDRIVER&amp;#34;) # Setting up the Chrome driver
driver.get(&amp;#34;https://demo.scrapingbee.com/content_loads_after_5s.html&amp;#34;)
time.sleep(6) # Sleep for 6 seconds
print(driver.page_source)
driver.quit()
&lt;/code>&lt;/pre>&lt;p>And we've had this result:&lt;/p></description></item><item><title>How to find all links using BeautifulSoup and Python?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-all-links-using-beautifulsoup-and-python/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-all-links-using-beautifulsoup-and-python/</guid><description>&lt;p>You can find all of the links, anchor &lt;code>&amp;lt;a&amp;gt;&lt;/code> elements, on a web page by using the &lt;code>find_all&lt;/code> function of BeautifulSoup4, with the tag &lt;code>&amp;quot;a&amp;quot;&lt;/code> as a parameter for the function.&lt;/p>
&lt;p>Here's a sample code to extract all links from ScrapingBee's blog:&lt;/p>
&lt;pre tabindex="0">&lt;code>import requests
from bs4 import BeautifulSoup

response = requests.get(&amp;#34;https://www.scrapingbee.com/blog/&amp;#34;)
soup = BeautifulSoup(response.content, &amp;#39;html.parser&amp;#39;)

links = soup.find_all(&amp;#34;a&amp;#34;) # Find all elements with the tag &amp;lt;a&amp;gt;
for link in links:
 print(&amp;#34;Link:&amp;#34;, link.get(&amp;#34;href&amp;#34;), &amp;#34;Text:&amp;#34;, link.string)
&lt;/code>&lt;/pre></description></item><item><title>How to find elements by CSS selector in Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-find-elements-by-css-selector-in-puppeteer/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-find-elements-by-css-selector-in-puppeteer/</guid><description>&lt;p>You can use Puppeteer to find elements using CSS selectors with the &lt;code>page.$()&lt;/code> or &lt;code>page.$$()&lt;/code> functions.&lt;/p>
&lt;p>&lt;code>page.$()&lt;/code> returns the first occurence of the CSS selector being used, while &lt;code>page.$$()&lt;/code> returns all elements of the page that match the selector.&lt;/p>
&lt;pre tabindex="0">&lt;code>const puppeteer = require(&amp;#39;puppeteer&amp;#39;);

(async () =&amp;gt; {
 const browser = await puppeteer.launch();
 const page = await browser.newPage();

 // Open Scrapingbee&amp;#39;s website
 await page.goto(&amp;#39;https://scrapingbee.com&amp;#39;);

 // Get the first h1 element using page.$
 let first_h1 = await page.$(&amp;#34;h1&amp;#34;);

 // Get all p elements using page.$$
 let all_p_elements = await page.$$(&amp;#34;p&amp;#34;);

 // Get the textContent of the h1 element
 let h1_value = await page.evaluate(el =&amp;gt; el.textContent, first_h1)

 // The total number of p elements on the page
 let p_total = await page.evaluate(el =&amp;gt; el.length, all_p_elements)

 console.log(h1_value);

 console.log(p_total);

 // Close browser.
 await browser.close();
})();
&lt;/code>&lt;/pre></description></item><item><title>How to find elements by XPath in Puppeteer</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-find-elements-by-xpath-in-puppeteer/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-find-elements-by-xpath-in-puppeteer/</guid><description>&lt;p>You can also use Puppeteer to find elements with XPath instead of CSS selectors, by using the &lt;code>page.$x()&lt;/code> function:&lt;/p>
&lt;pre tabindex="0">&lt;code>const puppeteer = require(&amp;#39;puppeteer&amp;#39;);

(async () =&amp;gt; {
 const browser = await puppeteer.launch();
 const page = await browser.newPage();

 // Open Scrapingbee&amp;#39;s website
 await page.goto(&amp;#39;https://scrapingbee.com&amp;#39;);

 // Get the first h1 element using page.$x
 let first_h1_element = await page.$x(&amp;#39;//*[@id=&amp;#34;content&amp;#34;]/div/section[1]/div/div/div[1]/div/h1&amp;#39;);

 // Get all p elements using page.$x
 let all_p_elements = await page.$x(&amp;#34;//p&amp;#34;);

 // Get the textContent of the h1 element
 let h1_value = await page.evaluate(el =&amp;gt; el.textContent, first_h1_element[0])

 // The total number of p elements on the page
 let p_total = await page.evaluate(el =&amp;gt; el.length, all_p_elements)

 console.log(h1_value);

 console.log(p_total);

 // Close browser.
 await browser.close();
})();
&lt;/code>&lt;/pre></description></item><item><title>How to find elements without specific attributes in BeautifulSoup?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-elements-without-specific-attributes-in-beautifulsoup/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-elements-without-specific-attributes-in-beautifulsoup/</guid><description>&lt;p>To find elements without a specific attribute using BeautifulSoup, we use the &lt;code>attrs&lt;/code> parameter of the function &lt;code>find&lt;/code>, and we specify the attributes as &lt;code>None&lt;/code>.&lt;/p>
&lt;p>For example, to find the paragraph element without a class name, we set &lt;code>attrs={&amp;quot;class&amp;quot;: None}&lt;/code>:&lt;/p>
&lt;pre tabindex="0">&lt;code>import requests
from bs4 import BeautifulSoup

html_content = &amp;#39;&amp;#39;&amp;#39;
&amp;lt;p class=&amp;#34;clean-text&amp;#34;&amp;gt;A very long clean paragraph&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;#34;dark-text&amp;#34;&amp;gt;A very long dark paragraph&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;A very long paragraph without attribute&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;#34;light-text&amp;#34;&amp;gt;A very long light paragraph&amp;lt;/p&amp;gt;
&amp;#39;&amp;#39;&amp;#39;
soup = BeautifulSoup(html_content, &amp;#39;html.parser&amp;#39;)

no_class_attribute = soup.find(&amp;#34;p&amp;#34;, attrs={&amp;#34;class&amp;#34;: None})

print(no_class_attribute)
# Output: &amp;lt;p&amp;gt;A very long paragraph without attribute&amp;lt;/p&amp;gt;
&lt;/code>&lt;/pre></description></item><item><title>How to find HTML element by class with BeautifulSoup?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-html-element-by-class-with-beautifulsoup/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-html-element-by-class-with-beautifulsoup/</guid><description>&lt;p>To extract HTML elements with a specific class name using BeautifulSoup, we use the &lt;code>attrs&lt;/code> parameter of the functions find or find_all.&lt;/p>
&lt;p>For example, to extract ​​​​​the element that has &lt;code>mb-[21px]&lt;/code> as a class name, we use the function &lt;code>find&lt;/code> with &lt;code>attrs={&amp;quot;class&amp;quot;: &amp;quot;mb-[21px]&amp;quot;}&lt;/code> like this:&lt;/p>
&lt;pre tabindex="0">&lt;code>import requests
from bs4 import BeautifulSoup

response = requests.get(&amp;#34;https://www.scrapingbee.com/blog/&amp;#34;)
soup = BeautifulSoup(response.content, &amp;#39;html.parser&amp;#39;)

h1 = soup.find(attrs={&amp;#34;class&amp;#34;: &amp;#34;mb-[21px]&amp;#34;})
print(h1.string)
# Output: The ScrapingBee Blog
&lt;/code>&lt;/pre>&lt;p> &lt;/p></description></item><item><title>How to find HTML elements by attribute using BeautifulSoup?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-html-elements-by-attribute-using-beautifulsoup/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-html-elements-by-attribute-using-beautifulsoup/</guid><description>&lt;p>BeautifulSoup can also be used to scrape elements with custom attributes using the &lt;code>attrs&lt;/code> parameter for the functions &lt;code>find&lt;/code> and &lt;code>find_all&lt;/code>.&lt;/p>
&lt;p>To extract elements with the attribute &lt;code>data-microtip-size=medium&lt;/code>, the tooltips in the pricing table from ScrapingBee's home page, we can set &lt;code>attrs={&amp;quot;data-microtip-size&amp;quot;: &amp;quot;medium&amp;quot;}&lt;/code> &lt;/p>
&lt;pre tabindex="0">&lt;code>import requests
from bs4 import BeautifulSoup

response = requests.get(&amp;#34;https://www.scrapingbee.com&amp;#34;)
soup = BeautifulSoup(response.content, &amp;#39;html.parser&amp;#39;)

tooltips = soup.find_all(&amp;#34;button&amp;#34;, attrs={&amp;#34;data-microtip-size&amp;#34;: &amp;#34;medium&amp;#34;})
for tooltip in tooltips:
 print(tooltip.get(&amp;#34;aria-label&amp;#34;))
# Output: API credits are valid for one month, leftovers are not rolled-over to the next month... credits and concurrency.
&lt;/code>&lt;/pre>&lt;p> &lt;/p></description></item><item><title>How to find HTML elements by multiple tags with BeautifulSoup?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-html-elements-by-multiple-tags-with-beautifulsoup/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-html-elements-by-multiple-tags-with-beautifulsoup/</guid><description>&lt;p>BeautifulSoup also supports selecting  elements by multiple tags. To achieve that, we use the function &lt;code>find_all&lt;/code>, and we send a list of tags we want to extract.&lt;/p>
&lt;p>For example, to extract &lt;code>&amp;lt;h1&amp;gt;&lt;/code> and &lt;code>&amp;lt;b&amp;gt;&lt;/code> elements, we send the tags as a list like this:&lt;/p>
&lt;pre tabindex="0">&lt;code>from bs4 import BeautifulSoup

html_content = &amp;#39;&amp;#39;&amp;#39;
&amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt;Paragraph&amp;lt;/p&amp;gt;
&amp;lt;span&amp;gt;Span&amp;lt;/p&amp;gt;
&amp;lt;b&amp;gt;Bold&amp;lt;/b&amp;gt;
&amp;#39;&amp;#39;&amp;#39;
soup = BeautifulSoup(html_content, &amp;#39;html.parser&amp;#39;)

headers_and_bold_text = soup.find_all([&amp;#34;h1&amp;#34;, &amp;#34;b&amp;#34;])
for element in headers_and_bold_text:
 print(element)
# Output:
# &amp;lt;h1&amp;gt;Header&amp;lt;/h1&amp;gt;
# &amp;lt;b&amp;gt;Bold&amp;lt;/b&amp;gt;
&lt;/code>&lt;/pre></description></item><item><title>How to find sibling HTML nodes using BeautifulSoup and Python?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-sibling-html-nodes-using-beautifulsoup-and-python/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-sibling-html-nodes-using-beautifulsoup-and-python/</guid><description>&lt;p>BeautifulSoup allows us to find sibling elements using 4 main functions:&lt;/p>
&lt;p>- &lt;code>find_previous_sibling&lt;/code> to find the single previous sibling&lt;br>- &lt;code>find_next_sibling&lt;/code> to find the single next sibling&lt;br>- &lt;code>find_all_next&lt;/code> to find all the next siblings&lt;br>- &lt;code>find_all_previous&lt;/code> to find all previous siblings&lt;br>&lt;br>​​​​​​​You can use the code below to find the previous sibling, next sibling, all next siblings and all previous siblings of the Main Paragraph element:&lt;/p>
&lt;pre tabindex="0">&lt;code>from bs4 import BeautifulSoup

html_content = &amp;#39;&amp;#39;&amp;#39;
&amp;lt;p&amp;gt;First paragraph&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Second Paragraph&amp;lt;/p&amp;gt;
&amp;lt;p id=&amp;#34;main&amp;#34;&amp;gt;Main Paragraph&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Fourth Paragraph&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Fifth Pragaraph&amp;lt;/p&amp;gt;
&amp;#39;&amp;#39;&amp;#39;
soup = BeautifulSoup(html_content, &amp;#39;html.parser&amp;#39;)

main_element = soup.find(&amp;#34;p&amp;#34;, attrs={&amp;#34;id&amp;#34;: &amp;#34;main&amp;#34;})

# Find the previous sibling:
print(main_element.find_previous_sibling())

# Find the next sibling:
print(main_element.find_next_sibling())

# Find all next siblings:
print(main_element.find_all_next())

# Find all previous siblings:
print(main_element.find_all_previous())
&lt;/code>&lt;/pre></description></item><item><title>How to save and load cookies in Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-save-and-load-cookies-in-puppeteer/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-save-and-load-cookies-in-puppeteer/</guid><description>&lt;p>Saving and loading cookies with Puppeteer is very straightforward, we can use the &lt;code>page.cookies()&lt;/code> method to get all the cookies of a webpage, and use the &lt;code>page.setCookie()&lt;/code> method to load cookies into a web page:&lt;/p>
&lt;pre tabindex="0">&lt;code>const puppeteer = require(&amp;#39;puppeteer&amp;#39;);

(async () =&amp;gt; {

 const browser = await puppeteer.launch();
 const page = await browser.newPage();

 // Open ScrapingBee&amp;#39;s URL
 await page.goto(&amp;#39;http://scrapingbee.com&amp;#39;);

 // Get all the page&amp;#39;s cookies and save them to the cookies variable
 const cookies = await page.cookies();

 // Open a second website
 await page.goto(&amp;#39;http://httpbin.org/cookies&amp;#39;);

 // Load the previously saved cookies
 await page.setCookie(...cookies);

 // Get the second page&amp;#39;s cookies
 const cookiesSet = await page.cookies();

 console.log(JSON.stringify(cookiesSet));

 await browser.close();

})();
&lt;/code>&lt;/pre></description></item><item><title>How to scrape tables with BeautifulSoup?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-elements-without-a-specific-attribute-in-beautifulsoup/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-find-elements-without-a-specific-attribute-in-beautifulsoup/</guid><description>&lt;p>We can parse a table's content with BeautifulSoup by finding all &lt;code>&amp;lt;tr&amp;gt;&lt;/code> elements, and finding their &lt;code>&amp;lt;td&amp;gt;&lt;/code> or &lt;code>&amp;lt;th&amp;gt;&lt;/code> children.&lt;/p>
&lt;p>Here is an example on how to parse &lt;a target="_blank" rel="noopener" href="https://demo.scrapingbee.com/table_content.html">this demo table&lt;/a> using BeautifulSoup:&lt;/p>
&lt;pre tabindex="0">&lt;code>import requests
from bs4 import BeautifulSoup

response = requests.get(&amp;#34;https://demo.scrapingbee.com/table_content.html&amp;#34;)
soup = BeautifulSoup(response.content, &amp;#39;html.parser&amp;#39;)

data = []
table = soup.find(&amp;#39;table&amp;#39;)
table_body = table.find(&amp;#39;tbody&amp;#39;)

rows = table.find_all(&amp;#39;tr&amp;#39;)
for row in rows:
 cols = row.find_all([&amp;#39;td&amp;#39;, &amp;#39;th&amp;#39;])
 cols = [ele.text.strip() for ele in cols]
 data.append([ele for ele in cols if ele])
print(data)
&lt;/code>&lt;/pre>&lt;p> &lt;/p></description></item><item><title>How to select values between two nodes in BeautifulSoup and Python?</title><link>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-select-values-between-two-nodes-in-beautifulsoup-and-python/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/beautifulsoup/how-to-select-values-between-two-nodes-in-beautifulsoup-and-python/</guid><description>&lt;p>You can select elements between two nodes in BeautifulSoup by looping through the main nodes, and checking the next siblings to see if a main node was reached: &lt;/p>
&lt;pre tabindex="0">&lt;code>from bs4 import BeautifulSoup

html_content = &amp;#39;&amp;#39;&amp;#39;
&amp;lt;h1&amp;gt;Starting Header&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Element 1&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Element 2&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Element 3&amp;lt;/p&amp;gt;&amp;lt;h1&amp;gt;Ending Header&amp;lt;/h1&amp;gt;
&amp;#39;&amp;#39;&amp;#39;
soup = BeautifulSoup(html_content, &amp;#39;html.parser&amp;#39;)

elements = []
for tag in soup.find(&amp;#34;h1&amp;#34;).next_siblings:
 if tag.name == &amp;#34;h1&amp;#34;:
 break
 else:
 elements.append(tag)

print(elements)
# Output: [&amp;lt;p&amp;gt;Element 1&amp;lt;/p&amp;gt;, &amp;lt;p&amp;gt;Element 2&amp;lt;/p&amp;gt;, &amp;lt;p&amp;gt;Element 3&amp;lt;/p&amp;gt;]
&lt;/code>&lt;/pre></description></item><item><title>How to take a screenshot with Puppeteer?</title><link>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-take-a-screenshot-with-puppeteer/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/puppeteer/how-to-take-a-screenshot-with-puppeteer/</guid><description>&lt;p>Taking screenshots with Puppeteer is very simple, all you have to do is to set the browser's viewport, then use the &lt;code>page.screenshot()&lt;/code> method to capture it.&lt;/p>
&lt;p>Here's an example on how to take a screenshot of ScrapingBee's home page:&lt;/p>
&lt;pre tabindex="0">&lt;code>const puppeteer = require(&amp;#39;puppeteer&amp;#39;);

(async () =&amp;gt; {

 const browser = await puppeteer.launch();
 const page = await browser.newPage();

 // Set the viewport&amp;#39;s width and height
 await page.setViewport({ width: 1920, height: 1080 });

 // Open ScrapingBee&amp;#39;s home page
 await page.goto(&amp;#39;https://scrapingbee.com&amp;#39;);

 try {
 // Capture screenshot and save it in the current folder:
 await page.screenshot({ path: `./scrapingbee_homepage.jpg` });

 } catch (err) {
 console.log(`Error: ${err.message}`);
 } finally {
 await browser.close();
 console.log(`Screenshot has been captured successfully`);
 }
})();
&lt;/code>&lt;/pre></description></item><item><title>How to web scrape with python selenium?</title><link>https://www.scrapingbee.com/webscraping-questions/python/how-to-web-scrape-with-python-selenium/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/how-to-web-scrape-with-python-selenium/</guid><description>&lt;p>Using Python with Requests library can help you scrape data from static websites, that means websites that have the content within the server's original HTML response. However, you will not be able to get data from websites that load information dynamically, using JavaScript that gets executed after the server's initial response. For that, we will have to use tools that allows us to mimic a typical user's behavior, like Selenium.&lt;/p></description></item><item><title>HTTP headers with axios</title><link>https://www.scrapingbee.com/blog/axios-headers/</link><pubDate>Fri, 15 Jan 2021 11:10:27 +0200</pubDate><guid>https://www.scrapingbee.com/blog/axios-headers/</guid><description>&lt;p>There has been quite a lot of debate for a long time in the Javascript community as to which HTTP client is the best when it comes to ease of use, among them, Axios would definitely rank among the top 3 for a lot of developers. This article will show you how to use axios to make HTTP requests and pass HTTP headers with your requests. We will also take a close look at how HTTP headers work and why they are important.&lt;/p></description></item><item><title>Is Python good for web scraping?</title><link>https://www.scrapingbee.com/webscraping-questions/python/python-good-web-scraping/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/python-good-web-scraping/</guid><description>&lt;h2 id="short-answer-yes">Short answer: Yes!&lt;/h2>
&lt;p>Python is one of the most popular programming languages in the world thanks to its ease of use &amp;amp; learn, its large community and its portability. This language also dominates all modern data-related fields, including data analysis, machine learning and web scraping.&lt;/p>
&lt;p>Writing a Hello World program in Python is much easier than most other programming languages, especially C-Like languages, here is how you can do that:&lt;/p></description></item><item><title>Is web scraping good to learn?</title><link>https://www.scrapingbee.com/webscraping-questions/python/is-web-scraping-good-to-learn/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/is-web-scraping-good-to-learn/</guid><description>&lt;h2 id="yes">Yes!&lt;/h2>
&lt;p>Web scraping is a very useful skill to have in a world that operates with, and generates data in every second. Data is everywhere, and it is important to acquire the ability to easily extract it from online sources.&lt;/p>
&lt;p>&lt;br>Without web scraping knowledge, it would very difficult to amass large amounts of data that can be used for analysis, visualization and prediction.&lt;br>For example, without tools like &lt;a href="https://www.scrapingbee.com/webscraping-questions/python/python-good-web-scraping/" target="_blank" >Requests&lt;/a> and BeautifulSoup, it would be very difficult to scrape Wikipedia's &lt;a href="https://en.wikipedia.org/wiki/S%26P_500" target="_blank" >S&amp;amp;P500 historical data&lt;/a>. We would have to manually copy and paste each data point from each page, which is very tedious.&lt;br>&lt;br>However, thanks to these tools, we can easily scrape the historical data in milliseconds using this code:&lt;/p></description></item><item><title>What does Beautifulsoup do in Python?</title><link>https://www.scrapingbee.com/webscraping-questions/python/what-does-beautifulsoup-do-in-python/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/what-does-beautifulsoup-do-in-python/</guid><description>&lt;p>BeautifulSoup parses the HTML allowing you to extract information from it.&lt;/p>
&lt;p>When doing web scraping, you will usually not be interested in the HTML on the page, but in the underlying data. This is where BeautifulSoup comes into play.&lt;/p>
&lt;p>BeautifulSoup will take that HTML and turn it into the data you're interested in. Here is a quick example on how to extract the title of a webpage:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> requests
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> bs4 &lt;span style="color:#f92672">import&lt;/span> BeautifulSoup
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>response &lt;span style="color:#f92672">=&lt;/span> requests&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;https://news.ycombinator.com/&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>soup &lt;span style="color:#f92672">=&lt;/span> BeautifulSoup(response&lt;span style="color:#f92672">.&lt;/span>content, &lt;span style="color:#e6db74">&amp;#39;html.parser&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># The title tag of the page&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print(soup&lt;span style="color:#f92672">.&lt;/span>title)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">&amp;gt;&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span>title&lt;span style="color:#f92672">&amp;gt;&lt;/span>Hacker News&lt;span style="color:#f92672">&amp;lt;/&lt;/span>title&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># The title of the page as string&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print(soup&lt;span style="color:#f92672">.&lt;/span>title&lt;span style="color:#f92672">.&lt;/span>string)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">&amp;gt;&lt;/span> Hacker News
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you want to learn more about BeautifulSoup and how to extract links, custom attributes, siblings and more, feel free to check our &lt;a href="https://www.scrapingbee.com/blog/python-web-scraping-beautiful-soup/" >BeautifulSoup tutorial&lt;/a>.&lt;/p></description></item><item><title>Which Python library is used for web scraping?</title><link>https://www.scrapingbee.com/webscraping-questions/python/which-python-library-is-used-for-web-scraping/</link><pubDate>Fri, 15 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/python/which-python-library-is-used-for-web-scraping/</guid><description>&lt;p>There are various Python libraries that can be used for web scraping, but the most popular ones are:&lt;/p>
&lt;h2 id="1-requests">1. Requests:&lt;/h2>
&lt;p>Requests is an easy to use HTTP library, it abstracts the complexity of making HTTP/1.1 requests behind a simple API so that you can focus on scraping the web page, and not on the request itself.  So this tool will allow you to fetch the HTML/JSON contents of any page.&lt;/p></description></item><item><title>How to block resources in Playwright and Python?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-block-resources-in-playwright/</link><pubDate>Thu, 14 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-block-resources-in-playwright/</guid><description>&lt;p>You can block resources in Playwright by making use of the &lt;code>route&lt;/code> method of the &lt;code>Page&lt;/code> or &lt;code>Browser&lt;/code> object and registering an interceptor that rejects requests based on certain parameters. For instance, you can block all remote resources of image type. You can also filter the URL and block specific URLs.&lt;/p>
&lt;p>Here is some sample code that navigates to the ScrapingBee homepage while blocking all images and all URLs containing &amp;quot;google&amp;quot;:&lt;/p></description></item><item><title>How to capture background requests and responses in Playwright?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-capture-background-requests-and-responses-playwright/</link><pubDate>Thu, 14 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-capture-background-requests-and-responses-playwright/</guid><description>&lt;p>You can capture background requests and responses in Playwright by registering appropriate callback functions for the &lt;code>request&lt;/code> and &lt;code>response&lt;/code> events of the &lt;code>Page&lt;/code> object.&lt;/p>
&lt;p>Here is some sample code that logs all requests and responses in Playwright:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> playwright.sync_api &lt;span style="color:#f92672">import&lt;/span> sync_playwright
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">incercept_request&lt;/span>(request):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(&lt;span style="color:#e6db74">&amp;#34;requested URL:&amp;#34;&lt;/span>, request&lt;span style="color:#f92672">.&lt;/span>url)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">def&lt;/span> &lt;span style="color:#a6e22e">incercept_response&lt;/span>(response):
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(&lt;span style="color:#e6db74">f&lt;/span>&lt;span style="color:#e6db74">&amp;#34;response URL: &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>response&lt;span style="color:#f92672">.&lt;/span>url&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">, Status: &lt;/span>&lt;span style="color:#e6db74">{&lt;/span>response&lt;span style="color:#f92672">.&lt;/span>status&lt;span style="color:#e6db74">}&lt;/span>&lt;span style="color:#e6db74">&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">with&lt;/span> sync_playwright() &lt;span style="color:#66d9ef">as&lt;/span> p:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> browser &lt;span style="color:#f92672">=&lt;/span> p&lt;span style="color:#f92672">.&lt;/span>chromium&lt;span style="color:#f92672">.&lt;/span>launch(headless &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page &lt;span style="color:#f92672">=&lt;/span> browser&lt;span style="color:#f92672">.&lt;/span>new_page()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Register the middlewares&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page&lt;span style="color:#f92672">.&lt;/span>on(&lt;span style="color:#e6db74">&amp;#34;request&amp;#34;&lt;/span>, incercept_request)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page&lt;span style="color:#f92672">.&lt;/span>on(&lt;span style="color:#e6db74">&amp;#34;response&amp;#34;&lt;/span>, incercept_response)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page&lt;span style="color:#f92672">.&lt;/span>goto(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> You can modify requests and responses via these middlewares as well!&lt;/p></description></item><item><title>How to download a file with Playwright and Python?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-download-file-with-playwright/</link><pubDate>Thu, 14 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-download-file-with-playwright/</guid><description>&lt;p>You can download a file with Playwright by targeting the file download button on the page using any &lt;code>Locator&lt;/code> and clicking it. Alternatively, you can also extract the link from an anchor tag using the &lt;code>get_attribute&lt;/code> method and then download the file using &lt;code>requests&lt;/code>. This is better as sometimes the PDFs and other downloadable files will open natively in the browser instead of triggering a download on button click.&lt;/p>
&lt;p>Here is some sample code that downloads a random paper from arXiv using Playwright and &lt;code>requests&lt;/code>:&lt;/p></description></item><item><title>How to find elements by CSS selectors in Playwright?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-find-elements-by-css-selectors-in-playwright/</link><pubDate>Thu, 14 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-find-elements-by-css-selectors-in-playwright/</guid><description>&lt;p>You can find elements by CSS selectors in Playwright by using the &lt;code>locator&lt;/code> method of the &lt;code>Page&lt;/code> object. Playwright can automatically detect that a CSS selector is being passed in as an argument. Alternatively, you can prepend your CSS selector with &lt;code>css=&lt;/code> to make sure Playwright doesn't make a wrong guess.&lt;/p>
&lt;p>Here is some sample code that prints the title of ScrapingBee website by making use of CSS selectors:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> playwright &lt;span style="color:#f92672">import&lt;/span> sync_playwright
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">with&lt;/span> sync_playwright() &lt;span style="color:#66d9ef">as&lt;/span> p:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> browser &lt;span style="color:#f92672">=&lt;/span> p&lt;span style="color:#f92672">.&lt;/span>chromium&lt;span style="color:#f92672">.&lt;/span>launch(headless&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">False&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page &lt;span style="color:#f92672">=&lt;/span> browser&lt;span style="color:#f92672">.&lt;/span>new_page()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page&lt;span style="color:#f92672">.&lt;/span>goto(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Extract the title using CSS selector and print it&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> title &lt;span style="color:#f92672">=&lt;/span> page&lt;span style="color:#f92672">.&lt;/span>locator(&lt;span style="color:#e6db74">&amp;#39;css=title&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(title&lt;span style="color:#f92672">.&lt;/span>text_content())
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to find elements by XPath selectors in Playwright?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-find-elements-by-xpath-in-playwright/</link><pubDate>Thu, 14 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-find-elements-by-xpath-in-playwright/</guid><description>&lt;p>You can find elements by XPath selectors in Playwright by using the &lt;code>locator&lt;/code> method of the &lt;code>Page&lt;/code> object. Playwright can automatically detect that an XPath is being passed as an argument. Alternatively, you can prepend your XPath with &lt;code>xpath=&lt;/code> to make sure Playwright doesn't make a wrong guess.&lt;/p>
&lt;p>Here is some sample code that prints the title of ScrapingBee website by making use of XPath selectors:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> playwright &lt;span style="color:#f92672">import&lt;/span> sync_playwright
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">with&lt;/span> sync_playwright() &lt;span style="color:#66d9ef">as&lt;/span> p:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> browser &lt;span style="color:#f92672">=&lt;/span> p&lt;span style="color:#f92672">.&lt;/span>chromium&lt;span style="color:#f92672">.&lt;/span>launch(headless&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">False&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page &lt;span style="color:#f92672">=&lt;/span> browser&lt;span style="color:#f92672">.&lt;/span>new_page()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page&lt;span style="color:#f92672">.&lt;/span>goto(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Extract the title using XPath selector and print it&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> title &lt;span style="color:#f92672">=&lt;/span> page&lt;span style="color:#f92672">.&lt;/span>locator(&lt;span style="color:#e6db74">&amp;#39;xpath=//title&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> print(title&lt;span style="color:#f92672">.&lt;/span>text_content())
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to load local files in Playwright?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-load-local-files-in-playwright/</link><pubDate>Thu, 14 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-load-local-files-in-playwright/</guid><description>&lt;p>You can load local files in Playwright by passing in the absolute path of the file to the &lt;code>goto&lt;/code> method of the &lt;code>Page&lt;/code> object. Just make sure that you prepend &lt;code>file://&lt;/code> to the path as well.&lt;/p>
&lt;p>Here is some sample code for opening a local file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> playwright &lt;span style="color:#f92672">import&lt;/span> sync_playwright
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">with&lt;/span> sync_playwright() &lt;span style="color:#66d9ef">as&lt;/span> p:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> browser &lt;span style="color:#f92672">=&lt;/span> p&lt;span style="color:#f92672">.&lt;/span>chromium&lt;span style="color:#f92672">.&lt;/span>launch(headless&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#66d9ef">False&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> context &lt;span style="color:#f92672">=&lt;/span> browser&lt;span style="color:#f92672">.&lt;/span>new_context()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page &lt;span style="color:#f92672">=&lt;/span> context&lt;span style="color:#f92672">.&lt;/span>new_page()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># open a local file &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page&lt;span style="color:#f92672">.&lt;/span>goto(&lt;span style="color:#e6db74">&amp;#34;file://path/to/file.html&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Note:&lt;/strong> The path would look like this for windows: &lt;code>file://C:/path/to/file.html&lt;/code>&lt;/p></description></item><item><title>How to run Playwright in Jupyter notebooks?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-run-playwright-in-jupyter-notebooks/</link><pubDate>Thu, 14 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-run-playwright-in-jupyter-notebooks/</guid><description>&lt;p>You can run Playwright in Jupyter notebooks by making use of Playwright's async API. This is required because Jupyter notebooks use an asyncio event loop and you need to use Playwright's async API as well.&lt;/p>
&lt;p>Here is some sample code that navigates to ScrapingBee's homepage while making use of the async API:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> playwright.async_api &lt;span style="color:#f92672">import&lt;/span> async_playwright
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pw &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> async_playwright()&lt;span style="color:#f92672">.&lt;/span>start()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>browser &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> pw&lt;span style="color:#f92672">.&lt;/span>chromium&lt;span style="color:#f92672">.&lt;/span>launch(headless &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>page &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">await&lt;/span> browser&lt;span style="color:#f92672">.&lt;/span>new_page()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">await&lt;/span> page&lt;span style="color:#f92672">.&lt;/span>goto(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com/&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to save and load cookies in Playwright?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-save-and-load-cookies-in-playwright/</link><pubDate>Thu, 14 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-save-and-load-cookies-in-playwright/</guid><description>&lt;p>You can save and load cookies in Playwright by making use of the &lt;code>cookies()&lt;/code> and &lt;code>add_cookies()&lt;/code> methods of the browser context. The former returns the current cookies whereas the latter helps you add new cookies and/or overwrite the old ones.&lt;/p>
&lt;p>Here is some sample code for saving and loading the cookies in Playwright while browsing the ScrapingBee website:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> json
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> playwright.sync_api &lt;span style="color:#f92672">import&lt;/span> sync_playwright
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">with&lt;/span> sync_playwright() &lt;span style="color:#66d9ef">as&lt;/span> p:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> browser &lt;span style="color:#f92672">=&lt;/span> p&lt;span style="color:#f92672">.&lt;/span>chromium&lt;span style="color:#f92672">.&lt;/span>launch(headless &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> context &lt;span style="color:#f92672">=&lt;/span> browser&lt;span style="color:#f92672">.&lt;/span>new_context()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page &lt;span style="color:#f92672">=&lt;/span> context&lt;span style="color:#f92672">.&lt;/span>new_page()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page&lt;span style="color:#f92672">.&lt;/span>goto(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Save the cookies&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">with&lt;/span> open(&lt;span style="color:#e6db74">&amp;#34;cookies.json&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;w&amp;#34;&lt;/span>) &lt;span style="color:#66d9ef">as&lt;/span> f:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f&lt;span style="color:#f92672">.&lt;/span>write(json&lt;span style="color:#f92672">.&lt;/span>dumps(context&lt;span style="color:#f92672">.&lt;/span>cookies()))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Load the cookies&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#66d9ef">with&lt;/span> open(&lt;span style="color:#e6db74">&amp;#34;cookies.json&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>) &lt;span style="color:#66d9ef">as&lt;/span> f:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> cookies &lt;span style="color:#f92672">=&lt;/span> json&lt;span style="color:#f92672">.&lt;/span>loads(f&lt;span style="color:#f92672">.&lt;/span>read())
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> context&lt;span style="color:#f92672">.&lt;/span>add_cookies(cookies)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to take a screenshot with Playwright?</title><link>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-take-screenshot-with-playwright/</link><pubDate>Thu, 14 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/playwright/how-to-take-screenshot-with-playwright/</guid><description>&lt;p>You can take a screenshot with Playwright via the &lt;code>screenshot&lt;/code> method of the &lt;code>Page&lt;/code> object. You can optionally pass in the &lt;code>full_page&lt;/code> boolean argument to the &lt;code>screenshot&lt;/code> method to save the screenshot of the whole page.&lt;/p>
&lt;p>Here is some sample code that navigates to ScrapingBee's homepage and saves the screenshot in a &lt;code>screenshot.png&lt;/code> file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> playwright.sync_api &lt;span style="color:#f92672">import&lt;/span> sync_playwright
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">with&lt;/span> sync_playwright() &lt;span style="color:#66d9ef">as&lt;/span> p:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> browser &lt;span style="color:#f92672">=&lt;/span> p&lt;span style="color:#f92672">.&lt;/span>chromium&lt;span style="color:#f92672">.&lt;/span>launch(headless &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#66d9ef">False&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page &lt;span style="color:#f92672">=&lt;/span> browser&lt;span style="color:#f92672">.&lt;/span>new_page()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page&lt;span style="color:#f92672">.&lt;/span>goto(&lt;span style="color:#e6db74">&amp;#34;https://scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># Save the screenshot&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> page&lt;span style="color:#f92672">.&lt;/span>screenshot(path&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#e6db74">&amp;#34;screenshot.png&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to block image loading in Selenium?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-block-image-loading-selenium/</link><pubDate>Tue, 12 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-block-image-loading-selenium/</guid><description>&lt;p>You can block image loading in Selenium by passing in the custom &lt;code>ChromeOptions&lt;/code> object and setting the appropriate content settings preferences.&lt;/p>
&lt;p>Here is some sample code that navigates to the ScrapingBee homepage while blocking images:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> selenium &lt;span style="color:#f92672">import&lt;/span> webdriver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> selenium.webdriver.common.by &lt;span style="color:#f92672">import&lt;/span> By
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DRIVER_PATH &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;/path/to/chromedriver&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Block images via ChromeOptions object&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chrome_options &lt;span style="color:#f92672">=&lt;/span> webdriver&lt;span style="color:#f92672">.&lt;/span>ChromeOptions()
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>prefs &lt;span style="color:#f92672">=&lt;/span> {&lt;span style="color:#e6db74">&amp;#34;profile.managed_default_content_settings.images&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">2&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chrome_options&lt;span style="color:#f92672">.&lt;/span>add_experimental_option(&lt;span style="color:#e6db74">&amp;#34;prefs&amp;#34;&lt;/span>, prefs)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Pass in custom options while creating a Chrome object&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver &lt;span style="color:#f92672">=&lt;/span> webdriver&lt;span style="color:#f92672">.&lt;/span>Chrome(options&lt;span style="color:#f92672">=&lt;/span>chrome_options, executable_path&lt;span style="color:#f92672">=&lt;/span>DRIVER_PATH)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Navigate to ScrapingBee while blocking all images&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;http://www.scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The code for Firefox looks fairly similar as well:&lt;/p></description></item><item><title>How to get page source in Selenium?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-get-page-source-selenium/</link><pubDate>Tue, 12 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-get-page-source-selenium/</guid><description>&lt;p>You can easily get the page source in Selenium via the &lt;code>page_source&lt;/code> attribute of the Selenium web driver.&lt;/p>
&lt;p>Here is some sample code for getting the page source of the ScrapingBee website:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> selenium &lt;span style="color:#f92672">import&lt;/span> webdriver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DRIVER_PATH &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;/path/to/chromedriver&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver &lt;span style="color:#f92672">=&lt;/span> webdriver&lt;span style="color:#f92672">.&lt;/span>Chrome(executable_path&lt;span style="color:#f92672">=&lt;/span>DRIVER_PATH)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;http://www.scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Print page source on screen&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>print(driver&lt;span style="color:#f92672">.&lt;/span>page_source)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to scroll to an element in Selenium?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-scroll-to-element-selenium/</link><pubDate>Tue, 12 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-scroll-to-element-selenium/</guid><description>&lt;p>You can scroll to an element in Selenium by making use of the &lt;code>execute_script&lt;/code> method and passing in a Javascript expression to do the actual scrolling. You can use any supported Selenium selectors to target any &lt;code>WebElement&lt;/code> and then pass that to the &lt;code>execute_script&lt;/code> as an argument.&lt;/p>
&lt;p>Here is some example code that navigates to the ScrapingBee homepage and scrolls to the &lt;code>footer&lt;/code> tag:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> selenium &lt;span style="color:#f92672">import&lt;/span> webdriver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> selenium.webdriver.common.by &lt;span style="color:#f92672">import&lt;/span> By
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DRIVER_PATH &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;/path/to/chromedriver&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver &lt;span style="color:#f92672">=&lt;/span> webdriver&lt;span style="color:#f92672">.&lt;/span>Chrome(executable_path&lt;span style="color:#f92672">=&lt;/span>DRIVER_PATH)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;http://www.scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Javascript expression to scroll to a particular element&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># arguments[0] refers to the first argument that is later passed&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># in to execute_script method&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>js_code &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;arguments[0].scrollIntoView();&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># The WebElement you want to scroll to&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>element &lt;span style="color:#f92672">=&lt;/span> driver&lt;span style="color:#f92672">.&lt;/span>find_element(By&lt;span style="color:#f92672">.&lt;/span>TAG_NAME, &lt;span style="color:#e6db74">&amp;#39;footer&amp;#39;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Execute the JS script&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver&lt;span style="color:#f92672">.&lt;/span>execute_script(js_code, element)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to take a screenshot with Selenium?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-take-screenshot-selenium/</link><pubDate>Tue, 12 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-take-screenshot-selenium/</guid><description>&lt;p>You can take a screenshot using the selenium web driver via the &lt;code>save_screenshot&lt;/code> method.&lt;/p>
&lt;p>Here is some sample code for navigating to the ScrapingBee website and taking a screenshot of the page:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> selenium &lt;span style="color:#f92672">import&lt;/span> webdriver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DRIVER_PATH &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;/path/to/chromedriver&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver &lt;span style="color:#f92672">=&lt;/span> webdriver&lt;span style="color:#f92672">.&lt;/span>Chrome(executable_path&lt;span style="color:#f92672">=&lt;/span>DRIVER_PATH)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;http://www.scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>screenshot_path &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#34;/path/to/screenshot.png&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Save the screenshot&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver&lt;span style="color:#f92672">.&lt;/span>save_screenshot(screenshot_path)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to wait for the page to load in Selenium?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-wait-for-page-load-selenium/</link><pubDate>Tue, 12 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-wait-for-page-load-selenium/</guid><description>&lt;p>You can wait for the page to load in Selenium via multiple strategies:&lt;/p>
&lt;ul>
&lt;li>Explicit wait: Wait until a particular condition is met. For E.g. a particular element becomes visible on the screen&lt;/li>
&lt;li>Implicit wait: Wait for a particular time interval&lt;/li>
&lt;li>Fluent wait: Similar to explicit wait but provides additional control via timeouts and polling frequency&lt;/li>
&lt;/ul>
&lt;p>By default, the web driver waits for the page to load (but not for the AJAX requests initiated with the page load) and you can instruct it to explicitly wait for an element by making use of the &lt;code>WebDriverWait&lt;/code> and the &lt;code>expected_conditions&lt;/code> module.&lt;/p></description></item><item><title>Selenium: chromedriver executable needs to be in PATH?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/chromedriver-executable-needs-to-be-in-path/</link><pubDate>Tue, 12 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/chromedriver-executable-needs-to-be-in-path/</guid><description>&lt;p>You need to make sure that the &lt;code>chromedriver&lt;/code> executable is available in your &lt;code>PATH&lt;/code>. Otherwise, Selenium will throw this error:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>selenium&lt;span style="color:#f92672">.&lt;/span>common&lt;span style="color:#f92672">.&lt;/span>exceptions&lt;span style="color:#f92672">.&lt;/span>WebDriverException: Message: &lt;span style="color:#e6db74">&amp;#39;chromedriver&amp;#39;&lt;/span> executable needs to be &lt;span style="color:#f92672">in&lt;/span> PATH&lt;span style="color:#f92672">.&lt;/span> Please see https:&lt;span style="color:#f92672">//&lt;/span>chromedriver&lt;span style="color:#f92672">.&lt;/span>chromium&lt;span style="color:#f92672">.&lt;/span>org&lt;span style="color:#f92672">/&lt;/span>home
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The best way to fix this error is to use the &lt;code>webdriver-manager&lt;/code> package. It will make sure that you have a valid &lt;code>chromedriver&lt;/code> executable in &lt;code>PATH&lt;/code> and if it is not available, it will download it automatically. You can install it using PIP:&lt;/p></description></item><item><title>Selenium: geckodriver executable needs to be in PATH?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/geckodriver-executable-needs-to-be-in-path/</link><pubDate>Tue, 12 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/geckodriver-executable-needs-to-be-in-path/</guid><description>&lt;p>You need to make sure that the &lt;code>geckodriver&lt;/code> executable is available in your &lt;code>PATH&lt;/code>. Otherwise, Selenium will throw this error:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>selenium&lt;span style="color:#f92672">.&lt;/span>common&lt;span style="color:#f92672">.&lt;/span>exceptions&lt;span style="color:#f92672">.&lt;/span>WebDriverException: Message: &lt;span style="color:#e6db74">&amp;#39;geckodriver&amp;#39;&lt;/span> executable needs to be &lt;span style="color:#f92672">in&lt;/span> PATH&lt;span style="color:#f92672">.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The best way to fix this error is to use the &lt;code>webdriver-manager&lt;/code> package. It will make sure that you have a valid &lt;code>geckodriver&lt;/code> executable in &lt;code>PATH&lt;/code> and if it is not available, it will download it automatically. You can install it using PIP:&lt;/p></description></item><item><title>How to find elements by XPath in Selenium?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-find-elements-by-xpath-selenium/</link><pubDate>Mon, 11 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-find-elements-by-xpath-selenium/</guid><description>&lt;p>You can find elements by XPath selectors in Selenium by utilizing the &lt;code>find_element&lt;/code> and &lt;code>find_elements&lt;/code> methods and the &lt;code>By.XPATH&lt;/code> argument.&lt;/p>
&lt;p>&lt;code>find_element&lt;/code> returns the first occurence of the XPath selector being used, while &lt;code>find_elements&lt;/code> returns all elements of the page that match the selector. And &lt;code>By.XPATH&lt;/code> simply tells Selenium to use the XPATH selector matching method.&lt;/p>
&lt;p>&lt;strong>Tip:&lt;/strong> &lt;code>//&lt;/code> in XPath matches an element wherever it is on the page whereas &lt;code>/&lt;/code> matches a direct child element.&lt;/p></description></item><item><title>How to save and load cookies in Selenium?</title><link>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-save-cookies-selenium/</link><pubDate>Mon, 11 Jan 2021 09:10:27 +0000</pubDate><guid>https://www.scrapingbee.com/webscraping-questions/selenium/how-to-save-cookies-selenium/</guid><description>&lt;p>You can save and load cookies in Selenium using the &lt;code>get_cookies&lt;/code> method of the web driver object and the &lt;code>pickle&lt;/code> library.&lt;/p>
&lt;p>Here is some sample code to save and load cookies while navigating to the ScrapingBee website.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> pickle
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> selenium &lt;span style="color:#f92672">import&lt;/span> webdriver
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DRIVER_PATH &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#e6db74">&amp;#39;/path/to/chromedriver&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver &lt;span style="color:#f92672">=&lt;/span> webdriver&lt;span style="color:#f92672">.&lt;/span>Chrome(executable_path&lt;span style="color:#f92672">=&lt;/span>DRIVER_PATH)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>driver&lt;span style="color:#f92672">.&lt;/span>get(&lt;span style="color:#e6db74">&amp;#34;http://www.scrapingbee.com&amp;#34;&lt;/span>)
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Save cookies&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pickle&lt;span style="color:#f92672">.&lt;/span>dump( driver&lt;span style="color:#f92672">.&lt;/span>get_cookies() , open(&lt;span style="color:#e6db74">&amp;#34;cookies.pkl&amp;#34;&lt;/span>,&lt;span style="color:#e6db74">&amp;#34;wb&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Load cookies&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cookies &lt;span style="color:#f92672">=&lt;/span> pickle&lt;span style="color:#f92672">.&lt;/span>load(open(&lt;span style="color:#e6db74">&amp;#34;cookies.pkl&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;rb&amp;#34;&lt;/span>))
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">for&lt;/span> cookie &lt;span style="color:#f92672">in&lt;/span> cookies:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> driver&lt;span style="color:#f92672">.&lt;/span>add_cookie(cookie)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Scraping E-Commerce Product Data</title><link>https://www.scrapingbee.com/blog/scraping-e-commerce-product-data/</link><pubDate>Sun, 17 Feb 2019 10:24:37 +0100</pubDate><guid>https://www.scrapingbee.com/blog/scraping-e-commerce-product-data/</guid><description>&lt;p>In this tutorial, we are going to see how to extract product data from any E-commerce websites with Java. There are lots of different use cases for product data extraction, such as:&lt;/p>
&lt;ul>
&lt;li>E-commerce price monitoring&lt;/li>
&lt;li>Price comparator&lt;/li>
&lt;li>Availability monitoring&lt;/li>
&lt;li>Extracting reviews&lt;/li>
&lt;li>Market research&lt;/li>
&lt;li>MAP violation&lt;/li>
&lt;/ul>
&lt;p>We are going to extract these different fields: Price, Product Name, Image URL, SKU, and currency from this product page:&lt;/p>


















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,/9j/2wCEAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDIBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/AABEIAA0AFAMBIgACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5&amp;#43;gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4&amp;#43;Tl5ufo6ery8/T19vf4&amp;#43;fr/2gAMAwEAAhEDEQA/AOj&amp;#43;Luv6n4f0OAWNy1tNcXRR3Q5bZ8zcHtnitH4XeILvWvCbXV1JPeTxStDuXHmMoKkE8gZ5q78SPCEPjCxS1kumtpIZBKkqpvwcEEEZHBB9a0fAPhO28H6L/Z1vO87MxlklcAFmOOw6DgUCZ0trMZIdxgnj5xtlxn9Cam3H&amp;#43;41OzRmgaP/Z); background-size: cover">
 &lt;svg width="986" height="622" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/scraping-e-commerce-product-data/Screenshot-2019-04-03-15.56.02_hu2702013591613158523.jpg 825w '
 data-src="https://www.scrapingbee.com/blog/scraping-e-commerce-product-data/Screenshot-2019-04-03-15.56.02_hu2702013591613158523.jpg"
 width="986" height="622"
 alt='The North Face back pack'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/scraping-e-commerce-product-data/Screenshot-2019-04-03-15.56.02_hu2702013591613158523.jpg 825w'
 src="https://www.scrapingbee.com/blog/scraping-e-commerce-product-data/Screenshot-2019-04-03-15.56.02.jpg"
 width="986" height="622"
 alt='The North Face back pack'>
 &lt;/noscript>
&lt;/div>

&lt;br>



















 
 








&lt;div class="img" style="background: url(data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N&amp;#43;mxAAAAuklEQVR4nGL5//8/A7mAiWyd1NZ85dnTiYf3njp/A807Hz99fvHiJZpiFgTzP8PFJ49XPr/45t&amp;#43;HP&amp;#43;9&amp;#43;mTFqQIT//Plz5NjJX79&amp;#43;vXn7TlZW2trCjImJCcPm///PPnzw6tM7xu//fbQMEMazsIiLi967//Djp0/SUpJwnag2MzFGmZj/PPrTUUdTXVIS2XmCAgKaGmqMjIy83NzI4ozERNXfv3&amp;#43;ZmZlBjH//mJFsJkozLkBRVAECAAD//yH0TBersOHxAAAAAElFTkSuQmCC); background-size: cover">
 &lt;svg width="1417" height="707" aria-hidden="true" style="background-color:white">&lt;/svg>
 &lt;img
 class="lazyload"
 data-sizes="auto"
 data-srcset=', /blog/scraping-e-commerce-product-data/cover_hu217303111352206046.png 1200w '
 data-src="https://www.scrapingbee.com/blog/scraping-e-commerce-product-data/cover_hu217303111352206046.png"
 width="1417" height="707"
 alt='cover image'>
 &lt;noscript>
 &lt;img
 loading="lazy"
 
 srcset=', /blog/scraping-e-commerce-product-data/cover_hu217303111352206046.png 1200w'
 src="https://www.scrapingbee.com/blog/scraping-e-commerce-product-data/cover.png"
 width="1417" height="707"
 alt='cover image'>
 &lt;/noscript>
&lt;/div>

&lt;br>

&lt;h2 id="what-you-will-need">What you will need&lt;/h2>
&lt;p>We will use HtmlUnit to perform the HTTP request and parse the DOM, add this dependency to your pom.xml.&lt;/p></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/cfml/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/cfml/</guid><description/></item><item><title/><link>https://www.scrapingbee.com/curl-converter/dart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/dart/</guid><description/></item><item><title/><link>https://www.scrapingbee.com/curl-converter/elixir/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/elixir/</guid><description>&lt;p>If you want to learn &lt;a href="https://www.scrapingbee.com/blog/web-scraping-elixir/" >web scraping with Elixir&lt;/a>, check out our tutorial.&lt;/p></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/go/</guid><description>&lt;p>If you want to learn &lt;a href="https://www.scrapingbee.com/blog/web-scraping-go/" >web scraping with Go&lt;/a>, check out our tutorial.&lt;/p>
&lt;p>You will learn how to build your first web scraper with Go, and how to use the Colly library.&lt;/p></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/java/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/java/</guid><description>&lt;p>If you want to learn web scraping with Java, check out our tutorials:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.scrapingbee.com/java-webscraping-book/" >Web scraping with Java&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/introduction-to-chrome-headless/" >Introduction to Chrome Headless with Java&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/javascript-fetch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/javascript-fetch/</guid><description>&lt;p>Due to the enormous advancements it has seen and the advent of the NodeJS runtime, JavaScript has emerged as one of the most well-liked and often used languages. The necessary tools are now available for JavaScript, whether it's for a web or mobile application.&lt;/p>
&lt;p>And of course, web scraping.&lt;/p>
&lt;p>To learn more about JavaScript and web scraping checkout our tutorials:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/web-scraping-javascript/" >Web Scraping with Node JS&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/html-parsing-jquery/" >Using jQuery to Parse HTML and Extract Data&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/cheerio-npm/" >Using the Cheerio NPM Package for Web Scraping&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/json/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/json/</guid><description/></item><item><title/><link>https://www.scrapingbee.com/curl-converter/matlab/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/matlab/</guid><description/></item><item><title/><link>https://www.scrapingbee.com/curl-converter/node-axios/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/node-axios/</guid><description>&lt;p>JavaScript has become one of the most well-liked and often used languages as a result of the significant developments it has experienced and the introduction of the NodeJS runtime. Whether it's for a web application or a mobile application, JavaScript now has the required capabilities available.&lt;/p>
&lt;p>And of course, web scraping.&lt;/p>
&lt;p>To learn more about JavaScript and web scraping checkout our tutorials:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/html-parsing-jquery/" >Using jQuery to Parse HTML and Extract Data&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/cheerio-npm/" >Using the Cheerio NPM Package for Web Scraping&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/web-scraping-javascript/" >Web Scraping with Node JS&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/node-fetch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/node-fetch/</guid><description>&lt;p>JavaScript has evolved as one of the most popular and widely used languages as a result of tremendous developments and the introduction of the NodeJS runtime. JavaScript development tools are now available, whether for a web or mobile application.&lt;/p>
&lt;p>And of course, web scraping.&lt;/p>
&lt;p>To learn more about JavaScript and web scraping checkout our tutorials:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/html-parsing-jquery/" >Using jQuery to Parse HTML and Extract Data&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/cheerio-npm/" >Using the Cheerio NPM Package for Web Scraping&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/web-scraping-javascript/" >Web Scraping with Node JS&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/node-request/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/node-request/</guid><description>&lt;p>JavaScript is known for both its ease of use and its power. With JavaScript it is very easy to create web applications and web services.&lt;/p>
&lt;p>And of course, web scraping.&lt;/p>
&lt;p>To learn more about JavaScript and web scraping checkout our tutorials:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/html-parsing-jquery/" >Using jQuery to Parse HTML and Extract Data&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/cheerio-npm/" >Using the Cheerio NPM Package for Web Scraping&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/web-scraping-javascript/" >Web Scraping with Node JS&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/php/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/php/</guid><description>&lt;p>We have written a full &lt;a href="https://www.scrapingbee.com/blog/web-scraping-php/" >PHP web scraping tutorial&lt;/a>, check it out.&lt;/p></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/python/</guid><description>&lt;p>Python is a versatile and trending programming language. It is used for web scraping, data analysis, and much more.&lt;/p>
&lt;p>If you want to learn more about web scraping in Python check out our tutorials:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/web-scraping-101-with-python/" >Web Scraping with Python&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/python-web-scraping-beautiful-soup/" >Web Scraping with Python and BeautifulSoup&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.scrapingbee.com/blog/web-scraping-with-scrapy/" >Web Scraping with Python and Scrapy&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/r/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/r/</guid><description>&lt;p>If you want to start doing web scraping with R, you can read our tutorial: &lt;a href="https://www.scrapingbee.com/blog/web-scraping-r/" >R and Web Scraping&lt;/a>.&lt;/p></description></item><item><title/><link>https://www.scrapingbee.com/curl-converter/rust/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/curl-converter/rust/</guid><description>&lt;p>If you're starting with Rust and web scraping, you can read our tutorial: &lt;a href="https://www.scrapingbee.com/blog/web-scraping-rust/" >Rust and Web Scraping&lt;/a>.&lt;/p></description></item><item><title/><link>https://www.scrapingbee.com/landing/dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/landing/dev/</guid><description>&lt;!DOCTYPE html>
&lt;html lang="en">
 &lt;head>
	&lt;meta name="generator" content="Hugo 0.88.1" />
 &lt;meta name="robots" content="noindex, nofollow" />
 &lt;title>ScrapingBee, the best web scraping API.&lt;/title>
 &lt;meta charset="utf-8" />
 &lt;meta name="description" content="ScrapingBee is a Web Scraping API that handles proxies and Headless browser for you, so you can focus on extracting the data you want, and nothing else." />
 &lt;meta name="viewport" content="width=device-width" initial-scale="1" maximum-scale="1" />
 &lt;meta property="og:type" content="article" />
 &lt;meta property="og:title" content="ScrapingBee, the best web scraping API." />
 &lt;meta property="og:description" content="ScrapingBee is a Web Scraping API that handles proxies and Headless browser for you, so you can focus on extracting the data you want, and nothing else." />
 &lt;meta property="og:type" content="website" />
 &lt;meta property="og:image" content="https://www.scrapingbee.com/images/cover.png" />
 &lt;meta property="og:url" content="https://www.scrapingbee.com/" />
 &lt;meta property="twitter:card" content="summary_large_image" />
 &lt;meta property="twitter:creator" content="@scrapingbee" />
 &lt;meta property="twitter:domain" content="https://www.scrapingbee.com" />
 &lt;meta property="twitter:site" content="@scrapingbee" />
 &lt;meta property="twitter:title" content="ScrapingBee, the best web scraping API." />
 &lt;meta property="twitter:description" content="ScrapingBee is a Web Scraping API that handles proxies and Headless browser for you, so you can focus on extracting the data you want, and nothing else." />
 &lt;meta property="twitter:image" content="https://www.scrapingbee.com/images/cover.png" />
 &lt;link rel="alternate" type="application/rss+xml" title="The ScrapingBee Blog" href="https://www.scrapingbee.com/index.xml" />
 &lt;link rel="icon" type="image/png" href="https://www.scrapingbee.com//images/favico.png" />
 &lt;link rel="alternate icon" href="https://www.scrapingbee.com//images/favico.svg">
 &lt;link rel="canonical" href="https://www.scrapingbee.com/" />
&lt;style>
 *,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}::before,::after{--tw-content:''}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Circular Std,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#24292e}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#24292e}input::placeholder,textarea::placeholder{opacity:1;color:#24292e}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}.container{margin-left:auto;margin-right:auto;max-width:1204px;padding-left:20px;padding-right:20px}@media(min-width:1024px){.container{padding-left:30px;padding-right:30px}}.btn{display:inline-flex;height:48px;align-items:center;justify-content:center;border-radius:4px;--tw-bg-opacity:1;background-color:rgb(15 15 14/var(--tw-bg-opacity));padding-left:25px;padding-right:25px;font-size:16px;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.btn:hover{--tw-bg-opacity:0.9}@media(min-width:1024px){.btn{height:56px}.btn{font-size:18px}}.btn-sm{height:45px;font-size:16px}.btn-black-o{border-width:2px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity));background-color:transparent;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.btn-black-o:hover{--tw-bg-opacity:1;background-color:rgb(15 15 14/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-yellow{--tw-bg-opacity:1;background-color:rgb(255 201 31/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.link{font-weight:700;-webkit-text-decoration-line:underline;text-decoration-line:underline}.link:hover{-webkit-text-decoration-line:none;text-decoration-line:none}body{font-size:18px;line-height:1.77;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}blockquote,q{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:0 0}blockquote q:not(.quote):before,blockquote q:not(.quote):after{content:'"'}blockquote>ol{list-style:decimal;margin-left:30px}h1,h2,h3{font-weight:700}h1{font-size:40px;line-height:1.22}@media(min-width:1024px){h1{font-size:48px}h1{font-size:56px}}h2{font-size:36px;line-height:1.26}@media(min-width:1024px){h2{font-size:48px}}h3{font-size:30px;line-height:1.33}@media(min-width:1024px){h3{font-size:36px}}h4{font-size:22px;line-height:1.33}@media(min-width:1024px){h4{font-size:24px}}h5{font-size:20px;line-height:1.2}h6{font-size:16px;line-height:1.25}*,::before,::after{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-border-opacity:1;border-color:rgb(90 113 132/var(--tw-border-opacity));--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);--tw-filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.left-[0]{left:0}.top-[80px]{top:80px}.top-[0]{top:0}.right-[0]{right:0}.-top-[3px]{top:-3px}.-right-[3px]{right:-3px}.left-[2px]{left:2px}.top-[2px]{top:2px}.top-[3px]{top:3px}.z-[101]{z-index:101}.z-[100]{z-index:100}.z-[9]{z-index:9}.z-1{z-index:1}.order-2{order:2}.order-1{order:1}.m-[0]{margin:0}.-m-[10px]{margin:-10px}.m-auto{margin:auto}.my-[4px]{margin-top:4px;margin-bottom:4px}.-mx-[15px]{margin-left:-15px;margin-right:-15px}.mx-auto{margin-left:auto;margin-right:auto}.my-[2px]{margin-top:2px;margin-bottom:2px}.mx-[2px]{margin-left:2px;margin-right:2px}.my-[10px]{margin-top:10px;margin-bottom:10px}.-mx-[20px]{margin-left:-20px;margin-right:-20px}.-mx-[11px]{margin-left:-11px;margin-right:-11px}.-mx-[21px]{margin-left:-21px;margin-right:-21px}.-mx-[12px]{margin-left:-12px;margin-right:-12px}.-mx-[50px]{margin-left:-50px;margin-right:-50px}.-mx-[9px]{margin-left:-9px;margin-right:-9px}.-mx-[30px]{margin-left:-30px;margin-right:-30px}.-mx-[23px]{margin-left:-23px;margin-right:-23px}.-mx-[10px]{margin-left:-10px;margin-right:-10px}.-my-[2px]{margin-top:-2px;margin-bottom:-2px}.-mx-[16px]{margin-left:-16px;margin-right:-16px}.-my-[20px]{margin-top:-20px;margin-bottom:-20px}.-my-[19px]{margin-top:-19px;margin-bottom:-19px}.mt-[30px]{margin-top:30px}.mb-[12px]{margin-bottom:12px}.mt-[60px]{margin-top:60px}.mb-[20px]{margin-bottom:20px}.mb-[11px]{margin-bottom:11px}.mb-[33px]{margin-bottom:33px}.mb-[17px]{margin-bottom:17px}.mb-[100px]{margin-bottom:100px}.mt-[66px]{margin-top:66px}.mb-[21px]{margin-bottom:21px}.mt-[70px]{margin-top:70px}.mr-[12px]{margin-right:12px}.mt-[20px]{margin-top:20px}.ml-[12px]{margin-left:12px}.mb-[40px]{margin-bottom:40px}.mb-[24px]{margin-bottom:24px}.mb-[8%]{margin-bottom:8%}.mb-[10px]{margin-bottom:10px}.mb-[2px]{margin-bottom:2px}.mb-[18px]{margin-bottom:18px}.mb-[6px]{margin-bottom:6px}.mr-[6px]{margin-right:6px}.mb-[19px]{margin-bottom:19px}.mb-[30px]{margin-bottom:30px}.mr-[9px]{margin-right:9px}.mr-[5px]{margin-right:5px}.ml-[3px]{margin-left:3px}.mr-[1px]{margin-right:1px}.ml-[10px]{margin-left:10px}.mb-[48px]{margin-bottom:48px}.mb-[5px]{margin-bottom:5px}.mb-[25px]{margin-bottom:25px}.mt-[19px]{margin-top:19px}.mr-[20px]{margin-right:20px}.mt-[12px]{margin-top:12px}.mt-[32px]{margin-top:32px}.mb-[32px]{margin-bottom:32px}.ml-[8px]{margin-left:8px}.mb-[15px]{margin-bottom:15px}.mb-[60px]{margin-bottom:60px}.mb-[13px]{margin-bottom:13px}.mb-[3px]{margin-bottom:3px}.mt-[100px]{margin-top:100px}.mb-[50px]{margin-bottom:50px}.mb-[70px]{margin-bottom:70px}.mr-[10px]{margin-right:10px}.mb-[45px]{margin-bottom:45px}.-ml-[9px]{margin-left:-9px}.-ml-[20px]{margin-left:-20px}.mb-[80px]{margin-bottom:80px}.mb-[54px]{margin-bottom:54px}.mb-[27px]{margin-bottom:27px}.mb-[35px]{margin-bottom:35px}.mb-[4px]{margin-bottom:4px}.mt-[10px]{margin-top:10px}.mb-[66px]{margin-bottom:66px}.ml-[5px]{margin-left:5px}.mt-[13px]{margin-top:13px}.mb-[8px]{margin-bottom:8px}.mb-[38px]{margin-bottom:38px}.-mr-[4px]{margin-right:-4px}.ml-[4px]{margin-left:4px}.mb-[31px]{margin-bottom:31px}.mb-[14px]{margin-bottom:14px}.-mb-px{margin-bottom:-1px}.mb-[34px]{margin-bottom:34px}.mb-[16px]{margin-bottom:16px}.ml-[20px]{margin-left:20px}.mr-[24px]{margin-right:24px}.ml-[6px]{margin-left:6px}.mb-[9px]{margin-bottom:9px}.mt-[9px]{margin-top:9px}.mb-[120px]{margin-bottom:120px}.-mr-[20px]{margin-right:-20px}.mt-[80px]{margin-top:80px}.mb-[36px]{margin-bottom:36px}.-mb-[4px]{margin-bottom:-4px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-[12px]{height:12px}.h-screen{height:100vh}.h-[35px]{height:35px}.h-[204px]{height:204px}.h-full{height:100%}.h-auto{height:auto}.h-[100px]{height:100px}.h-[40px]{height:40px}.h-[32px]{height:32px}.h-[4px]{height:4px}.h-[56px]{height:56px}.h-[150px]{height:150px}.h-[58px]{height:58px}.h-[24px]{height:24px}.h-[80px]{height:80px}.h-[86px]{height:86px}.h-[30px]{height:30px}.h-[600px]{height:600px}.max-h-[832px]{max-height:832px}.min-h-[52px]{min-height:52px}.w-full{width:100%}.w-[35px]{width:35px}.w-[40px]{width:40px}.w-[100px]{width:100px}.w-[5px]\/12{width:41.666667%}.w-[2px]\/12{width:16.666667%}.w-[160px]{width:160px}.w-[182px]{width:182px}.w-[123px]{width:123px}.w-[61px]{width:61px}.w-[56px]{width:56px}.w-[195px]{width:195px}.w-[24px]{width:24px}.w-[25%]{width:25%}.w-[86px]{width:86px}.w-[36px]{width:36px}.w-[40%]{width:40%}.w-[30%]{width:30%}.w-[1px]\/2{width:50%}.w-[30px]{width:30px}.w-auto{width:auto}.w-[600px]{width:600px}.w-[20px]{width:20px}.min-w-[120px]{min-width:120px}.min-w-[500px]{min-width:500px}.min-w-[900px]{min-width:900px}.min-w-[222px]{min-width:222px}.min-w-full{min-width:100%}.max-w-screen-lg{max-width:1280px}.max-w-[894px]{max-width:894px}.max-w-[620px]{max-width:620px}.max-w-full{max-width:100%}.max-w-[1276px]{max-width:1276px}.max-w-[970px]{max-width:970px}.max-w-screen-xl{max-width:1440px}.max-w-[508px]{max-width:508px}.max-w-[321px]{max-width:321px}.max-w-none{max-width:none}.max-w-[1024px]{max-width:1024px}.max-w-[728px]{max-width:728px}.max-w-[1292px]{max-width:1292px}.max-w-[404px]{max-width:404px}.max-w-[1277px]{max-width:1277px}.max-w-[542px]{max-width:542px}.max-w-[1308px]{max-width:1308px}.flex-auto{flex:auto}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.grow{flex-grow:1}.basis-0{flex-basis:0}.transform{transform:var(--tw-transform)}.cursor-text{cursor:text}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-[10px]{gap:10px}.gap-[20px]{gap:20px}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(90 113 132/var(--tw-divide-opacity))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-scroll{overflow-y:scroll}.overscroll-x-auto{overscroll-behavior-x:auto}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.rounded-sm{border-radius:.125rem}.rounded-md{border-radius:.375rem}.rounded-[8px]{border-radius:8px}.rounded-[100%]{border-radius:100%}.rounded-[4px]{border-radius:4px}.rounded{border-radius:.25rem}.rounded-xl{border-radius:.75rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-[5px]{border-radius:5px}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.rounded-b-md{border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-t-4{border-top-left-radius:4px;border-top-right-radius:4px}.rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.rounded-r-xl{border-top-right-radius:.75rem;border-bottom-right-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-t-2{border-top-width:2px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l-2{border-left-width:2px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-r-2{border-right-width:2px}.border-solid{border-style:solid}.border-gray-400{--tw-border-opacity:1;border-color:rgb(36 41 46/var(--tw-border-opacity))}.border-black-100{--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(228 231 236/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(179 186 197/var(--tw-border-opacity))}.border-gray-1400{--tw-border-opacity:1;border-color:rgb(217 218 219/var(--tw-border-opacity))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.border-blue-200{--tw-border-opacity:1;border-color:rgb(66 84 102/var(--tw-border-opacity))}.border-green-700{--tw-border-opacity:1;border-color:rgb(21 128 61/var(--tw-border-opacity))}.border-yellow-100{--tw-border-opacity:1;border-color:rgb(255 201 31/var(--tw-border-opacity))}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 173 19/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-gray-600{--tw-border-opacity:1;border-color:rgb(204 204 204/var(--tw-border-opacity))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(230 236 242/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(90 113 132/var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.border-opacity-20{--tw-border-opacity:0.2}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(255 201 31/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(230 236 242/var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(44 58 87/var(--tw-bg-opacity))}.bg-black-100{--tw-bg-opacity:1;background-color:rgb(15 15 14/var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.bg-yellow-200{--tw-bg-opacity:1;background-color:rgb(255 244 210/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(242 242 242/var(--tw-bg-opacity))}.bg-gray-1000{--tw-bg-opacity:1;background-color:rgb(197 197 196/var(--tw-bg-opacity))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(27 37 56/var(--tw-bg-opacity))}.bg-none{background-image:none}.object-cover{-o-object-fit:cover;object-fit:cover}.p-[10px]{padding:10px}.p-[0]{padding:0}.p-[1px]{padding:1px}.p-[20px]{padding:20px}.p-[60px]{padding:60px}.p-[3px]{padding:3px}.p-[5px]{padding:5px}.p-[38px]{padding:38px}.p-[15px]{padding:15px}.p-[40px]{padding:40px}.px-[37px]{padding-left:37px;padding-right:37px}.px-[4px]{padding-left:4px;padding-right:4px}.px-[15px]{padding-left:15px;padding-right:15px}.py-[6px]{padding-top:6px;padding-bottom:6px}.px-[10px]{padding-left:10px;padding-right:10px}.py-[50px]{padding-top:50px;padding-bottom:50px}.py-[5px]{padding-top:5px;padding-bottom:5px}.py-[8px]{padding-top:8px;padding-bottom:8px}.px-[6px]{padding-left:6px;padding-right:6px}.px-[20px]{padding-left:20px;padding-right:20px}.px-[11px]{padding-left:11px;padding-right:11px}.py-[20px]{padding-top:20px;padding-bottom:20px}.px-[21px]{padding-left:21px;padding-right:21px}.px-[31px]{padding-left:31px;padding-right:31px}.py-[10px]{padding-top:10px;padding-bottom:10px}.px-[12px]{padding-left:12px;padding-right:12px}.px-[55px]{padding-left:55px;padding-right:55px}.px-[50px]{padding-left:50px;padding-right:50px}.px-[9px]{padding-left:9px;padding-right:9px}.px-[39px]{padding-left:39px;padding-right:39px}.px-[30px]{padding-left:30px;padding-right:30px}.py-[70px]{padding-top:70px;padding-bottom:70px}.py-[40px]{padding-top:40px;padding-bottom:40px}.px-[23px]{padding-left:23px;padding-right:23px}.py-[15px]{padding-top:15px;padding-bottom:15px}.py-[100px]{padding-top:100px;padding-bottom:100px}.py-[4px]{padding-top:4px;padding-bottom:4px}.px-[1px]{padding-left:1px;padding-right:1px}.py-[2px]{padding-top:2px;padding-bottom:2px}.px-[24px]{padding-left:24px;padding-right:24px}.py-[3px]{padding-top:3px;padding-bottom:3px}.py-[16px]{padding-top:16px;padding-bottom:16px}.px-[17px]{padding-left:17px;padding-right:17px}.px-[14px]{padding-left:14px;padding-right:14px}.px-[16px]{padding-left:16px;padding-right:16px}.py-[19px]{padding-top:19px;padding-bottom:19px}.pt-[6px]{padding-top:6px}.pb-[0]{padding-bottom:0}.pt-[60px]{padding-top:60px}.pb-[2px]{padding-bottom:2px}.pb-[16px]{padding-bottom:16px}.pt-[50px]{padding-top:50px}.pb-[80px]{padding-bottom:80px}.pt-[20px]{padding-top:20px}.pt-[19px]{padding-top:19px}.pr-[16px]{padding-right:16px}.pl-[18px]{padding-left:18px}.pb-[30px]{padding-bottom:30px}.pt-[18px]{padding-top:18px}.pt-[15px]{padding-top:15px}.pt-[11px]{padding-top:11px}.pb-[48px]{padding-bottom:48px}.pt-[2px]{padding-top:2px}.pt-[47px]{padding-top:47px}.pt-[3px]{padding-top:3px}.pl-[12px]{padding-left:12px}.pl-[9px]{padding-left:9px}.pr-[2px]{padding-right:2px}.pt-[80px]{padding-top:80px}.pb-[50px]{padding-bottom:50px}.pb-[70px]{padding-bottom:70px}.pr-[20px]{padding-right:20px}.pb-[20px]{padding-bottom:20px}.pt-[31px]{padding-top:31px}.pb-[38px]{padding-bottom:38px}.pl-[8px]{padding-left:8px}.pr-[15px]{padding-right:15px}.pr-[13px]{padding-right:13px}.pt-[100px]{padding-top:100px}.pt-[70px]{padding-top:70px}.pt-[17px]{padding-top:17px}.pt-[66px]{padding-top:66px}.pb-[100px]{padding-bottom:100px}.pt-[35px]{padding-top:35px}.pl-[24px]{padding-left:24px}.pt-[52px]{padding-top:52px}.pt-[7px]{padding-top:7px}.pb-[6px]{padding-bottom:6px}.pr-[10px]{padding-right:10px}.pl-[45px]{padding-left:45px}.pt-[16px]{padding-top:16px}.pb-[19px]{padding-bottom:19px}.pt-[28px]{padding-top:28px}.pt-[30px]{padding-top:30px}.pb-[60px]{padding-bottom:60px}.pl-[35px]{padding-left:35px}.pr-[12px]{padding-right:12px}.pb-[45px]{padding-bottom:45px}.pl-[43px]{padding-left:43px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-menlo{font-family:menlo}.font-sans{font-family:Circular Std,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji}.text-[20px]{font-size:20px}.text-[36px]{font-size:36px}.text-[24px]{font-size:24px}.text-[15px]{font-size:15px}.text-[30px]{font-size:30px}.text-[14px]{font-size:14px}.text-[16px]{font-size:16px}.text-[18px]{font-size:18px}.text-[12px]{font-size:12px}.text-[32px]{font-size:32px}.text-[130px]{font-size:130px}.text-[40px]{font-size:40px}.text-[48px]{font-size:48px}.text-[13px]{font-size:13px}.text-[10px]{font-size:10px}.font-normal{font-weight:400}.font-bold{font-weight:700}.font-medium{font-weight:500}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.not-italic{font-style:normal}.leading-[1.50]{line-height:1.5}.leading-[1.41]{line-height:1.41}.leading-[1.1429]{line-height:1.1429}.leading-[1.21]{line-height:1.21}.leading-[1.77]{line-height:1.77}.leading-[1.33]{line-height:1.33}.leading-none{line-height:1}.leading-[1.20]{line-height:1.2}.leading-[1.4]{line-height:1.4}.leading-[1.26]{line-height:1.26}.leading-2{line-height:2}.leading-[1.55]{line-height:1.55}.leading-[1.25]{line-height:1.25}.leading-[1.86]{line-height:1.86}.leading-[1.54]{line-height:1.54}.leading-[1.16]{line-height:1.16}.tracking-[0.2px]{letter-spacing:.2px}.tracking-tight{letter-spacing:-.01em}.text-green-1000{--tw-text-opacity:1;color:rgb(54 179 126/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 173 19/var(--tw-text-opacity))}.text-red-100{--tw-text-opacity:1;color:rgb(249 38 114/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(90 113 132/var(--tw-text-opacity))}.text-blue-200{--tw-text-opacity:1;color:rgb(66 84 102/var(--tw-text-opacity))}.text-black-100{--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.text-black-200{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-red-200{--tw-text-opacity:1;color:rgb(255 121 198/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-100{--tw-text-opacity:1;color:rgb(255 201 31/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(36 41 46/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(179 186 197/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(232 232 232/var(--tw-text-opacity))}.text-red-300{--tw-text-opacity:1;color:rgb(233 84 50/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(230 236 242/var(--tw-text-opacity))}.text-opacity-70{--tw-text-opacity:0.7}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.shadow-[0px 2px 20px rgba(169, 169, 169, 0.16), 0 32px 46px -27px rgba(117, 117, 117, 0.2)]{--tw-shadow:0px 2px 20px rgba(169, 169, 169, 0.16), 0 32px 46px -27px rgba(117, 117, 117, 0.2);--tw-shadow-colored:0px 2px 20px var(--tw-shadow-color), 0 32px 46px -27px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-[0 2px 8px rgba(0, 0, 0, 0.16)]{--tw-shadow:0 2px 8px rgba(0, 0, 0, 0.16);--tw-shadow-colored:0 2px 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-[0 23.4255px 46.8511px rgba(0, 0, 0, 0.2)]{--tw-shadow:0 23.4255px 46.8511px rgba(0, 0, 0, 0.2);--tw-shadow-colored:0 23.4255px 46.8511px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.drop-shadow-[0 23.4255px 46.8511px rgba(0, 0, 0, 0.2)]{--tw-drop-shadow:drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08));filter:var(--tw-filter)}.filter{filter:var(--tw-filter)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}@font-face{font-family:menlo;font-weight:400;font-style:normal;src:local("Menlo Regular"),local("menlo"),url(/fonts/menlo/Menlo-Regular.woff?e2vwe8)format('woff');font-display:swap}@font-face{font-family:circular std;font-weight:400;font-style:normal;src:local("Circular Std Book"),local("Circular Std"),url(/fonts/circularStd/CircularStd-Book.woff?e2vwe8)format('woff'),url(/fonts/circularStd/CircularStd-Book.woff2?e2vwe8)format('woff');font-display:swap}@font-face{font-family:circular std;font-weight:500;font-style:normal;src:local("Circular Std Medium"),local("Circular Std"),url(/fonts/circularStd/CircularStd-Medium.woff?e2vwe8)format('woff'),url(/fonts/circularStd/CircularStd-Medium.woff2?e2vwe8)format('woff');font-display:swap}@font-face{font-family:circular std;font-weight:700;font-style:normal;src:local("Circular Std Bold"),local("Circular Std"),url(/fonts/circularStd/CircularStd-Bold.woff?e2vwe8)format('woff'),url(/fonts/circularStd/CircularStd-Bold.woff2?e2vwe8)format('woff');font-display:swap}@font-face{font-family:circular std;font-weight:900;font-style:normal;src:local("Circular Std Black"),local("Circular Std"),url(/fonts/circularStd/CircularStd-Black.woff?e2vwe8)format('woff'),url(/fonts/circularStd/CircularStd-Black.woff2?e2vwe8)format('woff');font-display:swap}input:focus,textarea:focus,select:focus{outline:none!important;outline-offset:0!important;box-shadow:none!important}select{-webkit-appearance:none}.qa a{font-weight:700;-webkit-text-decoration-line:underline;text-decoration-line:underline}.bg-skew-yellow-b{background:#ffc91f}.bg-skew-white-b{background:#fff}.bg-skew-black{background:#0f0f0e}.bg-skew-black-t{background:#0f0f0e}.bg-skew-black-alt{background:#0f0f0e}.underline-yellow{background:#ffc91f}@media(min-width:768px){.bg-skew-yellow-b::after{content:'';position:absolute;bottom:0;left:-50%;right:-50%;top:-50%;transform:rotate(-8deg)skew(-8deg);background:#ffc91f;z-index:-1}.bg-skew-white-b:after{content:'';position:absolute;bottom:61px;left:-50%;right:-50%;top:-50%;transform:rotate(-8deg)skew(-8deg);background:#fff;z-index:-1}.bg-skew-black::after{content:'';position:absolute;bottom:0;left:-50%;right:-50%;top:0;transform:rotate(-8deg)skew(-8deg);background:#0f0f0e;z-index:-1}.bg-skew-black-t:after{content:'';position:absolute;bottom:-50%;left:-50%;right:-50%;top:0;transform:rotate(-8deg)skew(-8deg);background:#0f0f0e;z-index:-1}.bg-skew-black-alt::after{content:'';position:absolute;bottom:0;left:-50%;right:-50%;top:0;transform:rotate(8deg)skew(8deg);background:#0f0f0e;z-index:-1}.underline-yellow::after{content:'';background:#ffc91f;height:6px;left:0;right:0;bottom:0;position:absolute}.bg-skew-yellow-b,.bg-skew-white-b,.bg-skew-black,.bg-skew-black-t,.bg-skew-black-alt,.underline-yellow{background:0 0}}.price-plan.recommended{--tw-bg-opacity:1;background-color:rgb(15 15 14/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.price-plan.recommended .txt-hidden{display:block}.price-plan.recommended .border-gray-600{border-color:transparent}.price-plan.recommended .btn-black-o{--tw-border-opacity:1;border-color:rgb(255 201 31/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 201 31/var(--tw-bg-opacity));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.price-plan.recommended .btn-black-o:hover{--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity));background-color:#ffd127;border-color:#ffd127}.fixed-position{left:0!important;width:100%!important}.fixed-position .fixed-bar{width:100%!important;left:0!important;display:flex;flex-wrap:wrap;justify-content:space-between;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding-top:12px;padding-bottom:12px;padding-left:12px;padding-right:12px;--tw-shadow:0 2px 8px rgba(0, 0, 0, 0.16);--tw-shadow-colored:0 2px 8px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.fixed-position .fixed-bar .btn{display:inline-block}.fixed-position h1{margin-top:10px;margin-bottom:10px;margin-right:15px;text-align:left;font-size:16px;font-weight:400}@media(min-width:1024px){.fixed-position h1{margin:0}.fixed-position h1{font-size:24px}}.terms-content{font-size:16px;line-height:1.5}@media(min-width:1024px){.terms-content{max-width:720px}}.terms-content h2{margin-bottom:32px;border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity));padding-top:49px;padding-bottom:31px;font-size:30px;line-height:1.33}@media(min-width:1024px){.terms-content h2{font-size:36px}}.terms-content p{margin-bottom:24px}.terms-content p a:hover{-webkit-text-decoration-line:underline;text-decoration-line:underline}.journey{position:relative;padding-left:60px}.journey:before{content:"";width:3px;position:absolute;top:0;bottom:0;left:20px;background:#0f0f0e}.journey .row+.row{margin-top:40px}.journey .row:after{content:"";width:40px;height:40px;background:#fff;border-radius:50%;border:3px solid #0f0f0e;position:absolute;top:50%;left:-58px;transform:translateY(-50%);z-index:2}.journey time{width:100%;display:flex;flex-wrap:wrap}.box{padding:15px 34px 15px 77px;position:relative;min-height:200px;display:flex;align-items:center;border-radius:8px;overflow:hidden;background:url(/assets/images/bg-triangle.svg)no-repeat 0/cover}.side-nav .active{border-left-width:2px;--tw-border-opacity:1;border-color:rgb(250 173 19/var(--tw-border-opacity));padding-left:14px;font-weight:700}.nice-select{position:relative;outline:none}.custom-select .nice-select .current{display:flex;height:56px;width:100%;cursor:pointer;align-items:center;border-radius:4px;border-width:1px;--tw-border-opacity:1;border-color:rgb(179 186 197/var(--tw-border-opacity));padding-top:10px;padding-bottom:10px;padding-left:20px;padding-right:55px;font-size:16px;font-weight:400;line-height:1.5;--tw-text-opacity:1;color:rgb(90 113 132/var(--tw-text-opacity))}.custom-select .nice-select .current::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(179 186 197/var(--tw-placeholder-opacity))}.custom-select .nice-select .current:-ms-input-placeholder{--tw-placeholder-opacity:1;color:rgb(179 186 197/var(--tw-placeholder-opacity))}.custom-select .nice-select .current::placeholder{--tw-placeholder-opacity:1;color:rgb(179 186 197/var(--tw-placeholder-opacity))}.custom-select .nice-select .current:focus{--tw-border-opacity:1;border-color:rgb(90 113 132/var(--tw-border-opacity))}.custom-select .nice-select .current:after{content:"\e907";font:6px/1 icomoon;position:absolute;right:23px;top:50%;transform:translateY(-50%);color:#5a7184;transition:transform .15s linear}.custom-select .nice-select.open .current:after{transform:translateY(-50%)rotate(180deg)}.custom-select .nice-select.open .list{visibility:visible;opacity:1}.custom-select .nice-select .list{visibility:hidden;position:absolute;top:100%;left:0;right:0;margin-top:-1px;height:212px;overflow:auto;border-radius:4px;border-width:1px;--tw-border-opacity:1;border-color:rgb(179 186 197/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding-top:10px;padding-bottom:10px;padding-left:20px;padding-right:20px;font-size:16px;line-height:1.5;--tw-text-opacity:1;color:rgb(90 113 132/var(--tw-text-opacity));opacity:0;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.custom-select .nice-select .list li{cursor:pointer;padding-top:4px;padding-bottom:4px}.nice-select.style-1 .current{position:relative;display:flex;cursor:pointer;align-items:center;padding-right:18px;font-size:16px}.nice-select.style-1 .current:hover{--tw-text-opacity:1;color:rgb(255 201 31/var(--tw-text-opacity))}.nice-select.style-1 .current:after{position:absolute;right:0;margin-left:8px;margin-top:1px;overflow:hidden;font-size:6px;line-height:1;top:50%;transform:translateY(-50%);content:"\e906";font-family:icomoon;transition:transform .15s linear}.nice-select.style-1.open .current:after{transform:translateY(-50%)rotate(180deg)}.nice-select.style-1.open .list{visibility:visible;opacity:1}.nice-select.style-1 .list{visibility:hidden;position:absolute;right:0;top:100%;z-index:50;width:160px;overflow:auto;border-bottom-right-radius:6px;border-bottom-left-radius:6px;--tw-bg-opacity:1;background-color:rgb(27 37 56/var(--tw-bg-opacity));padding:10px;opacity:0}.nice-select.style-1 .list li{cursor:pointer;padding-top:5px;padding-bottom:5px}.nice-select.style-1 .list li:hover{--tw-text-opacity:1;color:rgb(255 201 31/var(--tw-text-opacity))}[data-more].active .icon-chevron03{transform:rotate(180deg)}.tabs li a.active{font-weight:700;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.tabs li a.active:after{content:"";position:absolute;bottom:-1px;left:0;right:0;height:2px;background:#faad13}.tab-content .tab{display:none}.tab-content .tab.active{display:block}.filter a.active{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.filter label .bg{position:absolute;top:0;left:0;right:0;bottom:0;background:#e8e8e8;z-index:1;transition:background .3s linear}.filter label .txt{position:relative;z-index:2;color:#0f0f0e}.filter input[type=checkbox]{position:fixed;left:0;top:0;opacity:0;z-index:-1}.filter input[type=checkbox]:checked~.bg{background:#ffc91f}.paging li.active a{--tw-bg-opacity:1;background-color:rgb(255 201 31/var(--tw-bg-opacity))}.select-opener:after{position:absolute;right:16px;top:50%;font-size:10px;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}@media(min-width:1024px){.select-opener:after{display:none}}.select-opener:after{transform:translateY(-50%);content:"\e906";font:8px/1 icomoon}.select-opener.active:after{transform:translateY(-50%)rotate(180deg)}.toc{z-index:3}.testimonial-slider-wrap .slider-nav{position:absolute;right:0;bottom:0;display:flex;height:92px;width:80px;flex-wrap:wrap;align-items:center;justify-content:flex-end;--tw-bg-opacity:1;background-color:rgb(15 15 14/var(--tw-bg-opacity))}.testimonial-slider-wrap .slider-nav .slick-next{margin-left:40px}.testimonial-slider-wrap .slider-nav .slick-arrow{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.testimonial-slider-wrap .slider-nav .slick-arrow:hover{--tw-text-opacity:1;color:rgb(255 201 31/var(--tw-text-opacity))}.doc-nav li.active{font-weight:700;-webkit-text-decoration-line:underline;text-decoration-line:underline}.bg-yellow-full{position:relative}.bg-yellow-full:after{content:"";position:absolute;top:100%;left:0;right:0;bottom:-9999px;z-index:1;background:#ffc91f}.navbar .hasdrop .hasdrop-a.active,.navbar .hasdrop:hover .hasdrop-a{-webkit-text-decoration-line:underline;text-decoration-line:underline}.navbar .hasdrop-a:after{content:"\e908";display:inline-block;vertical-align:middle;margin-left:8px;font:6px/1 icomoon}.nav-drop{padding-left:18px;padding-right:18px;padding-top:18px}@media only screen and (min-width:1024px){.journey{padding-left:0}.journey time{justify-content:flex-end}.journey:before{top:30px;bottom:30px;left:50%;transform:translateX(-50%)}.journey .row:after{left:50%;transform:translate(-50%,-50%)}.journey .row+.row{margin-top:101px}.journey .row:nth-child(even){flex-direction:row-reverse}.journey .row:nth-child(even) .box{padding:15px 77px 15px 34px;background-image:url(/assets/images/bg-triangle-r.svg);background-position:100% 0}.journey .row:nth-child(even) time{justify-content:flex-start}.box{min-height:183px}}@media only screen and (max-width:1023px){.navbar-wrap{top:100%;pointer-events:none}.navbar-wrap{position:absolute}.navbar-wrap{left:0}.navbar-wrap{right:0}.nav-active .navbar-wrap{pointer-events:auto}.navbar{transform:translateY(-101%);transition:transform .25s ease-in}.nav-active .navbar{transform:translateY(0)}.nav-active .nav-opener .icon-menu:before{content:"\e90c";margin-right:3px}.testimonial-slider-wrap .slider-nav{position:static}.testimonial-slider-wrap .slider-nav{margin-top:20px}.testimonial-slider-wrap .slider-nav{height:auto}.testimonial-slider-wrap .slider-nav{width:100%}.sticky-aside.is-affixed .inner-wrapper-sticky h3{display:none}}@media only screen and (max-width:767px){.journey .row:after{top:-2px;transform:none}.box{background:#ffc91f;padding:15px}}@media only screen and (min-width:1024px){.sub-navs{display:block!important}.toc{position:static!important}.navbar .hasdrop{margin-left:-21px;margin-right:-21px}.navbar .hasdrop{margin-top:-14px;margin-bottom:-14px}.navbar .hasdrop:hover .nav-drop{visibility:visible}.navbar .hasdrop:hover .nav-drop{opacity:1}.navbar .hasdrop:hover .hasdrop-a{color:rgba(0,0,0,.47)}.navbar .hasdrop:hover .hasdrop-a{-webkit-text-decoration-line:none;text-decoration-line:none}.navbar .hasdrop .hasdrop-a.active{-webkit-text-decoration-line:none;text-decoration-line:none}.navbar .hasdrop-a{position:relative}.navbar .hasdrop-a{padding-top:14px;padding-bottom:14px}.navbar .hasdrop-a{padding-left:21px;padding-right:21px}.navbar .hasdrop-a{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.navbar .hasdrop-a:hover{color:rgba(0,0,0,.47)}.navbar .hasdrop-a:hover{-webkit-text-decoration-line:none;text-decoration-line:none}.nav-drop{display:block!important;height:auto!important}.nav-drop{visibility:hidden}.nav-drop{position:absolute}.nav-drop{top:100%}.nav-drop{left:15px}.nav-drop{min-width:214px}.nav-drop{border-radius:.375rem}.nav-drop{--tw-bg-opacity:1;background-color:rgb(15 15 14/var(--tw-bg-opacity))}.nav-drop{padding-top:18px;padding-bottom:18px}.nav-drop{padding-left:21px;padding-right:21px}.nav-drop{opacity:0}.nav-drop{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.nav-drop:after{content:" ";position:absolute;right:calc(50% - 15px);top:-10px;border-top:none;border-right:15px solid transparent;border-left:15px solid transparent;border-bottom:15px solid #000}}@media only screen and (min-width:1280px){.nav-drop{left:21px}}@media only screen and (max-width:1023px){.toc .sub-navs{overflow-y:auto;max-height:calc( 100vh - 48px)}}.range-slider__slider{width:100%;margin:39px 0 30px;position:relative}.range-slider__slider:after{content:"";position:absolute;top:50%;left:0;right:0;transform:translateY(-50%);background:#e6ecf2;height:8px;border-radius:4px}.range-slider__slider .range-slider__slide{position:absolute;left:0;top:4px;z-index:2;height:8px;border-radius:4px;--tw-bg-opacity:1;background-color:rgb(255 201 31/var(--tw-bg-opacity))}.range-slider__slider .input-wrap{position:relative;z-index:2}.range-slider__slider input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:8px;border-radius:4px;background:0 0}.range-slider__slider input::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:24px;height:24px;background:#0f0f0e;cursor:pointer;border-radius:50%;border:none}.range-slider__slider input::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:24px;height:24px;background:#0f0f0e;cursor:pointer;border-radius:50%;border:none}.custom-checkbox input{position:fixed;left:0;top:0;opacity:0;z-index:-1}.custom-checkbox{position:relative;display:inline-flex;align-items:center;margin:0;font-size:16px;line-height:1.5;color:#5a7184;padding-left:26px}.custom-checkbox .checkmark{width:16px;height:16px;position:absolute;left:0;top:2px;border:1px solid #5a7184;transition:border .3s linear,background .3s linear}.custom-checkbox .checkmark:after{content:"\e923";font:8px/1 icomoon;position:absolute;color:#5a7184;top:50%;left:50%;transform:translate(-50%,-50%);opacity:0;transition:opacity .3s linear}.custom-checkbox input:checked+.checkmark:after{opacity:1}.blog-post h1,.blog-post h2,.blog-post h3,.blog-post h4,.blog-post h5,.blog-post h6{margin-top:50px;margin-bottom:25px;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.blog-post h2,.blog-post h3,.blog-post h4,.blog-post h5,.blog-post h6{margin-top:-70px;padding-top:121px;outline:2px solid transparent;outline-offset:2px}.blog-post h2:first-of-type{margin-bottom:21px;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.blog-post h2:first-child,.blog-post h3:first-child{margin-top:0;padding-top:0}.blog-post p:not(:last-child),.blog-post .highlight:not(:last-child),.blog-post blockquote:not(:last-child),.blog-post pre:not(:last-child),.blog-post>ul:not(:last-child),.blog-post>ol:not(:last-child),.blog-post>table:not(:last-child){margin-bottom:20px}.blog-post code,.blog-post pre{border-radius:.375rem;font-size:.9em}.blog-post h1>code,.blog-post h2>code,.blog-post h3>code{font-size:inherit!important}.blog-post{--tw-text-opacity:1;color:rgb(52 66 84/var(--tw-text-opacity))}.blog-post blockquote{border-left-width:4px;border-style:solid;--tw-border-opacity:1;border-left-color:rgb(255 201 31/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 236 199/var(--tw-bg-opacity));padding:20px}.blog-post code:not(.hljs){margin-bottom:20px;--tw-bg-opacity:1;background-color:rgb(230 236 242/var(--tw-bg-opacity));padding-left:4px;padding-right:4px;font-family:Circular Std,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;font-size:16px;--tw-text-opacity:1;color:rgb(33 43 69/var(--tw-text-opacity))}.blog-post>ul{list-style-type:disc;padding-left:28px}.blog-post a{font-style:normal;-webkit-text-decoration-line:underline;text-decoration-line:underline}.blog-post a:hover{font-weight:700}.blog-post>ol{list-style-type:decimal;padding-left:28px}.blog-post img{vertical-align:middle;border:0}.blog-post .img svg,.blog-post .img img{margin:0;width:100%;height:auto}.blog-post .img{position:relative}.blog-post .img img{position:absolute;top:0;left:0}.blog-post table{border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity))}.blog-post th,.blog-post td{border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity));padding:10px}.toc{overflow-y:auto;font-size:16px}.toc>.toc-list{overflow:hidden;position:relative}.toc>.toc-list li{list-style:none;margin-bottom:10px}.toc-list{margin:0;padding-left:10px}a.toc-link{--tw-text-opacity:1;color:rgb(90 113 132/var(--tw-text-opacity));height:100%}.is-collapsible{max-height:1000px;overflow:hidden;transition:all 300ms ease-in-out}.is-collapsed{max-height:0}.is-position-fixed{position:fixed!important;top:0}.is-active-link{--tw-text-opacity:1 !important;color:rgb(15 15 14/var(--tw-text-opacity))!important}.toc-link::before{background-color:#eee;content:' ';display:inline-block;height:inherit;left:0;margin-top:-1px;position:absolute;width:2px}.toc-link:hover::before{background-color:#ffc91f}.is-active-link::before{background-color:#ffc91f}.nice-tab-content{display:none}.nice-tab-content.active{display:block}.client-library{border-radius:.375rem;padding:10px;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.client-library:hover{--tw-bg-opacity:1;background-color:rgb(255 236 199/var(--tw-bg-opacity))}.client-library.active{--tw-bg-opacity:1;background-color:rgb(255 201 31/var(--tw-bg-opacity))}.doc-content{font-size:16px}.doc-content h2,.doc-content h3,.doc-content h4,.doc-content h5,.doc-content h6{font-weight:700;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.doc-content>h2,.doc-content>h3{margin-top:40px;margin-bottom:21px}.doc-content h2{font-size:36px}.doc-content p{margin-bottom:10px}.doc-content code:not(.hljs),.doc-content pre:not(.hljs){margin-bottom:10px;border-radius:4px;font-size:16px}.doc-content>pre>code{--tw-bg-opacity:1;background-color:rgb(44 58 87/var(--tw-bg-opacity))}.doc-content{--tw-text-opacity:1;color:rgb(52 66 84/var(--tw-text-opacity))}.doc-content blockquote{margin-bottom:10px;border-left-width:4px;border-style:solid;--tw-border-opacity:1;border-left-color:rgb(255 201 31/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 236 199/var(--tw-bg-opacity));padding:20px}.doc-content p>code:not(.hljs),.doc-content li>code:not(.hljs),.doc-content td>code:not(.hljs){--tw-bg-opacity:1;background-color:rgb(230 236 242/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(33 43 69/var(--tw-text-opacity));padding-left:4px;padding-right:4px;font-family:Circular Std,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji}code.hljs{--tw-bg-opacity:1;background-color:rgb(44 58 87/var(--tw-bg-opacity));border-radius:4px;font-size:14px}.doc-content>ul{margin-bottom:10px;list-style-type:disc;padding-left:28px}.doc-content a{font-style:normal;-webkit-text-decoration-line:underline;text-decoration-line:underline}.doc-content a:hover{font-weight:700}.doc-content>ol{margin-bottom:10px;list-style-type:decimal;padding-left:28px}.doc-content img{vertical-align:middle;border:0}.doc-content .img svg,.doc-content .img img{margin:0;width:100%;height:auto}.doc-content .img{position:relative}.doc-content .img img{position:absolute;top:0;left:0}.doc-content table{margin-bottom:10px;border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity))}.doc-content th,.doc-content td{border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity));padding:10px}.doc-row{display:flex;flex-wrap:wrap;border-bottom-width:1px;--tw-border-opacity:1;border-color:rgb(217 218 219/var(--tw-border-opacity));padding-bottom:48px;padding-top:47px;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.doc-left{width:100%;font-size:16px}.doc-left h2,.doc-left h3,.doc-left h4,.doc-left h5,.doc-left h6{font-weight:700;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.doc-left>h2,.doc-left>h3{margin-top:40px;margin-bottom:21px}.doc-left h2{font-size:36px}.doc-left p{margin-bottom:10px}.doc-left code:not(.hljs),.doc-left pre:not(.hljs){margin-bottom:10px;border-radius:4px;font-size:16px}.doc-left>pre>code{--tw-bg-opacity:1;background-color:rgb(44 58 87/var(--tw-bg-opacity))}.doc-left{--tw-text-opacity:1;color:rgb(52 66 84/var(--tw-text-opacity))}.doc-left blockquote{margin-bottom:10px;border-left-width:4px;border-style:solid;--tw-border-opacity:1;border-left-color:rgb(255 201 31/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 236 199/var(--tw-bg-opacity));padding:20px}.doc-left p>code:not(.hljs),.doc-left li>code:not(.hljs),.doc-left td>code:not(.hljs){}.doc-left>ul{margin-bottom:10px;list-style-type:disc;padding-left:28px}.doc-left a{font-style:normal;-webkit-text-decoration-line:underline;text-decoration-line:underline}.doc-left a:hover{font-weight:700}.doc-left>ol{margin-bottom:10px;list-style-type:decimal;padding-left:28px}.doc-left img{vertical-align:middle;border:0}.doc-left .img svg,.doc-left .img img{margin:0;width:100%;height:auto}.doc-left .img{position:relative}.doc-left .img img{position:absolute;top:0;left:0}.doc-left table{margin-bottom:10px;border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity))}.doc-left th,.doc-left td{border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity));padding:10px}@media(min-width:1024px){.doc-left{width:50%}}.doc-right{width:100%;padding-top:50px;font-size:16px}.doc-right h2,.doc-right h3,.doc-right h4,.doc-right h5,.doc-right h6{font-weight:700;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.doc-right>h2,.doc-right>h3{margin-top:40px;margin-bottom:21px}.doc-right h2{font-size:36px}.doc-right p{margin-bottom:10px}.doc-right code:not(.hljs),.doc-right pre:not(.hljs){margin-bottom:10px;border-radius:4px;font-size:16px}.doc-right>pre>code{--tw-bg-opacity:1;background-color:rgb(44 58 87/var(--tw-bg-opacity))}.doc-right{--tw-text-opacity:1;color:rgb(52 66 84/var(--tw-text-opacity))}.doc-right blockquote{margin-bottom:10px;border-left-width:4px;border-style:solid;--tw-border-opacity:1;border-left-color:rgb(255 201 31/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 236 199/var(--tw-bg-opacity));padding:20px}.doc-right p>code:not(.hljs),.doc-right li>code:not(.hljs),.doc-right td>code:not(.hljs){}.doc-right>ul{margin-bottom:10px;list-style-type:disc;padding-left:28px}.doc-right a{font-style:normal;-webkit-text-decoration-line:underline;text-decoration-line:underline}.doc-right a:hover{font-weight:700}.doc-right>ol{margin-bottom:10px;list-style-type:decimal;padding-left:28px}.doc-right img{vertical-align:middle;border:0}.doc-right .img svg,.doc-right .img img{margin:0;width:100%;height:auto}.doc-right .img{position:relative}.doc-right .img img{position:absolute;top:0;left:0}.doc-right table{margin-bottom:10px;border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity))}.doc-right th,.doc-right td{border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity));padding:10px}@media(min-width:1024px){.doc-right{width:50%}.doc-right{padding-left:30px}}@media(min-width:1440px){.doc-right{padding-left:32px}}.doc-full{width:100%;font-size:16px}.doc-full h2,.doc-full h3,.doc-full h4,.doc-full h5,.doc-full h6{font-weight:700;--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.doc-full>h2,.doc-full>h3{margin-top:40px;margin-bottom:21px}.doc-full h2{font-size:36px}.doc-full p{margin-bottom:10px}.doc-full code:not(.hljs),.doc-full pre:not(.hljs){margin-bottom:10px;border-radius:4px;font-size:16px}.doc-full>pre>code{--tw-bg-opacity:1;background-color:rgb(44 58 87/var(--tw-bg-opacity))}.doc-full{--tw-text-opacity:1;color:rgb(52 66 84/var(--tw-text-opacity))}.doc-full blockquote{margin-bottom:10px;border-left-width:4px;border-style:solid;--tw-border-opacity:1;border-left-color:rgb(255 201 31/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 236 199/var(--tw-bg-opacity));padding:20px}.doc-full p>code:not(.hljs),.doc-full li>code:not(.hljs),.doc-full td>code:not(.hljs){}.doc-full>ul{margin-bottom:10px;list-style-type:disc;padding-left:28px}.doc-full a{font-style:normal;-webkit-text-decoration-line:underline;text-decoration-line:underline}.doc-full a:hover{font-weight:700}.doc-full>ol{margin-bottom:10px;list-style-type:decimal;padding-left:28px}.doc-full img{vertical-align:middle;border:0}.doc-full .img svg,.doc-full .img img{margin:0;width:100%;height:auto}.doc-full .img{position:relative}.doc-full .img img{position:absolute;top:0;left:0}.doc-full table{margin-bottom:10px;border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity))}.doc-full th,.doc-full td{border-width:1px;--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity));padding:10px}.snippet-copy{cursor:pointer}.snippet-copy>span:hover{font-weight:900}.doc-section-splitter{margin-top:50px}.toc-doc{font-size:16px}.toc-doc .toc-list li{margin-bottom:0;padding-top:4px;padding-bottom:4px}.toc-doc ol ol{padding-left:14px}.alternatives a:not([class]){font-weight:700;-webkit-text-decoration-line:underline;text-decoration-line:underline}.alternatives a:not([class]):hover{-webkit-text-decoration-line:none;text-decoration-line:none}.last-of-type\:border-0:last-of-type{border-width:0}.hover\:border-2:hover{border-width:2px}.hover\:border-yellow-100:hover{--tw-border-opacity:1;border-color:rgb(255 201 31/var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(179 186 197/var(--tw-border-opacity))}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(255 201 31/var(--tw-bg-opacity))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.hover\:bg-opacity-90:hover{--tw-bg-opacity:0.9}.hover\:font-bold:hover{font-weight:700}.hover\:text-yellow-100:hover{--tw-text-opacity:1;color:rgb(255 201 31/var(--tw-text-opacity))}.hover\:text-black-100:hover{--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(228 231 236/var(--tw-text-opacity))}.hover\:underline:hover{-webkit-text-decoration-line:underline;text-decoration-line:underline}.hover\:no-underline:hover{-webkit-text-decoration-line:none;text-decoration-line:none}.hover\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px rgb(0 0 0 / 0.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}@media(min-width:375px){.xs\:text-[18px]{font-size:18px}}@media(min-width:768px){.sm\:order-none{order:0}.sm\:-m-[1px]{margin:-1px}.sm\:my-[6px]{margin-top:6px;margin-bottom:6px}.sm\:-mx-[6px]{margin-left:-6px;margin-right:-6px}.sm\:mb-[0]{margin-bottom:0}.sm\:mb-[40px]{margin-bottom:40px}.sm\:mb-[27px]{margin-bottom:27px}.sm\:mb-[22px]{margin-bottom:22px}.sm\:mb-[16px]{margin-bottom:16px}.sm\:mb-[32px]{margin-bottom:32px}.sm\:mb-[33px]{margin-bottom:33px}.sm\:mb-[20px]{margin-bottom:20px}.sm\:mr-[30px]{margin-right:30px}.sm\:mt-[50px]{margin-top:50px}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:h-[40px]{height:40px}.sm\:h-auto{height:auto}.sm\:w-[1px]\/2{width:50%}.sm\:w-[10px]\/12{width:83.333333%}.sm\:w-auto{width:auto}.sm\:w-[40px]{width:40px}.sm\:w-[calc(50% - 28px)]{width:calc(50% - 28px)}.sm\:w-[1px]\/3{width:33.333333%}.sm\:w-[281px]{width:281px}.sm\:w-[100px]{width:100px}.sm\:w-[50px]{width:50px}.sm\:max-w-[490px]{max-width:490px}.sm\:flex-1{flex:1}.sm\:justify-start{justify-content:flex-start}.sm\:p-[32px]{padding:32px}.sm\:py-[60px]{padding-top:60px;padding-bottom:60px}.sm\:px-[24px]{padding-left:24px;padding-right:24px}.sm\:py-[70px]{padding-top:70px;padding-bottom:70px}.sm\:pt-[102px]{padding-top:102px}.sm\:pb-[80px]{padding-bottom:80px}.sm\:pt-[91px]{padding-top:91px}.sm\:pb-[71px]{padding-bottom:71px}.sm\:pb-[60px]{padding-bottom:60px}.sm\:pt-[41px]{padding-top:41px}.sm\:pb-[70px]{padding-bottom:70px}.sm\:pr-[12px]{padding-right:12px}.sm\:pt-[100px]{padding-top:100px}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}.sm\:text-[40px]{font-size:40px}.sm\:text-[24px]{font-size:24px}.sm\:text-[48px]{font-size:48px}.sm\:text-[20px]{font-size:20px}.sm\:text-[18px]{font-size:18px}.sm\:text-[16px]{font-size:16px}.sm\:text-[60px]{font-size:60px}}@media(min-width:1024px){.md\:order-1{order:1}.md\:order-3{order:3}.md\:order-first{order:-9999}.md\:-m-[28px]{margin:-28px}.md\:m-[0]{margin:0}.md\:mx-[0]{margin-left:0;margin-right:0}.md\:-mx-[21px]{margin-left:-21px;margin-right:-21px}.md\:-mx-[60px]{margin-left:-60px;margin-right:-60px}.md\:-mx-[36px]{margin-left:-36px;margin-right:-36px}.md\:mt-[120px]{margin-top:120px}.md\:mb-[80px]{margin-bottom:80px}.md\:mb-[0]{margin-bottom:0}.md\:mr-[60px]{margin-right:60px}.md\:mr-[40px]{margin-right:40px}.md\:mb-[67px]{margin-bottom:67px}.md\:mb-[42px]{margin-bottom:42px}.md\:mb-[66px]{margin-bottom:66px}.md\:mb-[170px]{margin-bottom:170px}.md\:-mr-[60px]{margin-right:-60px}.md\:mb-[196px]{margin-bottom:196px}.md\:mb-[115px]{margin-bottom:115px}.md\:mb-[75px]{margin-bottom:75px}.md\:mb-[74px]{margin-bottom:74px}.md\:mb-[54px]{margin-bottom:54px}.md\:mb-[45px]{margin-bottom:45px}.md\:mt-[0]{margin-top:0}.md\:block{display:block}.md\:inline-block{display:inline-block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-[48px]{height:48px}.md\:w-[22px]\.3p{width:22.3%}.md\:w-[22px]{width:22px}.md\:w-[53px]\.3p{width:53.3%}.md\:w-[53px]{width:53px}.md\:w-[3px]\/12{width:25%}.md\:w-[9px]\/12{width:75%}.md\:w-[6px]\/12{width:50%}.md\:w-[1px]\/4{width:25%}.md\:w-[1px]\/2{width:50%}.md\:w-[500px]{width:500px}.md\:w-full{width:100%}.md\:w-auto{width:auto}.md\:min-w-[0]{min-width:0}.md\:max-w-none{max-width:none}.md\:max-w-[380px]{max-width:380px}.md\:max-w-[434px]{max-width:434px}.md\:flex-1{flex:1}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-start{justify-content:flex-start}.md\:justify-between{justify-content:space-between}.md\:overflow-visible{overflow:visible}.md\:border-transparent{border-color:transparent}.md\:border-black-100{--tw-border-opacity:1;border-color:rgb(15 15 14/var(--tw-border-opacity))}.md\:bg-transparent{background-color:transparent}.md\:p-[28px]{padding:28px}.md\:p-[0]{padding:0}.md\:px-[41px]{padding-left:41px;padding-right:41px}.md\:py-[38px]{padding-top:38px;padding-bottom:38px}.md\:px-[15px]{padding-left:15px;padding-right:15px}.md\:py-[22px]{padding-top:22px;padding-bottom:22px}.md\:px-[8px]{padding-left:8px;padding-right:8px}.md\:px-[60px]{padding-left:60px;padding-right:60px}.md\:py-[100px]{padding-top:100px;padding-bottom:100px}.md\:px-[48px]{padding-left:48px;padding-right:48px}.md\:py-[80px]{padding-top:80px;padding-bottom:80px}.md\:px-[0]{padding-left:0;padding-right:0}.md\:py-[91px]{padding-top:91px;padding-bottom:91px}.md\:px-[36px]{padding-left:36px;padding-right:36px}.md\:pt-[111px]{padding-top:111px}.md\:pb-[3px]{padding-bottom:3px}.md\:pb-[30px]{padding-bottom:30px}.md\:pl-[30px]{padding-left:30px}.md\:pb-[0]{padding-bottom:0}.md\:pt-[180px]{padding-top:180px}.md\:pb-[113px]{padding-bottom:113px}.md\:pt-[210px]{padding-top:210px}.md\:pt-[156px]{padding-top:156px}.md\:pb-[127px]{padding-bottom:127px}.md\:pt-[220px]{padding-top:220px}.md\:pb-[220px]{padding-bottom:220px}.md\:pt-[162px]{padding-top:162px}.md\:pb-[200px]{padding-bottom:200px}.md\:pl-[64px]{padding-left:64px}.md\:pb-[20px]{padding-bottom:20px}.md\:pb-[82px]{padding-bottom:82px}.md\:pb-[100px]{padding-bottom:100px}.md\:text-left{text-align:left}.md\:text-center{text-align:center}.md\:text-right{text-align:right}.md\:text-[18px]{font-size:18px}.md\:text-[42px]{font-size:42px}.md\:text-[56px]{font-size:56px}.md\:text-[62px]{font-size:62px}.md\:text-[14px]{font-size:14px}.md\:text-[24px]{font-size:24px}.md\:text-[36px]{font-size:36px}.md\:text-black-100{--tw-text-opacity:1;color:rgb(15 15 14/var(--tw-text-opacity))}.md\:hover\:bg-black-100:hover{--tw-bg-opacity:1;background-color:rgb(15 15 14/var(--tw-bg-opacity))}.md\:hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}}@media(min-width:1280px){.lg\:-mx-[23px]{margin-left:-23px;margin-right:-23px}.lg\:-mx-[8px]{margin-left:-8px;margin-right:-8px}.lg\:mr-[86px]{margin-right:86px}.lg\:mr-[90px]{margin-right:90px}.lg\:mr-[83px]{margin-right:83px}.lg\:w-[8px]\/12{width:66.666667%}.lg\:w-[608px]{width:608px}.lg\:w-[52%]{width:52%}.lg\:w-[26%]{width:26%}.lg\:w-[22%]{width:22%}.lg\:max-w-[434px]{max-width:434px}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-between{justify-content:space-between}.lg\:px-[23px]{padding-left:23px;padding-right:23px}.lg\:px-[36px]{padding-left:36px;padding-right:36px}.lg\:px-[21px]{padding-left:21px;padding-right:21px}.lg\:px-[12px]{padding-left:12px;padding-right:12px}.lg\:px-[8px]{padding-left:8px;padding-right:8px}.lg\:pt-[80px]{padding-top:80px}.lg\:text-[56px]{font-size:56px}.lg\:text-[16px]{font-size:16px}.lg\:text-[24px]{font-size:24px}}@media(min-width:1440px){.xl\:w-[2px]\/12{width:16.666667%}.xl\:w-[10px]\/12{width:83.333333%}.xl\:pl-[29px]{padding-left:29px}.xl\:pr-[105px]{padding-right:105px}.xl\:pl-[32px]{padding-left:32px}.xl\:pr-[34px]{padding-right:34px}.xl\:text-[16px]{font-size:16px}}
 &lt;/style>
&lt;link rel="preload" href="https://www.scrapingbee.com/main.min.a09f1f7d5c32eba3a323bc3c39fca98dc62a83bad52faf6e0c62e7c5285cab6a.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
&lt;noscript>&lt;link rel="stylesheet" href="https://www.scrapingbee.com/main.min.a09f1f7d5c32eba3a323bc3c39fca98dc62a83bad52faf6e0c62e7c5285cab6a.css">&lt;/noscript>
&lt;script type="application/ld+json">
 {
 "@context": "http://schema.org",
 "@type": "WebSite",
 "name": "ScrapingBee, the best web scraping API.",
 "url": "https://www.scrapingbee.com/",
 "description": "ScrapingBee is a Web Scraping API that handles proxies and Headless browser for you, so you can focus on extracting the data you want, and nothing else.",
 "thumbnailUrl": "https://www.scrapingbee.com/favico.png"
 }
&lt;/script>
&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Organization",
 "description": "The easiest web scraping API on the web. We handles headless browers and rotate proxies for you.",
 "address": {
 "@type": "PostalAddress",
 "addressLocality": "Paris, France",
 "postalCode": "F-75008",
 "streetAddress": "66 Avenue des Champs Elysées, OCB Business Center 4"
 },
 "email": "hello(at)scrapingbee.com",
 "member": [
 {
 "@type": "Organization"
 },
 {
 "@type": "Organization"
 }
 ],
 "alumni": [
 {
 "@type": "Person",
 "name": "Pierre de Wulf"
 },
 {
 "@type": "Person",
 "name": "Kevin Sahin"
 }
 ],
 "name": "ScrapingBee"
 }
 &lt;/script>
&lt;/head>
 &lt;body>
 &lt;!-- Google Tag Manager (noscript) -->
 &lt;noscript>&lt;iframe src="https://www.googletagmanager.com/ns.html?id=GTM-P4H32H5J"
 height="0" width="0" style="display:none;visibility:hidden">&lt;/iframe>&lt;/noscript>
 &lt;!-- End Google Tag Manager (noscript) -->
 &lt;div id="wrapper">
 &lt;header class="absolute top-[0] right-[0] left-[0] py-[20px] bg-yellow-100 md:py-[38px] z-[9]">
 &lt;div class="container">
 &lt;div class="flex items-center">
 &lt;div class="w-[160px] md:mr-[60px] lg:mr-[90px]">
 &lt;a href="https://www.scrapingbee.com/">
 &lt;img src="https://www.scrapingbee.com/images/logo.svg" alt="ScrapingBee logo" height="26" width="160">
 &lt;/a>
 &lt;/div>
 &lt;span class="absolute top-[0] right-[0] mr-[20px] cursor-pointer nav-opener md:hidden mt-[19px]">&lt;i class="icon-menu">&lt;/i>&lt;/span>
 &lt;div class="overflow-hidden navbar-wrap md:overflow-visible md:flex-1">
 &lt;nav class="px-[20px] py-[20px] text-white navbar md:p-[0] md:flex md:items-center md:justify-between text-[16px] leading-[1.20] bg-black-100 md:bg-transparent md:text-black-100">
 &lt;ul class="flex justify-between items-center pb-[20px] border-b border-blue-200 -mx-[21px] md:justify-start md:border-transparent md:pb-[0] mb-[30px] md:mb-[0]">
 &lt;li class="px-[15px] lg:px-[21px]">&lt;a href="https://app.scrapingbee.com/account/login" class="block hover:underline">Login&lt;/a>&lt;/li>
 &lt;li class="px-[15px] lg:px-[21px]">&lt;a href="https://app.scrapingbee.com/account/register" class="h-[40px] text-white border-white transition-all btn btn-black-o text-[16px] px-[21px] md:h-[48px] md:border-black-100 md:text-black-100 hover:bg-white md:hover:bg-black-100 hover:text-black-100 md:hover:text-white">Sign Up&lt;/a>&lt;/li>
 &lt;/ul>
 &lt;ul class="md:flex md:order-first md:items-center md:-mx-[21px]">
 &lt;li class="relative mb-[20px] md:px-[15px] lg:px-[21px] md:mb-[0]">&lt;a href="https://www.scrapingbee.com/#pricing" class="block hover:underline">Pricing&lt;/a>&lt;/li>
 &lt;li class="relative mb-[20px] md:px-[15px] lg:px-[21px] md:mb-[0]">&lt;a href="https://www.scrapingbee.com/#faq" class="block hover:underline">FAQ&lt;/a>&lt;/li>
 &lt;li class="relative mb-[20px] md:px-[15px] lg:px-[21px] md:mb-[0]">&lt;a href="https://www.scrapingbee.com/blog/" class="block hover:underline">Blog&lt;/a>&lt;/li>
 &lt;li class="relative mb-[20px] md:px-[15px] lg:px-[21px] md:mb-[0]">
 &lt;a href="#" class="block hover:underline">Other Features&lt;/a>
 &lt;ul class="nav-drop">
 &lt;li>&lt;a href="https://www.scrapingbee.com/features/screenshot/" class="text-white hover:underline">Screenshots&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://www.scrapingbee.com/features/google/" class="text-white hover:underline">Google search API&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://www.scrapingbee.com/features/chatgpt/" class="text-white hover:underline">ChatGPT API&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://www.scrapingbee.com/features/amazon/" class="text-white hover:underline">Amazon API&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://www.scrapingbee.com/features/youtube/" class="text-white hover:underline">YouTube API&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://www.scrapingbee.com/features/walmart/" class="text-white hover:underline">Walmart API&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://www.scrapingbee.com/features/data-extraction/" class="text-white hover:underline">Data extraction&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://www.scrapingbee.com/features/javascript-scenario/" class="text-white hover:underline">JavaScript scenario&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://www.scrapingbee.com/features/make/" class="text-white hover:underline">No code web scraping&lt;/a>&lt;/li>
 &lt;/ul>
 &lt;/li>
 &lt;li class="relative mb-[20px] md:px-[15px] lg:px-[21px] md:mb-[0]">
 &lt;a href="#" class="block hover:underline">Developers&lt;/a>
 &lt;ul class="nav-drop">
 &lt;li>&lt;a href="https://www.scrapingbee.com/tutorials" class="text-white hover:underline">Tutorials&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://www.scrapingbee.com/documentation" class="text-white hover:underline">Documentation&lt;/a>&lt;/li>
 &lt;li class="mt-[12px]">&lt;a href="https://help.scrapingbee.com/en/" target="_blank" class="text-white hover:underline">Knowledge Base&lt;/a>&lt;/li>
 &lt;/ul>
 &lt;/li>
 &lt;/ul>
 &lt;/nav>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/header>
 &lt;div id="content">
&lt;div class="overflow-hidden">
&lt;section class="relative bg-skew-yellow-b pt-[66px] md:pt-[156px] pb-[100px] md:pb-[220px] z-1">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px] mb-[50px] sm:mb-[0]">
 &lt;div class="max-w-[508px] text-[20px] md:text-[24px] leading-[1.50] pt-[35px]">
 &lt;h1 class="mb-[33px]">The Web Scraping API for Busy Developers&lt;/h1>
 &lt;p class="mb-[45px]">Our Web Scraping API handles headless browsers and rotates proxies for you.&lt;/p></description></item><item><title>99Acres Scraper API - Easy Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/99acres-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/99acres-scraper-api/</guid><description/></item><item><title>Acceptable Use Policy</title><link>https://www.scrapingbee.com/acceptable-use-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/acceptable-use-policy/</guid><description>&lt;p>The present Acceptable Use Policy (the “AUP”) covers the Services provided under legitimate and legal purposes only and any ongoing Agreement. Capitalized terms in this AUP have the same meaning as in the General Conditions in which they are defined.&lt;/p>
&lt;p>The AUP intends to protect Provider, Users, and more generally internet users from illegal, fraudulent, or abusive activities. As such, any access or use of the Services for illegal, fraudulent, or abusive activities is strictly prohibited. Any such suspected access or use will be investigated.&lt;/p></description></item><item><title>Adidas Scraper API - Easy Sign Up + Free Credits</title><link>https://www.scrapingbee.com/scrapers/adidas-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/adidas-api/</guid><description/></item><item><title>Affiliate Program</title><link>https://www.scrapingbee.com/affiliates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/affiliates/</guid><description>&lt;p>Earn commissions by promoting ScrapingBee&lt;/p>
&lt;p>Welcome to the ScrapingBee affiliate program. ScrapingBee is a web scraping API. We help developers and tech companies scrape the web without having to deal with rotating proxies and headless browsers.&lt;/p>
&lt;p>We are a Software as a Service company, meaning our customers pay us a monthly fee to access the service. The price depends on the volume, and we have three tiers: $29 / $99 / $249 per month.&lt;/p></description></item><item><title>AI Web Scraping API</title><link>https://www.scrapingbee.com/features/ai-web-scraping-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/ai-web-scraping-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Effortlessly extract data with our AI scraper API. Simplify data extraction, get clean JSON outputs and adapt to page changes. Try it free today!",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
 &lt;h1 class="mb-[14px]">AI Web Scraping API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Effortlessly extract data with our AI scraper API. Simplify data extraction, get clean JSON outputs and adapt to page changes. Try it free today!&lt;/p></description></item><item><title>Airbnb Scraper API - Quick Signup + Free Credits</title><link>https://www.scrapingbee.com/scrapers/airbnb-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/airbnb-api/</guid><description/></item><item><title>Alibaba Scraper API Tool - Free Credits &amp; Easy Setup</title><link>https://www.scrapingbee.com/scrapers/alibaba-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/alibaba-api/</guid><description/></item><item><title>AliExpress Scraper API with Credits - Easy &amp; Simple Tool</title><link>https://www.scrapingbee.com/scrapers/aliexpress-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/aliexpress-api/</guid><description/></item><item><title>Amazon API</title><link>https://www.scrapingbee.com/documentation/amazon/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/documentation/amazon/</guid><description>&lt;p>Our Amazon API allows you to scrape Amazon search results and product details in realtime.&lt;/p>
&lt;p>We provide two endpoints:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Search endpoint&lt;/strong> (&lt;code>/api/v1/amazon/search&lt;/code>) - Fetch Amazon search results&lt;/li>
&lt;li>&lt;strong>Product endpoint&lt;/strong> (&lt;code>/api/v1/amazon/product&lt;/code>) - Fetch structured Amazon product details&lt;/li>
&lt;/ul>
&lt;div class="doc-row">
&lt;div class="doc-full">
&lt;h2 id="amazon-product-api">Amazon Product API&lt;/h2>
&lt;h3 id="quick-start">Quick start&lt;/h3>
&lt;p>To scrape Amazon product details, you only need two things:&lt;/p>
&lt;ul>
&lt;li>your API key, available &lt;a href="https://app.scrapingbee.com/account/manage/api_key" >here&lt;/a>&lt;/li>
&lt;li>a product ASIN (&lt;a href="#query" >learn more about ASIN&lt;/a>)&lt;/li>
&lt;/ul>
&lt;p>Then, simply do this.&lt;/p>





 



 

 
 
 

&lt;div class="p-1 rounded mb-6 bg-[#F4F0F0] border border-[#1A1414]/10 text-[16px] leading-[1.50]" data-tabs-id="8f5ccef445fa8cddcb48c1ace64cbdd2">

 &lt;div class="md:pl-[30px] xl:pl-[32px] flex items-center justify-end gap-3 py-[10px] px-[17px]" x-data="{ 
 open: false, 
 selectedLibrary: 'python-8f5ccef445fa8cddcb48c1ace64cbdd2',
 libraries: [
 { name: 'Python', value: 'python-8f5ccef445fa8cddcb48c1ace64cbdd2', icon: '/images/icons/icon-python.svg', width: 32, height: 32 },
 { name: 'cURL', value: 'curl-8f5ccef445fa8cddcb48c1ace64cbdd2', icon: '/images/icons/icon-curl.svg', width: 48, height: 32 },
 { name: 'NodeJS', value: 'node-8f5ccef445fa8cddcb48c1ace64cbdd2', icon: '/images/icons/icon-node.svg', width: 26, height: 26 },
 { name: 'Java', value: 'java-8f5ccef445fa8cddcb48c1ace64cbdd2', icon: '/images/icons/icon-java.svg', width: 32, height: 32 },
 { name: 'Ruby', value: 'ruby-8f5ccef445fa8cddcb48c1ace64cbdd2', icon: '/images/icons/icon-ruby.svg', width: 32, height: 32 },
 { name: 'PHP', value: 'php-8f5ccef445fa8cddcb48c1ace64cbdd2', icon: '/images/icons/icon-php.svg', width: 32, height: 32 },
 { name: 'Go', value: 'go-8f5ccef445fa8cddcb48c1ace64cbdd2', icon: '/images/icons/icon-go.svg', width: 32, height: 32 }
 ],
 selectLibrary(value, isGlobal = false) {
 this.selectedLibrary = value;
 this.open = false;
 // Trigger tab switching for this specific instance
 // Use Alpine's $el to find the container
 const container = $el.closest('[data-tabs-id]');
 if (container) {
 container.querySelectorAll('.nice-tab-content').forEach(tab => {
 tab.classList.remove('active');
 });
 const selectedTab = container.querySelector('#' + value);
 if (selectedTab) {
 selectedTab.classList.add('active');
 }
 }
 // Individual snippet selectors should NOT trigger global changes
 // Only the global selector at the top should change all snippets
 },
 getSelectedLibrary() {
 return this.libraries.find(lib => lib.value === this.selectedLibrary) || this.libraries[0];
 },
 init() {
 // Listen for global language changes
 window.addEventListener('languageChanged', (e) => {
 const globalLang = e.detail.language;
 const matchingLib = this.libraries.find(lib => lib.value.startsWith(globalLang + '-'));
 if (matchingLib) {
 this.selectLibrary(matchingLib.value, true);
 }
 });
 // Initialize from global state if available
 const globalLang = window.globalSelectedLanguage || 'python';
 const matchingLib = this.libraries.find(lib => lib.value.startsWith(globalLang + '-'));
 if (matchingLib &amp;&amp; matchingLib.value !== this.selectedLibrary) {
 this.selectLibrary(matchingLib.value, true);
 }
 }
 }" x-on:click.away="open = false" x-init="init()">
 &lt;div class="relative">
 
 &lt;button 
 @click="open = !open"
 type="button"
 class="flex justify-between items-center px-2 py-1.5 bg-white rounded-md border border-[#1A1414]/10 transition-colors hover:bg-gray-50 focus:outline-none min-w-[180px] shadow-sm"
 >
 &lt;div class="flex gap-2 items-center">
 &lt;img 
 :src="getSelectedLibrary().icon" 
 :alt="getSelectedLibrary().name"
 :width="20"
 :height="20"
 class="flex-shrink-0 w-5 h-5"
 />
 &lt;span class="text-black-100 font-medium text-[14px]">
 &lt;span x-text="getSelectedLibrary().name">&lt;/span>
 &lt;/span>
 &lt;/div>
 &lt;svg 
 class="w-3.5 h-3.5 text-gray-400 transition-transform duration-200" 
 :class="{ 'rotate-180': open }"
 fill="none" 
 stroke="currentColor" 
 viewBox="0 0 24 24"
 >
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7">&lt;/path>
 &lt;/svg>
 &lt;/button>
 
 
 &lt;div 
 x-show="open"
 x-transition:enter="transition ease-out duration-200"
 x-transition:enter-start="opacity-0 translate-y-1"
 x-transition:enter-end="opacity-100 translate-y-0"
 x-transition:leave="transition ease-in duration-150"
 x-transition:leave-start="opacity-100 translate-y-0"
 x-transition:leave-end="opacity-0 translate-y-1"
 class="overflow-auto absolute left-0 top-full z-50 mt-1 w-full max-h-[300px] bg-white rounded-md border border-[#1A1414]/10 shadow-lg focus:outline-none"
 style="display: none;"
 >
 &lt;ul class="py-1">
 &lt;template x-for="library in libraries" :key="library.value">
 &lt;li>
 &lt;button
 @click="selectLibrary(library.value)"
 type="button"
 class="flex gap-2 items-center px-2 py-1.5 w-full transition-colors hover:bg-gray-50"
 :class="{ 'bg-yellow-50': selectedLibrary === library.value }"
 >
 &lt;img 
 :src="library.icon" 
 :alt="library.name"
 :width="20"
 :height="20"
 class="flex-shrink-0 w-5 h-5"
 />
 &lt;span class="text-black-100 text-[14px]" x-text="library.name">&lt;/span>
 &lt;span x-show="selectedLibrary === library.value" class="ml-auto text-yellow-400">
 &lt;svg class="w-3.5 h-3.5" fill="currentColor" viewBox="0 0 20 20">
 &lt;path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd">&lt;/path>
 &lt;/svg>
 &lt;/span>
 &lt;/button>
 &lt;/li>
 &lt;/template>
 &lt;/ul>
 &lt;/div>
 &lt;/div>
 &lt;div class="flex items-center">
 &lt;span data-seed="8f5ccef445fa8cddcb48c1ace64cbdd2" class="snippet-copy cursor-pointer flex items-center gap-1.5 px-2.5 py-1.5 text-sm text-black-100 rounded-md border border-[#1A1414]/10 bg-white hover:bg-gray-50 transition-colors" title="Copy to clipboard!">
 &lt;span class="icon-copy02 leading-none text-[14px]">&lt;/span>
 &lt;span class="text-[14px]">Copy&lt;/span>
 &lt;/span>
 &lt;/div>
 &lt;/div>

 &lt;div class="bg-[#30302F] rounded-md font-light !font-ibmplex">
 &lt;div id="curl-8f5ccef445fa8cddcb48c1ace64cbdd2"class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-bash">curl "https://app.scrapingbee.com/api/v1/amazon/product?api_key=YOUR-API-KEY&amp;query=B0DPDRNSXV"&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="python-8f5ccef445fa8cddcb48c1ace64cbdd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content active">
 &lt;pre>&lt;code class="language-python">&lt;pre>&lt;code class="language-python"># Install the Python Requests library:
# pip install requests
import requests

def send_request():
 response = requests.get(
 url='https://app.scrapingbee.com/api/v1/amazon/product',
 params={
 'api_key': 'YOUR-API-KEY',
 'query': 'B0DPDRNSXV',
 },

 )
 print('Response HTTP Status Code: ', response.status_code)
 print('Response HTTP Response Body: ', response.content)
send_request()
&lt;/code>&lt;/pre>
&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="node-8f5ccef445fa8cddcb48c1ace64cbdd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-javascript">&lt;pre>&lt;code class="language-javascript">// Install the Node Axios package
// npm install axios
const axios = require('axios');

axios.get('https://app.scrapingbee.com/api/v1/amazon/product', {
 params: {
 'api_key': 'YOUR-API-KEY',
 'url': 'YOUR-URL',
 'query': B0DPDRNSXV,
 }
}).then(function (response) {
 // handle success
 console.log(response);
})
&lt;/code>&lt;/pre>
&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="java-8f5ccef445fa8cddcb48c1ace64cbdd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-java">import java.io.IOException;
import org.apache.http.client.fluent.*;

public class SendRequest
{
 public static void main(String[] args) {
 sendRequest();
 }

 private static void sendRequest() {

 // Classic (GET )
 try {

 // Create request
 
 Content content = Request.Get("https://app.scrapingbee.com/api/v1/amazon/product?api_key=YOUR-API-KEY&amp;url=YOUR-URL&amp;query=B0DPDRNSXV")

 // Fetch request and return content
 .execute().returnContent();

 // Print content
 System.out.println(content);
 }
 catch (IOException e) { System.out.println(e); }
 }
}
&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="ruby-8f5ccef445fa8cddcb48c1ace64cbdd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-ruby">require 'net/http'
require 'net/https'

# Classic (GET )
def send_request 
 uri = URI('https://app.scrapingbee.com/api/v1/amazon/product?api_key=YOUR-API-KEY&amp;url=YOUR-URL&amp;query=B0DPDRNSXV')

 # Create client
 http = Net::HTTP.new(uri.host, uri.port)
 http.use_ssl = true
 http.verify_mode = OpenSSL::SSL::VERIFY_PEER

 # Create Request
 req = Net::HTTP::Get.new(uri)

 # Fetch Request
 res = http.request(req)
 puts "Response HTTP Status Code: #{ res.code }"
 puts "Response HTTP Response Body: #{ res.body }"
rescue StandardError => e
 puts "HTTP Request failed (#{ e.message })"
end

send_request()&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="php-8f5ccef445fa8cddcb48c1ace64cbdd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-php">&amp;lt;?php

// get cURL resource
$ch = curl_init();

// set url 
curl_setopt($ch, CURLOPT_URL, 'https://app.scrapingbee.com/api/v1/amazon/product?api_key=YOUR-API-KEY&amp;url=YOUR-URL&amp;query=B0DPDRNSXV');

// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);



// send the request and save response to $response
$response = curl_exec($ch);

// stop if fails
if (!$response) {
 die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}

echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;

// close curl resource to free up system resources
curl_close($ch);
&amp;gt;&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="go-8f5ccef445fa8cddcb48c1ace64cbdd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-go">package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func sendClassic() {
	// Create client
	client := &amp;http.Client{}

	// Create request 
	req, err := http.NewRequest("GET", "https://app.scrapingbee.com/api/v1/amazon/product?api_key=YOUR-API-KEY&amp;url=YOUR-URL&amp;query=B0DPDRNSXV", nil)


	parseFormErr := req.ParseForm()
	if parseFormErr != nil {
		fmt.Println(parseFormErr)
	}

	// Fetch Request
	resp, err := client.Do(req)

	if err != nil {
		fmt.Println("Failure : ", err)
	}

	// Read Response Body
	respBody, _ := ioutil.ReadAll(resp.Body)

	// Display Results
	fmt.Println("response Status : ", resp.Status)
	fmt.Println("response Headers : ", resp.Header)
	fmt.Println("response Body : ", string(respBody))
}

func main() {
 sendClassic()
}&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;/div>
&lt;/div>

&lt;p>Here is a breakdown of all the parameters you can use with the Amazon Product API:&lt;/p></description></item><item><title>Amazon API</title><link>https://www.scrapingbee.com/features/amazon/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/amazon/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Get Structured JSON for Amazon products, reviews, pricing and more in a single API call.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "154",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 &lt;h1 class="mb-[14px]">Amazon API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Get Structured JSON for Amazon products, reviews, pricing and more in a single API call.&lt;/p></description></item><item><title>Amazon ASIN Scraper API Tool - Free Credits, Simple Signup</title><link>https://www.scrapingbee.com/scrapers/amazon-asin-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/amazon-asin-api/</guid><description/></item><item><title>Amazon Keyword Scraper API - Free Credits &amp; Easy Use</title><link>https://www.scrapingbee.com/scrapers/amazon-keyword-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/amazon-keyword-scraper-api/</guid><description/></item><item><title>Amazon Review Scraper with Free Credits - Easy to Use Tool</title><link>https://www.scrapingbee.com/scrapers/amazon-review-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/amazon-review-api/</guid><description/></item><item><title>Amazon Scraper API</title><link>https://www.scrapingbee.com/scrapers/amazon-scraping-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/amazon-scraping-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Scrape Amazon product data worldwide with our powerful web scraping API. Get prices, reviews, and rankings from any Amazon domain - all with a single API call.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 Amazon Scraper API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">Amazon Scraper API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Scrape Amazon product data worldwide with our powerful web scraping API. Get prices, reviews, and rankings from any Amazon domain - all with a single API call.&lt;/p></description></item><item><title>Apartments.com Scraper API Tool - Free Credits on Sign Up</title><link>https://www.scrapingbee.com/scrapers/apartments-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/apartments-api/</guid><description/></item><item><title>Apify alternative for web scraping?</title><link>https://www.scrapingbee.com/apify-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/apify-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Apify alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Apify. Looking for more flexibility, better pricing, and developer-friendly features?&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">No marketplace. No "actors." Just clean, efficient scraping.&lt;/h3>
 &lt;p>Apify's approach adds layers of abstraction and complexity. We believe in giving developers direct access to scraping functionality through a clear, &lt;a href="https://www.scrapingbee.com/blog/six-characteristics-of-rest-api/">RESTful API&lt;/a>.&lt;/p></description></item><item><title>Apple App Store Scraper API - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/apple-app-store/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/apple-app-store/</guid><description/></item><item><title>ASOS Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/asos-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/asos-api/</guid><description/></item><item><title>Autotrader Scraper API - Free Sign Up + Credits</title><link>https://www.scrapingbee.com/scrapers/autotrader-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/autotrader-api/</guid><description/></item><item><title>AWS Scraper API - Free Signup &amp; Get Credits</title><link>https://www.scrapingbee.com/scrapers/aws-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/aws-api/</guid><description/></item><item><title>Baidu Search Scraper API - Get Free Credits on Sign Up</title><link>https://www.scrapingbee.com/scrapers/baidu-search-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/baidu-search-api/</guid><description/></item><item><title>BBB Scraper API with Free Credits - Reliable Data Extraction</title><link>https://www.scrapingbee.com/scrapers/better-business-bureau-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/better-business-bureau-api/</guid><description/></item><item><title>Best Buy Web Scraper API - Simple Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/best-buy-web-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/best-buy-web-scraper-api/</guid><description/></item><item><title>Bing Ads Scraper API - Easy Signup, Free Credits</title><link>https://www.scrapingbee.com/scrapers/bing-ads-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bing-ads-api/</guid><description/></item><item><title>Bing Images Scraper API - Free Credits &amp; Hassle-Free Setup</title><link>https://www.scrapingbee.com/scrapers/bing-images-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bing-images-api/</guid><description/></item><item><title>Bing Maps Scraper API - Signup for Free Credits</title><link>https://www.scrapingbee.com/scrapers/bing-maps-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bing-maps-api/</guid><description/></item><item><title>Bing News Scraper API - Simple Signup, Free Credits</title><link>https://www.scrapingbee.com/scrapers/bing-news-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bing-news-api/</guid><description/></item><item><title>Bing Recipes Scraper API - Simple &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/bing-recipes-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bing-recipes-api/</guid><description/></item><item><title>Bing Related Searches Scraper API - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/bing-related-searches-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bing-related-searches-api/</guid><description/></item><item><title>Bing Search Scraper API - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/bing-search-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bing-search-api/</guid><description/></item><item><title>Bing Spell Check Scraper API - Free Credits Available</title><link>https://www.scrapingbee.com/scrapers/bing-spell-check-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bing-spell-check-api/</guid><description/></item><item><title>Bing Videos Scraper API - Free Credits on Sign Up</title><link>https://www.scrapingbee.com/scrapers/bing-videos-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bing-videos-api/</guid><description/></item><item><title>Bloomberg Scraper API - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/bloomberg-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/bloomberg-api/</guid><description/></item><item><title>Booking.com Scraper API - Free Credits on Sign Up</title><link>https://www.scrapingbee.com/scrapers/booking-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/booking-api/</guid><description/></item><item><title>Bright Data alternative for web scraping?</title><link>https://www.scrapingbee.com/bright-data-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/bright-data-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Bright Data alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Bright Data. Getting structured data from the web should be fast, reliable, and scalable.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Enterprise-grade features. Without enterprise-grade headaches.&lt;/h3>
 &lt;p>Bright Data is powerful—but complex, expensive, and overkill for most. ScrapingBee delivers what you need without the overhead.&lt;/p></description></item><item><title>Browse AI alternative for web scraping?</title><link>https://www.scrapingbee.com/browse-ai-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/browse-ai-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Browse AI alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Browse AI. Powerful scraping doesn&amp;#39;t have to come with hidden fees or steep learning curves.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">No robots. No waiting. Just raw scraping speed.&lt;/h3>
 &lt;p>Browse AI works well for beginners, but if you're running real-time scraping at scale, you need something more. That's where an API-first approach wins.&lt;/p></description></item><item><title>Car Rental Data Scraper API - Free Signup and Credits</title><link>https://www.scrapingbee.com/scrapers/car-rental-data-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/car-rental-data-api/</guid><description/></item><item><title>ChatGPT API</title><link>https://www.scrapingbee.com/features/chatgpt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/chatgpt/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Generate AI-powered text responses with GPT-4o in a single API call, with optional web search capabilities.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "154",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 &lt;h1 class="mb-[14px]">ChatGPT API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Generate AI-powered text responses with GPT-4o in a single API call, with optional web search capabilities.&lt;/p></description></item><item><title>ChatGPT Scraper API</title><link>https://www.scrapingbee.com/scrapers/chatgpt-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/chatgpt-scraper-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Scrape ChatGPT responses automatically with our powerful ChatGPTscraping API. Scrape ChatGPT at scale and recieve structured JSON output, allowing you to extract text for training your AI models.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 ChatGPT Scraper API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">ChatGPT Scraper API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Scrape ChatGPT responses automatically with our powerful ChatGPTscraping API. Scrape ChatGPT at scale and recieve structured JSON output, allowing you to extract text for training your AI models.&lt;/p></description></item><item><title>Chewy Scraper API - Free Credits on Sign Up</title><link>https://www.scrapingbee.com/scrapers/chewy-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/chewy-api/</guid><description/></item><item><title>Cloudflare Scraper API - Simple Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/cloudflare-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/cloudflare-scraper-api/</guid><description/></item><item><title>Contact Scraper API - Free Credits, Simple &amp; Reliable Tool</title><link>https://www.scrapingbee.com/scrapers/contact-info-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/contact-info-api/</guid><description/></item><item><title>Cookie Policy</title><link>https://www.scrapingbee.com/cookie-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/cookie-policy/</guid><description>&lt;h2 id="1-information-and-transparency">1. Information and transparency&lt;/h2>
&lt;p>VostokInc respects the privacy of its Users. This Cookies Policy applies to the Cookies used on the Website. It describes the information We collect automatically through the use of automated information gathering tools such as cookies and web beacons.&lt;/p>
&lt;p>Terms not otherwise defined herein shall have the meaning as set forth in the Privacy Policy.&lt;/p>
&lt;h2 id="2-what-is-a-cookie">2. What is a cookie?&lt;/h2>
&lt;p>&lt;strong>“Cookies”&lt;/strong> or &lt;strong>“Tracers”&lt;/strong> means tracers that can be deposited or read, for example, when consulting a website, a mobile applicable, or when setting up or using a software. A cookie may include:&lt;/p></description></item><item><title>Costco Scraping API</title><link>https://www.scrapingbee.com/scrapers/costco-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/costco-scraper-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Scrape Costco product details and wholesale product data with our specialized scraping API. Get prices, specifications, and product features with perfect unmatched reliability.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 Costco Scraping API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">Costco Scraping API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Scrape Costco product details and wholesale product data with our specialized scraping API. Get prices, specifications, and product features with perfect unmatched reliability.&lt;/p></description></item><item><title>Craigslist Scraper API - Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/craigslist-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/craigslist-api/</guid><description/></item><item><title>Crawlbase alternative for web scraping?</title><link>https://www.scrapingbee.com/crawlbase-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/crawlbase-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Crawlbase alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Crawlbase. When it comes to scalable and robust data scraping, there are more efficient alternatives that won’t break the bank.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Scraping shouldn't be tied to complicated setups.&lt;/h3>
 &lt;p>Crawlbase offers advanced features but at a high cost. Get access to all the scraping features you need, without the complexity.&lt;/p></description></item><item><title>Crawlera alternative for web scraping?</title><link>https://www.scrapingbee.com/crawlera-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/crawlera-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Crawlera alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Crawlera. Avoid paying exorbitant rates for your web scraping.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Simple API, powerful features!&lt;/h3>
 &lt;p>Compared to Crawlera's complex usage, ScrapingBee easy-to-use API allows you to quickly get-up and running!&lt;/p></description></item><item><title>Crexi Scraper API - Simple Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/crexi-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/crexi-scraper-api/</guid><description/></item><item><title>Crunchbase Scraper API Tool - Free Credits &amp; Easy Setup</title><link>https://www.scrapingbee.com/scrapers/crunchbase-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/crunchbase-api/</guid><description/></item><item><title>Data Analysis Immobiliare API - Simple Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/data-analysis-immobiliare/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/data-analysis-immobiliare/</guid><description/></item><item><title>Data Extraction</title><link>https://www.scrapingbee.com/documentation/data-extraction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/documentation/data-extraction/</guid><description>&lt;blockquote>
&lt;p>💡 &lt;strong>Important&lt;/strong>:&lt;br>This page explains how to use a specific feature of our main &lt;a href="https://www.scrapingbee.com/" >web scraping API&lt;/a>!&lt;br>If you are not yet familiar with ScrapingBee web scraping API, you can read the documentation &lt;a href="https://www.scrapingbee.com/documentation" >here&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;h2 id="basic-usage">Basic usage&lt;/h2>
&lt;p>If you want to extract data from pages and don't want to parse the HTML on your side, you can add extraction rules to your API call.&lt;/p>
&lt;p>The simplest way to use extraction rules is to use the following format&lt;/p></description></item><item><title>Data extraction in Go</title><link>https://www.scrapingbee.com/tutorials/data-extraction-in-go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/data-extraction-in-go/</guid><description>&lt;p>One of the most important features of ScrapingBee, is the ability to extract exact data without need to post-process the request’s content using external libraries.&lt;/p>
&lt;p>We can use this feature by specifying an additional parameter with the name &lt;code>extract_rules&lt;/code>. We specify the label of elements we want to extract, their CSS Selectors and ScrapingBee will do the rest!&lt;/p>
&lt;p>Let’s say that we want to extract the title &amp;amp; the subtitle of the &lt;a href="https://www.scrapingbee.com/documentation/data-extraction/" >data extraction documentation page&lt;/a>. Their CSS selectors are &lt;code>h1&lt;/code> and &lt;code>span.text-[20px] respectively&lt;/code>. To make sure that they’re the correct ones, you can use the JavaScript function: &lt;code>document.querySelector(&amp;quot;CSS_SELECTOR&amp;quot;)&lt;/code> in that page’s developer tool’s console.&lt;/p></description></item><item><title>Data extraction in NodeJS</title><link>https://www.scrapingbee.com/tutorials/data-extraction-in-nodejs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/data-extraction-in-nodejs/</guid><description>&lt;p>One of the most important features of ScrapingBee, is the ability to extract exact data without need to post-process the request’s content using external libraries.&lt;/p>
&lt;p>We can use this feature by specifying an additional parameter with the name &lt;code>extract_rules&lt;/code>. We specify the label of elements we want to extract, their CSS Selectors and ScrapingBee will do the rest!&lt;/p>
&lt;p>Let’s say that we want to extract the title &amp;amp; the subtitle of the &lt;a href="https://www.scrapingbee.com/documentation/data-extraction/" >data extraction documentation page&lt;/a>. Their CSS selectors are &lt;code>h1&lt;/code> and &lt;code>span.text-[20px]&lt;/code> respectively. To make sure that they’re the correct ones, you can use the JavaScript function: &lt;code>document.querySelector(&amp;quot;CSS_SELECTOR&amp;quot;)&lt;/code> in that page’s developer tool’s console.&lt;/p></description></item><item><title>Data extraction in PHP</title><link>https://www.scrapingbee.com/tutorials/data-extraction-in-php/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/data-extraction-in-php/</guid><description>&lt;p>One of the most important features of ScrapingBee, is the ability to extract exact data without need to post-process the request’s content using external libraries.&lt;/p>
&lt;p>We can use this feature by specifying an additional parameter with the name &lt;code>extract_rules&lt;/code>. We specify the label of elements we want to extract, their CSS Selectors and ScrapingBee will do the rest!&lt;/p>
&lt;p>Let’s say that we want to extract the title &amp;amp; the subtitle of the &lt;a href="https://www.scrapingbee.com/documentation/data-extraction/" >data extraction documentation page&lt;/a>. Their CSS selectors are &lt;code>h1&lt;/code> and &lt;code>span.text-[20px]&lt;/code> respectively. To make sure that they’re the correct ones, you can use the JavaScript function: &lt;code>document.querySelector(&amp;quot;CSS_SELECTOR&amp;quot;)&lt;/code> in that page’s developer tool’s console.&lt;/p></description></item><item><title>Data extraction in Python</title><link>https://www.scrapingbee.com/tutorials/data-extraction-in-python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/data-extraction-in-python/</guid><description>&lt;p>One of the most important features of ScrapingBee, is the ability to extract exact data without need to post-process the request’s content using external libraries.&lt;/p>
&lt;p>We can use this feature by specifying an additional parameter with the name &lt;code>extract_rules&lt;/code>. We specify the label of elements we want to extract, their CSS Selectors and ScrapingBee will do the rest!&lt;/p>
&lt;p>Let’s say that we want to extract the title &amp;amp; the subtitle of the &lt;a href="https://www.scrapingbee.com/documentation/data-extraction/" >data extraction documentation page&lt;/a>. Their CSS selectors are &lt;code>h1&lt;/code> and &lt;code>span.text-[20px]&lt;/code> respectively. To make sure that they’re the correct ones, you can use the JavaScript function: &lt;code>document.querySelector(&amp;quot;CSS_SELECTOR&amp;quot;)&lt;/code> in that page’s developer tool’s console.&lt;/p></description></item><item><title>Data extraction in Ruby</title><link>https://www.scrapingbee.com/tutorials/data-extraction-in-ruby/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/data-extraction-in-ruby/</guid><description>&lt;p>One of the most important features of ScrapingBee, is the ability to extract exact data without need to post-process the request’s content using external libraries.&lt;/p>
&lt;p>We can use this feature by specifying an additional parameter with the name &lt;code>extract_rules&lt;/code>. We specify the label of elements we want to extract, their CSS Selectors and ScrapingBee will do the rest!&lt;/p>
&lt;p>Let’s say that we want to extract the title &amp;amp; the subtitle of the &lt;a href="https://www.scrapingbee.com/documentation/data-extraction/" >data extraction documentation page&lt;/a>. Their CSS selectors are &lt;code>h1&lt;/code> and &lt;code>span.text-[20px]&lt;/code> respectively. To make sure that they’re the correct ones, you can use the JavaScript function: &lt;code>document.querySelector(&amp;quot;CSS_SELECTOR&amp;quot;)&lt;/code> in that page’s developer tool’s console.&lt;/p></description></item><item><title>Data Protection / Data processing agreement</title><link>https://www.scrapingbee.com/data-processing-agreement/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/data-processing-agreement/</guid><description>&lt;h2 id="data-processing-agreement">Data Processing Agreement&lt;/h2>
&lt;p>The present Data Processing Agreement (&lt;strong>“DPA”&lt;/strong>) reflects the Parties’ agreement with respect to the terms governing the Processing of Personal Data under the Agreement.&lt;/p>
&lt;h2 id="1-definitions">1. Definitions&lt;/h2>
&lt;p>The term of this DPA shall follow the term of the Agreement. Terms not otherwise defined herein shall have the meaning as set forth in the Agreement. The DPA is part of the Agreement.&lt;/p>
&lt;h2 id="2-purpose-of-the-dpa">2. Purpose of the DPA&lt;/h2>
&lt;p>The purpose of this Agreement is to set out the relevant legislation and to describe the steps the Provider is taking to ensure its compliance with the Data Privacy Regulation.&lt;/p></description></item><item><title>Data Protection / GDPR Notice</title><link>https://www.scrapingbee.com/gdpr/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/gdpr/</guid><description>&lt;p>The General Data Protection Regulation (GDPR) is European Union legislation to strengthen and unify data protection laws for all individuals within the European Union. The regulation came into effect from May 25th, 2018.&lt;/p>
&lt;p>As a French business, founded and run by French citizens, but also as people who value privacy, we are fully committed to being compliant with GDPR and all data protection best practices.&lt;/p>
&lt;p>This page lays out our commitment to data protection and makes transparent what data we store about our users.&lt;/p></description></item><item><title>Data Scraping API</title><link>https://www.scrapingbee.com/features/data-extraction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/data-extraction/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Extracting data has never been more simple with CSS or XPATH selectors and ScrapingBee.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
 &lt;h1 class="mb-[14px]">Data Scraping API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Extracting data has never been more simple with CSS or XPATH selectors and ScrapingBee.&lt;/p></description></item><item><title>Decodo alternative for web scraping?</title><link>https://www.scrapingbee.com/decodo-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/decodo-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Decodo alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Decodo. Looking for a better balance of pricing, speed, and features? It’s time to explore the alternatives to Decodo.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">No unnecessary steps. Just clean scraping.&lt;/h3>
 &lt;p>Decodo offers scraping services but complicates things with additional features. We make it easy—&lt;a href="https://www.scrapingbee.com/blog/what-is-web-scraping-and-how-to-scrape-any-website-tutorial/">scrape the web&lt;/a> without all the extra fluff.&lt;/p></description></item><item><title>Depop Scraper API - Easy Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/depop-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/depop-scraper-api/</guid><description/></item><item><title>Diffbot alternative for web scraping?</title><link>https://www.scrapingbee.com/diffbot-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/diffbot-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Diffbot alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Diffbot. Efficient and accurate data extraction doesn’t have to come with a hefty price tag or a steep learning curve.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Not just structured data. Just straightforward scraping.&lt;/h3>
 &lt;p>Diffbot is great for extracting structured data but can get expensive quickly. Why pay more for specific use cases when you can scrape the entire web with better pricing?&lt;/p></description></item><item><title>Direct Answer Box Scraper API - Free Signup &amp; Simplicity</title><link>https://www.scrapingbee.com/scrapers/direct-answer-box-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/direct-answer-box-api/</guid><description/></item><item><title>DuckDuckGo Maps Scraper API - Simplicity &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/duckduckgo-maps-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/duckduckgo-maps-api/</guid><description/></item><item><title>DuckDuckGo News Scraper API - Effortless Signup, Free Credits</title><link>https://www.scrapingbee.com/scrapers/duckduckgo-news-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/duckduckgo-news-api/</guid><description/></item><item><title>DuckDuckGo Related Searches Scraper API With Free Credits</title><link>https://www.scrapingbee.com/scrapers/duckduckgo-related-searches-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/duckduckgo-related-searches-api/</guid><description/></item><item><title>DuckDuckGo Search Scraper API - Simple Signup Free Credits</title><link>https://www.scrapingbee.com/scrapers/duckduckgo-search-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/duckduckgo-search-api/</guid><description/></item><item><title>eBay Related Searches Scraper API - Get Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/ebay-related-searches-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/ebay-related-searches-api/</guid><description/></item><item><title>eBay Scraper Tool - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/ebay-scraper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/ebay-scraper/</guid><description/></item><item><title>Ecommerce Scraping Tool - Free Credits &amp; Easy API Setup</title><link>https://www.scrapingbee.com/scrapers/ecommerce-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/ecommerce-api/</guid><description/></item><item><title>Etsy Scraper API - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/etsy-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/etsy-api/</guid><description/></item><item><title>Expedia Scraper API</title><link>https://www.scrapingbee.com/scrapers/expedia-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/expedia-scraper-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Scrape global hotel data, pricing and details with our scraping API. Get rates, reviews, and property information from any destination with perfect accuracy.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 Expedia Scraper API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">Expedia Scraper API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Scrape global hotel data, pricing and details with our scraping API. Get rates, reviews, and property information from any destination with perfect accuracy.&lt;/p></description></item><item><title>Expireddomains Scraper API - Easy Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/expireddomains-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/expireddomains-scraper-api/</guid><description/></item><item><title>Fiverr Scraper API - Easy Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/fiverr-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/fiverr-scraper-api/</guid><description/></item><item><title>Flight Scraper API Tool - Easy Setup with Free Credits</title><link>https://www.scrapingbee.com/scrapers/flight-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/flight-api/</guid><description/></item><item><title>Flipkart Scraper API - Free Signup Credits Offer</title><link>https://www.scrapingbee.com/scrapers/flipkart-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/flipkart-api/</guid><description/></item><item><title>Food Data Scraper API - Free Signup and Credits</title><link>https://www.scrapingbee.com/scrapers/food-data-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/food-data-api/</guid><description/></item><item><title>Football News API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/football-news-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/football-news-api/</guid><description/></item><item><title>Forbes Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/forbes-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/forbes-scraper-api/</guid><description/></item><item><title>Fox News Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/fox-news-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/fox-news-scraper-api/</guid><description/></item><item><title>Free Indeed Scraper API with Credits - Easy Data Extraction</title><link>https://www.scrapingbee.com/scrapers/indeed-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/indeed-api/</guid><description/></item><item><title>Freelancer Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/freelancer-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/freelancer-scraper-api/</guid><description/></item><item><title>Frequently Asked Questions - ScrapingBee</title><link>https://www.scrapingbee.com/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/faq/</guid><description/></item><item><title>Funda Scraper API - Easy Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/funda-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/funda-scraper-api/</guid><description/></item><item><title>G2 Scraper API Tool - Starting is Simple with Free Credits</title><link>https://www.scrapingbee.com/scrapers/g2-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/g2-api/</guid><description/></item><item><title>Gamestop Scraper API - Simple Signup Credits Free</title><link>https://www.scrapingbee.com/scrapers/gamestop-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/gamestop-api/</guid><description/></item><item><title>Gasbuddy Scraper API - Easy Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/gasbuddy-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/gasbuddy-scraper-api/</guid><description/></item><item><title>GENERAL TERMS AND CONDITIONS OF SERVICE</title><link>https://www.scrapingbee.com/terms-and-conditions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/terms-and-conditions/</guid><description>&lt;h2 id="1-preamble">1. Preamble&lt;/h2>
&lt;p>&lt;strong>VostokInc&lt;/strong>, a joint-stock company (“société par actions simplifiée”) with registered address located at 66 Avenue des Champs Élysées – 75008 Paris and registered before the Company House of Paris under number 843 352 683 (&lt;strong>&amp;quot;VostokInc&amp;quot;&lt;/strong> or the &lt;strong>&amp;quot;Provider&amp;quot;&lt;/strong>) has developed an online solution available at &lt;a href="https://app.scrapingbee.com" >https://app.scrapingbee.com&lt;/a> and/or at any other address, application, or location designated by VostokInc (the &lt;strong>&amp;quot;API&amp;quot;&lt;/strong> or &lt;strong>“ScrapingBee”&lt;/strong>) providing web scraping services (the &amp;quot;Services&amp;quot;).&lt;/p>
&lt;p>The present terms and conditions of service (the &lt;strong>&amp;quot;General Conditions&amp;quot;&lt;/strong>) govern the contractual relationship between VostokInc and any natural person aged at least 18 years old with full and complete legal capacity acting in the scope of their professional activity or being the legal representative of a legal entity empowered to enter into legally binding commitments which access the Services only for their professional activities whatever the conditions from whichever terminal, nature, and extent of the subscription to the Services (hereinafter the &lt;strong>“User”&lt;/strong>). User acknowledges and accepts that Services are dedicated to professional activities and as such consumer law is not intended to be applicable. The General Conditions, the Data Processing Agreement, the AUP, and their exhibits form altogether the &lt;strong>“Agreement”&lt;/strong>.&lt;/p></description></item><item><title>Getty Images Scraper API - Easy Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/getty-images-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/getty-images-scraper-api/</guid><description/></item><item><title>Getyourguide Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/getyourguide-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/getyourguide-scraper-api/</guid><description/></item><item><title>GitHub Scraper API - Easy Setup &amp; Free Credits on Sign Up</title><link>https://www.scrapingbee.com/scrapers/github-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/github-api/</guid><description/></item><item><title>Glassdoor Jobs Scraper API - Get Free Credits Upon Signup</title><link>https://www.scrapingbee.com/scrapers/glassdoor-jobs-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/glassdoor-jobs-api/</guid><description/></item><item><title>Goodreads Scraper API - Get Free Credits Now</title><link>https://www.scrapingbee.com/scrapers/goodreads-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/goodreads-api/</guid><description/></item><item><title>Google Ads Scraper API - Signup for Credits Free</title><link>https://www.scrapingbee.com/scrapers/google-ads-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-ads-api/</guid><description/></item><item><title>Google AI Overview Scraper API - Free Signup Credits Offer</title><link>https://www.scrapingbee.com/scrapers/google-ai-overview-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-ai-overview-api/</guid><description/></item><item><title>Google API</title><link>https://www.scrapingbee.com/documentation/google/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/documentation/google/</guid><description>&lt;div class="w-full param_table">
 &lt;div>
 &lt;div class="overscroll-x-auto pb-[30px] md:pb-[0] max-w-full overflow-x-auto">
 &lt;div class="border rounded-md min-w-[500px] md:min-w-[0] overflow-hidden border-[#C8C4C4] shadow-sm bg-white">
 &lt;div class="flex border-b border-[#C8C4C4] bg-[#F4F0F0]">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">name&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo text-[12px]">type&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 mx-[2px] text-[12px]">default&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 px-[16px] py-[8px] relative" style="border-color: #C8C4C4;">
 &lt;span class="font-bold text-black-200">Description&lt;/span>
 &lt;/div>
 &lt;/div>
 
 
 
 
 &lt;div class="flex border-b" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">api_key&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo text-[12px]">string&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">&lt;code class="bg-[#EAEEF6] rounded-[4px] text-[#393C40] inline-block px-2 py-0.5 font-menlo mx-[2px] text-[12px]">required&lt;/code>&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">Your api key&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap border-[#C8C4C4]">
 
 &lt;span class="text-black-200">&lt;a href="#api_key" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 &lt;div class="flex border-b" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">search&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo text-[12px]">string&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">&lt;code class="bg-[#EAEEF6] rounded-[4px] text-[#393C40] inline-block px-2 py-0.5 font-menlo mx-[2px] text-[12px]">required&lt;/code>&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">The text you would put in the Google search bar&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap border-[#C8C4C4]">
 
 &lt;span class="text-black-200">&lt;a href="#search" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 
 
 
 &lt;div class="flex border-b last-of-type:border-0" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">add_html&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo">boolean&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 font-menlo mx-[2px]">false&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">Adding the full html of the page in the results&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap">
 
 &lt;span class="text-black-200">&lt;a href="#add_html" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 
 
 &lt;div class="flex border-b last-of-type:border-0" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">country_code&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo">string&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 font-menlo mx-[2px]">&amp;#34;us&amp;#34;&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">Country code from which you would like the request to come from&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap">
 
 &lt;span class="text-black-200">&lt;a href="#country_code" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 &lt;div class="flex border-b last-of-type:border-0" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">device&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo">&amp;#34;desktop&amp;#34; | &amp;#34;mobile&amp;#34;&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 font-menlo mx-[2px]">&amp;#34;desktop&amp;#34;&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">Control the device the request will be sent from&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap">
 
 &lt;span class="text-black-200">&lt;a href="#device" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 &lt;div class="flex border-b last-of-type:border-0" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">extra_params&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo">string&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 font-menlo mx-[2px]">&amp;#34;&amp;#34;&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">Extra Google URL parameters&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap">
 
 &lt;span class="text-black-200">&lt;a href="#extra_params" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 &lt;div class="flex border-b last-of-type:border-0" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">language&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo">string&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 font-menlo mx-[2px]">&amp;#34;en&amp;#34;&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">Language the search results will be displayed in&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap">
 
 &lt;span class="text-black-200">&lt;a href="#language" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 &lt;div class="flex border-b last-of-type:border-0" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">light_request&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo">boolean&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 font-menlo mx-[2px]">true&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">Light requests are faster and cheaper (10 credits instead of 15), but some content may be missing.&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap">
 
 &lt;span class="text-black-200">&lt;a href="#light_request" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 &lt;div class="flex border-b last-of-type:border-0" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">nfpr&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo">boolean&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 font-menlo mx-[2px]">false&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">Exclude results from auto-corrected queries that were spelt wrong.&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap">
 
 &lt;span class="text-black-200">&lt;a href="#nfpr" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 &lt;div class="flex border-b last-of-type:border-0" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">page&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo">integer&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 font-menlo mx-[2px]">1&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">The page number you want to extract results from&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap">
 
 &lt;span class="text-black-200">&lt;a href="#page" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 
 
 
 &lt;div class="flex border-b last-of-type:border-0" style="border-color: #C8C4C4;">
 &lt;div class="text-[12px] w-5/12 border-r py-[8px] px-[20px] flex flex-wrap items-center border-[#C8C4C4]">
 &lt;span class="bg-[#D9D6CC] text-[#0F0F0E] rounded-[4px] inline-block px-2 py-0.5 mr-[9px] font-menlo">search_type&lt;/span>
 &lt;span class="text-black-200 mr-[5px] ">[&lt;code class="bg-[#DAFBD7] rounded-[4px] text-[#188310] inline-block px-2 py-0.5 ml-[3px] mr-[1px] font-menlo">&amp;#34;classic&amp;#34; | &amp;#34;news&amp;#34; | &amp;#34;maps&amp;#34; | &amp;#34;images&amp;#34; | &amp;#34;lens&amp;#34; | &amp;#34;shopping&amp;#34; | &amp;#34;ai_mode&amp;#34;&lt;/code>]&lt;/span>
 &lt;span class="text-black-200">(&lt;code class="bg-[#FFE3F3] rounded-[4px] text-[#DB3797] inline-block px-2 py-0.5 font-menlo mx-[2px]">&amp;#34;classic&amp;#34;&lt;/code>)&lt;/span>
 &lt;/div>
 &lt;div class="w-5/12 py-[8px] px-[16px] flex items-center flex-wrap relative" style="border-color: #C8C4C4;">
 &lt;span class="text-black-200 leading-[1.50]">The type of search you want to perform&lt;/span>
 &lt;/div>
 &lt;div class="w-2/12 py-[8px] pl-[16px] pr-[16px] flex items-center justify-end flex-wrap">
 
 &lt;span class="text-black-200">&lt;a href="#search_type" class="bg-transparent border border-black-100 py-[5px] px-[10px] rounded-md !no-underline text-[13px] inline-flex items-center gap-[6px]">Learn more&lt;svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">&lt;path d="M4.5 9L7.5 6L4.5 3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>&lt;/svg>&lt;/a>&lt;/span>
 
 &lt;/div>
 &lt;/div>
 
 
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/div>
&lt;div class="doc-row">
&lt;div class="doc-full">
&lt;h2 id="getting-started">Getting Started&lt;/h2>
&lt;p>Our Google Search API allows you to scrape search results pages in realtime.&lt;/p></description></item><item><title>Google Autocomplete Scraper API - Free Signup &amp; Credits</title><link>https://www.scrapingbee.com/scrapers/google-autocomplete-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-autocomplete-api/</guid><description/></item><item><title>Google Books Scraper API - Simple Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-books-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-books-scraper-api/</guid><description/></item><item><title>Google Events Scraper API - Free Signup &amp; Simplified Process</title><link>https://www.scrapingbee.com/scrapers/google-events-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-events-api/</guid><description/></item><item><title>Google Finance Scraper - Free Signup Credits, Simple Use</title><link>https://www.scrapingbee.com/scrapers/google-finance-scraper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-finance-scraper/</guid><description/></item><item><title>Google Flights Scraper - Free Signup Credits, Simple Use</title><link>https://www.scrapingbee.com/scrapers/google-flights-scraper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-flights-scraper/</guid><description/></item><item><title>Google Hotels Scraper - Simple Tool, Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/google-hotel-scraper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-hotel-scraper/</guid><description/></item><item><title>Google Image Scraper - Free Credits, Simple Signup</title><link>https://www.scrapingbee.com/scrapers/google-image-scraper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-image-scraper/</guid><description/></item><item><title>Google Jobs Scraper API</title><link>https://www.scrapingbee.com/scrapers/google-jobs-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-jobs-scraper-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Scrape Google Jobs listings from any location with our powerful and real-time API. Get detailed job listings data with a near 100% success rate. Start with 1000 free API credits.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 Google Jobs Scraper API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">Google Jobs Scraper API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Scrape Google Jobs listings from any location with our powerful and real-time API. Get detailed job listings data with a near 100% success rate. Start with 1000 free API credits.&lt;/p></description></item><item><title>Google Knowledge Graph Scraper API - Start With Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-knowledge-graph-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-knowledge-graph-api/</guid><description/></item><item><title>Google Lens Scraper API - Streamlined Access Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-lens-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-lens-api/</guid><description/></item><item><title>Google Maps Autocomplete API - Simple &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/google-maps-autocomplete-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-autocomplete-scraper-api/</guid><description/></item><item><title>Google Maps Business Scraper API - Easy Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-maps-business-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-business-scraper-api/</guid><description/></item><item><title>Google Maps Data Scraper API - Easy Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-maps-data-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-data-scraper-api/</guid><description/></item><item><title>Google Maps Directions API - Easy Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-maps-directions-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-directions-scraper-api/</guid><description/></item><item><title>Google Maps Distance Matrix API - Simple Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-maps-distance-matrix-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-distance-matrix-scraper-api/</guid><description/></item><item><title>Google Maps Email Scraper API - Simple Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-maps-email-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-email-scraper-api/</guid><description/></item><item><title>Google Maps Geolocation API - Simple Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-maps-geolocation-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-geolocation-scraper-api/</guid><description/></item><item><title>Google Maps Lead Scraper API - Easy Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-maps-lead-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-lead-scraper-api/</guid><description/></item><item><title>Google Maps Places Scraper API - Easy Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-maps-places-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-places-scraper-api/</guid><description/></item><item><title>Google Maps Review Scraper API - Free Credits &amp; Easy Signup</title><link>https://www.scrapingbee.com/scrapers/google-maps-reviews-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-reviews-api/</guid><description/></item><item><title>Google Maps Scraper - Easy Use &amp; Free Credits Signup</title><link>https://www.scrapingbee.com/scrapers/google-maps-scraper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-maps-scraper/</guid><description/></item><item><title>Google My Business Scraper API - Easy Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-my-business-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-my-business-scraper-api/</guid><description/></item><item><title>Google News Scraper API</title><link>https://www.scrapingbee.com/scrapers/google-news-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-news-scraper-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Get to the latest headlines effortlessly with our powerful and reliable Google News Scraper API. Monitor stories, sources, and authors from any country with unmatched precision and reliability.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 Google News Scraper API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">Google News Scraper API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Get to the latest headlines effortlessly with our powerful and reliable Google News Scraper API. Monitor stories, sources, and authors from any country with unmatched precision and reliability.&lt;/p></description></item><item><title>Google Patents Scraper API - Free Signup &amp; Simplified Access</title><link>https://www.scrapingbee.com/scrapers/google-patents-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-patents-api/</guid><description/></item><item><title>Google Play Movies Scraper API - Simplified Access, Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/google-play-store-movies-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-play-store-movies-api/</guid><description/></item><item><title>Google Play Scraper API</title><link>https://www.scrapingbee.com/scrapers/google-play-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-play-scraper-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Scrape Google Play Store app data at scale with our reliable web scraping API. Get ratings, reviews, and download stats with a single API call.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 Google Play Scraper API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">Google Play Scraper API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Scrape Google Play Store app data at scale with our reliable web scraping API. Get ratings, reviews, and download stats with a single API call.&lt;/p></description></item><item><title>Google Popular Times API - Simple Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-popular-times-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-popular-times-scraper-api/</guid><description/></item><item><title>Google Product Scraper API - Free Access &amp; Setup</title><link>https://www.scrapingbee.com/scrapers/google-product-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-product-api/</guid><description/></item><item><title>Google Rank Tracking API - Simple Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-rank-tracking-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-rank-tracking-scraper-api/</guid><description/></item><item><title>Google Related Questions Scraper API - Free Credits on SignUp</title><link>https://www.scrapingbee.com/scrapers/google-related-questions-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-related-questions-api/</guid><description/></item><item><title>Google Related Searches Scraper API - Easy to Use</title><link>https://www.scrapingbee.com/scrapers/google-related-searches-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-related-searches-api/</guid><description/></item><item><title>Google Reverse Image Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/google-reverse-image-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-reverse-image-api/</guid><description/></item><item><title>Google Reviews Results Scraper API - Free Signup &amp; Credits</title><link>https://www.scrapingbee.com/scrapers/google-reviews-results-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-reviews-results-api/</guid><description/></item><item><title>Google Scholar Scraper - Free Signup Credits &amp; Easy Use</title><link>https://www.scrapingbee.com/scrapers/google-scholar-scraper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-scholar-scraper/</guid><description/></item><item><title>Google Search Results API</title><link>https://www.scrapingbee.com/features/google/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/google/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Get Structured JSON for search, news, maps, ads and more in a single API call.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "154",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 &lt;h1 class="mb-[14px]">Google Search Results API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Get Structured JSON for search, news, maps, ads and more in a single API call.&lt;/p></description></item><item><title>Google Shopping Scraper API</title><link>https://www.scrapingbee.com/scrapers/google-shopping-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-shopping-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Scrape Google Shopping results, allowing you to transform it into a competitive advantage. Real-time pricing data, product tracking, global market coverage — all with a single API call.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 Google Shopping Scraper API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">Google Shopping Scraper API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Scrape Google Shopping results, allowing you to transform it into a competitive advantage. Real-time pricing data, product tracking, global market coverage — all with a single API call.&lt;/p></description></item><item><title>Google Showtimes Result Scraper API - Get Started Today</title><link>https://www.scrapingbee.com/scrapers/google-showtimes-results-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-showtimes-results-api/</guid><description/></item><item><title>Google Spell Check Scraper API - Free Credits on Sign Up</title><link>https://www.scrapingbee.com/scrapers/google-spell-check-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-spell-check-api/</guid><description/></item><item><title>Google Sports Results Scraper API - Free Credits on SignUp</title><link>https://www.scrapingbee.com/scrapers/google-sports-results-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-sports-results-api/</guid><description/></item><item><title>Google Trends - Trending Now Scraper - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/google-trends-trending-now-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-trends-trending-now-api/</guid><description/></item><item><title>Google Trends Scraper - Free Credits, Simple Signup</title><link>https://www.scrapingbee.com/scrapers/google-trends-scraper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-trends-scraper/</guid><description/></item><item><title>Google Weather Scraper API - Simple Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-weather-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-weather-scraper-api/</guid><description/></item><item><title>GPT API</title><link>https://www.scrapingbee.com/documentation/chatgpt/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/documentation/chatgpt/</guid><description>&lt;p>Our Chat GPT API allows you to send prompts to a GPT model and receive AI-generated responses in realtime.&lt;/p>
&lt;p>We provide one endpoint:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GPT endpoint&lt;/strong> (&lt;code>/api/v1/chatgpt&lt;/code>) - Send prompts to GPT and receive AI-generated responses&lt;/li>
&lt;/ul>
&lt;div class="doc-row">
&lt;div class="doc-full">
&lt;h2 id="quick-start">Quick start&lt;/h2>
&lt;p>To use the GPT API, you only need two things:&lt;/p>
&lt;ul>
&lt;li>your API key, available &lt;a href="https://app.scrapingbee.com/account/manage/api_key" >here&lt;/a>&lt;/li>
&lt;li>a prompt to send to the GPT model (&lt;a href="#prompt" >learn more about prompts&lt;/a>)&lt;/li>
&lt;/ul>
&lt;p>Then, simply do this.&lt;/p>





 



 

 
 
 

&lt;div class="p-1 rounded mb-6 bg-[#F4F0F0] border border-[#1A1414]/10 text-[16px] leading-[1.50]" data-tabs-id="8cd4eb8d4ccf4fc8a6bdccec21a54f5d">

 &lt;div class="md:pl-[30px] xl:pl-[32px] flex items-center justify-end gap-3 py-[10px] px-[17px]" x-data="{ 
 open: false, 
 selectedLibrary: 'python-8cd4eb8d4ccf4fc8a6bdccec21a54f5d',
 libraries: [
 { name: 'Python', value: 'python-8cd4eb8d4ccf4fc8a6bdccec21a54f5d', icon: '/images/icons/icon-python.svg', width: 32, height: 32 },
 { name: 'cURL', value: 'curl-8cd4eb8d4ccf4fc8a6bdccec21a54f5d', icon: '/images/icons/icon-curl.svg', width: 48, height: 32 },
 { name: 'NodeJS', value: 'node-8cd4eb8d4ccf4fc8a6bdccec21a54f5d', icon: '/images/icons/icon-node.svg', width: 26, height: 26 },
 { name: 'Java', value: 'java-8cd4eb8d4ccf4fc8a6bdccec21a54f5d', icon: '/images/icons/icon-java.svg', width: 32, height: 32 },
 { name: 'Ruby', value: 'ruby-8cd4eb8d4ccf4fc8a6bdccec21a54f5d', icon: '/images/icons/icon-ruby.svg', width: 32, height: 32 },
 { name: 'PHP', value: 'php-8cd4eb8d4ccf4fc8a6bdccec21a54f5d', icon: '/images/icons/icon-php.svg', width: 32, height: 32 },
 { name: 'Go', value: 'go-8cd4eb8d4ccf4fc8a6bdccec21a54f5d', icon: '/images/icons/icon-go.svg', width: 32, height: 32 }
 ],
 selectLibrary(value, isGlobal = false) {
 this.selectedLibrary = value;
 this.open = false;
 // Trigger tab switching for this specific instance
 // Use Alpine's $el to find the container
 const container = $el.closest('[data-tabs-id]');
 if (container) {
 container.querySelectorAll('.nice-tab-content').forEach(tab => {
 tab.classList.remove('active');
 });
 const selectedTab = container.querySelector('#' + value);
 if (selectedTab) {
 selectedTab.classList.add('active');
 }
 }
 // Individual snippet selectors should NOT trigger global changes
 // Only the global selector at the top should change all snippets
 },
 getSelectedLibrary() {
 return this.libraries.find(lib => lib.value === this.selectedLibrary) || this.libraries[0];
 },
 init() {
 // Listen for global language changes
 window.addEventListener('languageChanged', (e) => {
 const globalLang = e.detail.language;
 const matchingLib = this.libraries.find(lib => lib.value.startsWith(globalLang + '-'));
 if (matchingLib) {
 this.selectLibrary(matchingLib.value, true);
 }
 });
 // Initialize from global state if available
 const globalLang = window.globalSelectedLanguage || 'python';
 const matchingLib = this.libraries.find(lib => lib.value.startsWith(globalLang + '-'));
 if (matchingLib &amp;&amp; matchingLib.value !== this.selectedLibrary) {
 this.selectLibrary(matchingLib.value, true);
 }
 }
 }" x-on:click.away="open = false" x-init="init()">
 &lt;div class="relative">
 
 &lt;button 
 @click="open = !open"
 type="button"
 class="flex justify-between items-center px-2 py-1.5 bg-white rounded-md border border-[#1A1414]/10 transition-colors hover:bg-gray-50 focus:outline-none min-w-[180px] shadow-sm"
 >
 &lt;div class="flex gap-2 items-center">
 &lt;img 
 :src="getSelectedLibrary().icon" 
 :alt="getSelectedLibrary().name"
 :width="20"
 :height="20"
 class="flex-shrink-0 w-5 h-5"
 />
 &lt;span class="text-black-100 font-medium text-[14px]">
 &lt;span x-text="getSelectedLibrary().name">&lt;/span>
 &lt;/span>
 &lt;/div>
 &lt;svg 
 class="w-3.5 h-3.5 text-gray-400 transition-transform duration-200" 
 :class="{ 'rotate-180': open }"
 fill="none" 
 stroke="currentColor" 
 viewBox="0 0 24 24"
 >
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7">&lt;/path>
 &lt;/svg>
 &lt;/button>
 
 
 &lt;div 
 x-show="open"
 x-transition:enter="transition ease-out duration-200"
 x-transition:enter-start="opacity-0 translate-y-1"
 x-transition:enter-end="opacity-100 translate-y-0"
 x-transition:leave="transition ease-in duration-150"
 x-transition:leave-start="opacity-100 translate-y-0"
 x-transition:leave-end="opacity-0 translate-y-1"
 class="overflow-auto absolute left-0 top-full z-50 mt-1 w-full max-h-[300px] bg-white rounded-md border border-[#1A1414]/10 shadow-lg focus:outline-none"
 style="display: none;"
 >
 &lt;ul class="py-1">
 &lt;template x-for="library in libraries" :key="library.value">
 &lt;li>
 &lt;button
 @click="selectLibrary(library.value)"
 type="button"
 class="flex gap-2 items-center px-2 py-1.5 w-full transition-colors hover:bg-gray-50"
 :class="{ 'bg-yellow-50': selectedLibrary === library.value }"
 >
 &lt;img 
 :src="library.icon" 
 :alt="library.name"
 :width="20"
 :height="20"
 class="flex-shrink-0 w-5 h-5"
 />
 &lt;span class="text-black-100 text-[14px]" x-text="library.name">&lt;/span>
 &lt;span x-show="selectedLibrary === library.value" class="ml-auto text-yellow-400">
 &lt;svg class="w-3.5 h-3.5" fill="currentColor" viewBox="0 0 20 20">
 &lt;path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd">&lt;/path>
 &lt;/svg>
 &lt;/span>
 &lt;/button>
 &lt;/li>
 &lt;/template>
 &lt;/ul>
 &lt;/div>
 &lt;/div>
 &lt;div class="flex items-center">
 &lt;span data-seed="8cd4eb8d4ccf4fc8a6bdccec21a54f5d" class="snippet-copy cursor-pointer flex items-center gap-1.5 px-2.5 py-1.5 text-sm text-black-100 rounded-md border border-[#1A1414]/10 bg-white hover:bg-gray-50 transition-colors" title="Copy to clipboard!">
 &lt;span class="icon-copy02 leading-none text-[14px]">&lt;/span>
 &lt;span class="text-[14px]">Copy&lt;/span>
 &lt;/span>
 &lt;/div>
 &lt;/div>

 &lt;div class="bg-[#30302F] rounded-md font-light !font-ibmplex">
 &lt;div id="curl-8cd4eb8d4ccf4fc8a6bdccec21a54f5d"class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-bash">curl "https://app.scrapingbee.com/api/v1/chatgpt?api_key=YOUR-API-KEY&amp;prompt=Explain&amp;#43;the&amp;#43;benefits&amp;#43;of&amp;#43;renewable&amp;#43;energy&amp;#43;in&amp;#43;100&amp;#43;words"&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="python-8cd4eb8d4ccf4fc8a6bdccec21a54f5d" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content active">
 &lt;pre>&lt;code class="language-python">&lt;pre>&lt;code class="language-python"># Install the Python Requests library:
# pip install requests
import requests

def send_request():
 response = requests.get(
 url='https://app.scrapingbee.com/api/v1/chatgpt',
 params={
 'api_key': 'YOUR-API-KEY',
 'prompt': 'Explain the benefits of renewable energy in 100 words',
 },

 )
 print('Response HTTP Status Code: ', response.status_code)
 print('Response HTTP Response Body: ', response.content)
send_request()
&lt;/code>&lt;/pre>
&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="node-8cd4eb8d4ccf4fc8a6bdccec21a54f5d" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-javascript">&lt;pre>&lt;code class="language-javascript">// Install the Node Axios package
// npm install axios
const axios = require('axios');

axios.get('https://app.scrapingbee.com/api/v1/chatgpt', {
 params: {
 'api_key': 'YOUR-API-KEY',
 'url': 'YOUR-URL',
 'prompt': Explain the benefits of renewable energy in 100 words,
 }
}).then(function (response) {
 // handle success
 console.log(response);
})
&lt;/code>&lt;/pre>
&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="java-8cd4eb8d4ccf4fc8a6bdccec21a54f5d" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-java">import java.io.IOException;
import org.apache.http.client.fluent.*;

public class SendRequest
{
 public static void main(String[] args) {
 sendRequest();
 }

 private static void sendRequest() {

 // Classic (GET )
 try {

 // Create request
 
 Content content = Request.Get("https://app.scrapingbee.com/api/v1/chatgpt?api_key=YOUR-API-KEY&amp;url=YOUR-URL&amp;prompt=Explain&amp;#43;the&amp;#43;benefits&amp;#43;of&amp;#43;renewable&amp;#43;energy&amp;#43;in&amp;#43;100&amp;#43;words")

 // Fetch request and return content
 .execute().returnContent();

 // Print content
 System.out.println(content);
 }
 catch (IOException e) { System.out.println(e); }
 }
}
&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="ruby-8cd4eb8d4ccf4fc8a6bdccec21a54f5d" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-ruby">require 'net/http'
require 'net/https'

# Classic (GET )
def send_request 
 uri = URI('https://app.scrapingbee.com/api/v1/chatgpt?api_key=YOUR-API-KEY&amp;url=YOUR-URL&amp;prompt=Explain&amp;#43;the&amp;#43;benefits&amp;#43;of&amp;#43;renewable&amp;#43;energy&amp;#43;in&amp;#43;100&amp;#43;words')

 # Create client
 http = Net::HTTP.new(uri.host, uri.port)
 http.use_ssl = true
 http.verify_mode = OpenSSL::SSL::VERIFY_PEER

 # Create Request
 req = Net::HTTP::Get.new(uri)

 # Fetch Request
 res = http.request(req)
 puts "Response HTTP Status Code: #{ res.code }"
 puts "Response HTTP Response Body: #{ res.body }"
rescue StandardError => e
 puts "HTTP Request failed (#{ e.message })"
end

send_request()&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="php-8cd4eb8d4ccf4fc8a6bdccec21a54f5d" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-php">&amp;lt;?php

// get cURL resource
$ch = curl_init();

// set url 
curl_setopt($ch, CURLOPT_URL, 'https://app.scrapingbee.com/api/v1/chatgpt?api_key=YOUR-API-KEY&amp;url=YOUR-URL&amp;prompt=Explain&amp;#43;the&amp;#43;benefits&amp;#43;of&amp;#43;renewable&amp;#43;energy&amp;#43;in&amp;#43;100&amp;#43;words');

// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);



// send the request and save response to $response
$response = curl_exec($ch);

// stop if fails
if (!$response) {
 die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}

echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;

// close curl resource to free up system resources
curl_close($ch);
&amp;gt;&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="go-8cd4eb8d4ccf4fc8a6bdccec21a54f5d" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-go">package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func sendClassic() {
	// Create client
	client := &amp;http.Client{}

	// Create request 
	req, err := http.NewRequest("GET", "https://app.scrapingbee.com/api/v1/chatgpt?api_key=YOUR-API-KEY&amp;url=YOUR-URL&amp;prompt=Explain&amp;#43;the&amp;#43;benefits&amp;#43;of&amp;#43;renewable&amp;#43;energy&amp;#43;in&amp;#43;100&amp;#43;words", nil)


	parseFormErr := req.ParseForm()
	if parseFormErr != nil {
		fmt.Println(parseFormErr)
	}

	// Fetch Request
	resp, err := client.Do(req)

	if err != nil {
		fmt.Println("Failure : ", err)
	}

	// Read Response Body
	respBody, _ := ioutil.ReadAll(resp.Body)

	// Display Results
	fmt.Println("response Status : ", resp.Status)
	fmt.Println("response Headers : ", resp.Header)
	fmt.Println("response Body : ", string(respBody))
}

func main() {
 sendClassic()
}&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;/div>
&lt;/div>

&lt;p>Here is a breakdown of all the parameters you can use with the GPT API:&lt;/p></description></item><item><title>Grocery Data Scraper API - Free Signup and Credits</title><link>https://www.scrapingbee.com/scrapers/grocery-data-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/grocery-data-api/</guid><description/></item><item><title>Guardian Scraper API - Simple Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/guardian-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/guardian-scraper-api/</guid><description/></item><item><title>Gumroad Scraper API - Easy Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/gumroad-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/gumroad-scraper-api/</guid><description/></item><item><title>Gumtree Scraper API - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/gumtree-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/gumtree-api/</guid><description/></item><item><title>H&amp;M Scraper API - Easy Access &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/hm-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/hm-scraper-api/</guid><description/></item><item><title>Home Depot Scraper API</title><link>https://www.scrapingbee.com/scrapers/homedepot-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/homedepot-scraper-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Access Home Depot\u0027s vast product catalog with our powerful web scraping API. Get prices, specifications, and availability across product categories with unmatched reliability.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 Home Depot Scraper API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">Home Depot Scraper API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Access Home Depot&amp;#39;s vast product catalog with our powerful web scraping API. Get prices, specifications, and availability across product categories with unmatched reliability.&lt;/p></description></item><item><title>How to extract a table's content in NodeJS</title><link>https://www.scrapingbee.com/tutorials/how-to-extract-a-tables-content-in-nodejs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-extract-a-tables-content-in-nodejs/</guid><description>&lt;p>Data can be found online in various formats, but the most popular one is table format, especially that it displays information in a very structured and well organized layout. So it is very important to be able to extract data from tables with ease.&lt;/p>
&lt;p>And this is of the most important features of ScrapingBee's data extraction tool, you can scrape data from tables without having to do any post-processing of the HTML response. We can use this feature by specifying a table's CSS selector within a set of &lt;code>extract_rules&lt;/code>, and let ScrapingBee do the rest!&lt;/p></description></item><item><title>How to extract a table's content in Python</title><link>https://www.scrapingbee.com/tutorials/how-to-extract-a-tables-content-in-python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-extract-a-tables-content-in-python/</guid><description>&lt;p>Data can be found online in various formats, but the most popular one is table format, especially that it displays information in a very structured and well organized layout. So it is very important to be able to extract data from tables with ease. &lt;/p>
&lt;p>And this is of the most important features of ScrapingBee's data extraction tool, you can scrape data from tables without having to do any post-processing of the HTML response. We can use this feature by specifying a table's CSS selector within a set of &lt;code>extract_rules&lt;/code>, and let ScrapingBee do the rest!&lt;/p></description></item><item><title>How to extract a table's content in Ruby</title><link>https://www.scrapingbee.com/tutorials/how-to-extract-a-tables-content-in-ruby/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-extract-a-tables-content-in-ruby/</guid><description>&lt;p>Data can be found online in various formats, but the most popular one is table format, especially that it displays information in a very structured and well organized layout. So it is very important to be able to extract data from tables with ease.&lt;/p>
&lt;p>And this is of the most important features of ScrapingBee's data extraction tool, you can scrape data from tables without having to do any post-processing of the HTML response. We can use this feature by specifying a table's CSS selector within a set of &lt;code>extract_rules&lt;/code>, and let ScrapingBee do the rest!&lt;/p></description></item><item><title>How to extract CSS selectors using Chrome</title><link>https://www.scrapingbee.com/tutorials/how-to-extract-css-selectors-using-chrome/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-extract-css-selectors-using-chrome/</guid><description>&lt;p>Finding the CSS selector of an element you want to scrape can be tricky at times. This is why we can use the &lt;strong>Inspect Element&lt;/strong> feature in most modern browsers to extract the selector with ease.&lt;/p>
&lt;p>The process is very simple, first we find the element, right click on it, we then click on Inspect Element. The developer tools window will show up with the element highlighted. We then right click on the selected HTML code, go to Copy, and click on Copy selector.&lt;/p></description></item><item><title>How to handle infinite scroll pages in Go</title><link>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-go/</guid><description>&lt;p>Nowadays, most websites use different methods and techniques to decrease the load and data served to their clients’ devices. One of these techniques is the infinite scroll.&lt;/p>
&lt;p>In this tutorial, we will see how we can scrape infinite scroll web pages using a &lt;a href="https://www.scrapingbee.com/documentation/js-scenario/" >js_scenario&lt;/a>, specifically the&amp;amp; &lt;code>scroll_y&lt;/code> and &lt;code>scroll_x&lt;/code> features. And we will use &lt;a href="https://demo.scrapingbee.com/infinite_scroll.html" >this page&lt;/a> as a demo. Only 9 boxes are loaded when we first open the page, but as soon as we scroll to the end of it, we will load 9 more, and that will keep happening each time we scroll to the bottom of the page.&lt;/p></description></item><item><title>How to handle infinite scroll pages in NodeJS</title><link>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-nodejs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-nodejs/</guid><description>&lt;p>Nowadays, most websites use different methods and techniques to decrease the load and data served to their clients’ devices. One of these techniques is the infinite scroll.&lt;/p>
&lt;p>In this tutorial, we will see how we can scrape infinite scroll web pages using a &lt;a href="https://www.scrapingbee.com/documentation/js-scenario/" >js_scenario&lt;/a>, specifically the &lt;code>scroll_y&lt;/code> and &lt;code>scroll_x&lt;/code> features. And we will use &lt;a href="https://demo.scrapingbee.com/infinite_scroll.html" >this page&lt;/a> as a demo. Only 9 boxes are loaded when we first open the page, but as soon as we scroll to the end of it, we will load 9 more, and that will keep happening each time we scroll to the bottom of the page.&lt;/p></description></item><item><title>How to handle infinite scroll pages in PHP</title><link>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-php/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-php/</guid><description>&lt;p>Nowadays, most websites use different methods and techniques to decrease the load and data served to their clients’ devices. One of these techniques is the infinite scroll.&lt;/p>
&lt;p>In this tutorial, we will see how we can scrape infinite scroll web pages using a &lt;a href="https://www.scrapingbee.com/documentation/js-scenario/" >js_scenario&lt;/a>, specifically the &lt;code>scroll_y&lt;/code> and &lt;code>scroll_x&lt;/code> features. And we will use &lt;a href="https://demo.scrapingbee.com/infinite_scroll.html" >this page&lt;/a> as a demo. Only 9 boxes are loaded when we first open the page, but as soon as we scroll to the end of it, we will load 9 more, and that will keep happening each time we scroll to the bottom of the page.&lt;/p></description></item><item><title>How to handle infinite scroll pages in Python</title><link>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages/</guid><description>&lt;p>Nowadays, most websites use different methods and techniques to decrease the load and data served to their clients’ devices. One of these techniques is the infinite scroll.&lt;/p>
&lt;p>In this tutorial, we will see how we can scrape infinite scroll web pages using a &lt;a href="https://www.scrapingbee.com/documentation/js-scenario/" >js_scenario&lt;/a>, specifically the &lt;code>scroll_y&lt;/code> and &lt;code>scroll_x&lt;/code> features. And we will use &lt;a href="https://demo.scrapingbee.com/infinite_scroll.html" >this page&lt;/a> as a demo. Only 9 boxes are loaded when we first open the page, but as soon as we scroll to the end of it, we will load 9 more, and that will keep happening each time we scroll to the bottom of the page.&lt;/p></description></item><item><title>How to handle infinite scroll pages in Ruby</title><link>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-ruby/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-handle-infinite-scroll-pages-in-ruby/</guid><description>&lt;p>Nowadays, most websites use different methods and techniques to decrease the load and data served to their clients’ devices. One of these techniques is the infinite scroll.&lt;/p>
&lt;p>In this tutorial, we will see how we can scrape infinite scroll web pages using a &lt;a href="https://www.scrapingbee.com/documentation/js-scenario/" >js_scenario&lt;/a>, specifically the &lt;code>scroll_y&lt;/code> and &lt;code>scroll_x&lt;/code> features. And we will use &lt;a href="https://demo.scrapingbee.com/infinite_scroll.html" >this page&lt;/a> as a demo. Only 9 boxes are loaded when we first open the page, but as soon as we scroll to the end of it, we will load 9 more, and that will keep happening each time we scroll to the bottom of the page.&lt;/p></description></item><item><title>How to log in to a website using ScrapingBee with NodeJS</title><link>https://www.scrapingbee.com/tutorials/how-to-log-in-to-a-website-using-scrapingbee-with-nodejs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-log-in-to-a-website-using-scrapingbee-with-nodejs/</guid><description>&lt;p>In this tutorial, we will see how you can log in to any website, using three different methods:&lt;/p>
&lt;ul>
&lt;li>A JavaScript scenario.&lt;/li>
&lt;li>A POST request.&lt;/li>
&lt;li>Cookies&lt;/li>
&lt;/ul>
&lt;p>As an example, we’re going to log into this &lt;a href="http://automationpractice.com/index.php?controller=authentication" >demo website&lt;/a> and take a screenshot of the account page. So make sure to create an account there before you start!&lt;/p>
&lt;h3 id="1-login-using-anbspjs_scenario">1. Login using a &lt;code>js_scenario&lt;/code>:&lt;/h3>
&lt;p>This is the easiest solution among the three, as it mimics the behavior of a normal user. We first visit the login page, input our login credentials, and click on the login button.&lt;/p></description></item><item><title>How to log in to a website using ScrapingBee with Python</title><link>https://www.scrapingbee.com/tutorials/how-to-log-in-to-a-website-using-scrapingbee-with-python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-log-in-to-a-website-using-scrapingbee-with-python/</guid><description>&lt;p>In this tutorial, we will see how you can log in to any website, using three different methods:&lt;/p>
&lt;ul>
&lt;li>A JavaScript scenario.&lt;/li>
&lt;li>A POST request.&lt;/li>
&lt;li>Cookies&lt;/li>
&lt;/ul>
&lt;p>As an example, we’re going to log into this &lt;a href="http://automationpractice.com/index.php?controller=authentication" >demo website&lt;/a> and take a screenshot of the account page. So make sure to create an account there before you start!&lt;/p>
&lt;h3 id="1-login-using-anbspjs_scenario">1. Login using a &lt;code>js_scenario&lt;/code>:&lt;/h3>
&lt;p>This is the easiest solution among the three, as it mimics the behavior of a normal user. We first visit the login page, input our login credentials, and click on the login button.&lt;/p></description></item><item><title>How to make screenshots in C#</title><link>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-c/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-c/</guid><description>&lt;p>Taking a screenshot of your website is very straightforward using ScrapingBee. You can either take a screenshot of the visible portion of the page, the whole page, or an element of the page.&lt;/p>
&lt;p>That can be done by specifying one of these parameters with your request:&lt;/p>
&lt;ul>
&lt;li>&lt;code>screenshot&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_full_page&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_selector&lt;/code> to the CSS selector of the element.&lt;/li>
&lt;/ul>
&lt;p>In this tutorial, we will see how to take a screenshot of ScrapingBee’s &lt;a href="https://www.scrapingbee.com/blog/" >blog&lt;/a> using the three methods. &lt;/p></description></item><item><title>How to make screenshots in Go</title><link>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-go/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-go/</guid><description>&lt;p>Taking a screenshot of your website is very straightforward using ScrapingBee. You can either take a screenshot of the visible portion of the page, the whole page, or an element of the page.&lt;/p>
&lt;p>That can be done by specifying one of these parameters with your request:&lt;/p>
&lt;ul>
&lt;li>&lt;code>screenshot&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_full_page&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_selector&lt;/code> to the CSS selector of the element.&lt;/li>
&lt;/ul>
&lt;p>In this tutorial, we will see how to take a screenshot of ScrapingBee’s &lt;a href="https://www.scrapingbee.com/blog/" >blog&lt;/a> using the three methods.&lt;/p></description></item><item><title>How to make screenshots in NodeJS</title><link>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-nodejs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-nodejs/</guid><description>&lt;p>Taking a screenshot of your website is very straightforward using ScrapingBee. You can either take a screenshot of the visible portion of the page, the whole page, or an element of the page.&lt;/p>
&lt;p>That can be done by specifying one of these parameters with your request:&lt;/p>
&lt;ul>
&lt;li>&lt;code>screenshot&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_full_page&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_selector&lt;/code> to the CSS selector of the element.&lt;/li>
&lt;/ul>
&lt;p>In this tutorial, we will see how to take a screenshot of ScrapingBee’s &lt;a href="https://www.scrapingbee.com/blog/" >blog&lt;/a> using the three methods.&lt;/p></description></item><item><title>How to make screenshots in PHP</title><link>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-php/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-php/</guid><description>&lt;p>Taking a screenshot of your website is very straightforward using ScrapingBee. You can either take a screenshot of the visible portion of the page, the whole page, or an element of the page.&lt;/p>
&lt;p>That can be done by specifying one of these parameters with your request:&lt;/p>
&lt;ul>
&lt;li>&lt;code>screenshot&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_full_page&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_selector&lt;/code> to the CSS selector of the element.&lt;/li>
&lt;/ul>
&lt;p>In this tutorial, we will see how to take a screenshot of ScrapingBee’s &lt;a href="https://www.scrapingbee.com/blog/" >blog&lt;/a> using the three methods. &lt;/p></description></item><item><title>How to make screenshots in Python</title><link>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-python/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-python/</guid><description>&lt;p>Taking a screenshot of your website is very straightforward using ScrapingBee. You can either take a screenshot of the visible portion of the page, the whole page, or an element of the page.&lt;/p>
&lt;p>That can be done by specifying one of these parameters with your request:&lt;/p>
&lt;ul>
&lt;li>&lt;code>screenshot&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_full_page&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_selector&lt;/code> to the CSS selector of the element.&lt;/li>
&lt;/ul>
&lt;p>In this tutorial, we will see how to take a screenshot of ScrapingBee’s &lt;a href="https://www.scrapingbee.com/blog/" >blog&lt;/a> using the three methods.&lt;/p></description></item><item><title>How to make screenshots in Ruby</title><link>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-ruby/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/tutorials/how-to-make-screenshots-in-ruby/</guid><description>&lt;p>Taking a screenshot of your website is very straightforward using ScrapingBee. You can either take a screenshot of the visible portion of the page, the whole page, or an element of the page.&lt;/p>
&lt;p>That can be done by specifying one of these parameters with your request:&lt;/p>
&lt;ul>
&lt;li>&lt;code>screenshot&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_full_page&lt;/code> to &lt;strong>true&lt;/strong> or &lt;strong>false&lt;/strong>.&lt;/li>
&lt;li>&lt;code>screenshot_selector&lt;/code> to the CSS selector of the element.&lt;/li>
&lt;/ul>
&lt;p>In this tutorial, we will see how to take a screenshot of ScrapingBee’s &lt;a href="https://www.scrapingbee.com/blog/" >blog&lt;/a> using the three methods.&lt;br> &lt;/p></description></item><item><title>Idealista Scraper API Tool - Free Credits &amp; Easy Setup</title><link>https://www.scrapingbee.com/scrapers/idealista-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/idealista-api/</guid><description/></item><item><title>Images Results Scraper API - Simplified &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/images-results-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/images-results-api/</guid><description/></item><item><title>Imdb Scraper API - Easy Signup &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/imdb-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/imdb-scraper-api/</guid><description/></item><item><title>Investopedia Scraper API - Simple Signup &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/investopedia-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/investopedia-scraper-api/</guid><description/></item><item><title>JavaScript Scenario</title><link>https://www.scrapingbee.com/documentation/js-scenario/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/documentation/js-scenario/</guid><description>&lt;blockquote>
&lt;p>💡 &lt;strong>Important&lt;/strong>:&lt;br>This page explains how to use a specific feature of our main &lt;a href="https://www.scrapingbee.com/" >web scraping API&lt;/a>!&lt;br>If you are not yet familiar with ScrapingBee web scraping API, you can read the documentation &lt;a href="https://www.scrapingbee.com/documentation" >here&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;h2 id="basic-usage">Basic usage&lt;/h2>
&lt;p>If you want to interact with pages you want to scrape before we return your the HTML you can add JavaScript scenario to your API call.&lt;/p>
&lt;p>For example, if you wish to click on a button, you will need to use this scenario.&lt;/p></description></item><item><title>JavaScript Web Scraping API</title><link>https://www.scrapingbee.com/features/javascript-scenario/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/javascript-scenario/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Web scraping using JavaScript has never been more simple. Need to scroll, click, fill inputs or else? - We\u0027ve got you covered.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
 &lt;h1 class="mb-[14px]">JavaScript Web Scraping API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Web scraping using JavaScript has never been more simple. Need to scroll, click, fill inputs or else? - We&amp;#39;ve got you covered.&lt;/p></description></item><item><title>Kayak Scraper API - Free Credits with Simple Signup</title><link>https://www.scrapingbee.com/scrapers/kayak-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/kayak-api/</guid><description/></item><item><title>Kickstarter Scraper API - Simple Use &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/kickstarter-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/kickstarter-scraper-api/</guid><description/></item><item><title>Kiwi.Com Scraper API - Easy Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/kiwi.com-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/kiwi.com-scraper-api/</guid><description/></item><item><title>Lazada Data Scraper API Tool - Get Free Credits Upon Sign Up</title><link>https://www.scrapingbee.com/scrapers/lazada-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/lazada-api/</guid><description/></item><item><title>Legal Notices</title><link>https://www.scrapingbee.com/legal-notices/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/legal-notices/</guid><description>&lt;h2 id="1-website-publisher">1. Website Publisher&lt;/h2>
&lt;p>VostokInc, a joint-stock company (“société par actions simplifiée”) with registered address located at 66 Avenue des Champs Élysées – 75008 Paris and registered before the Company House of Paris under number 843 352 683, is the publisher of the website &lt;a href="https://www.scrapingbee.com/" >https://www.scrapingbee.com/&lt;/a> (the “Website”).&lt;/p>
&lt;p>Email: &lt;a href="mailto:contact@scrapingbee.com" >contact@scrapingbee.com&lt;/a>&lt;/p>
&lt;p>The Publishing Director is Kevin SAHIN as legal representative of VostokInc.&lt;/p>
&lt;h2 id="2-hosting-provider">2. Hosting provider&lt;/h2>
&lt;p>The website is hosted with NETLIFY:&lt;br>
&lt;strong>Address:&lt;/strong>&lt;br>
Netlify Inc.&lt;br>
512 2nd Street Fl 2&lt;br>
San Francisco CA 94107&lt;br>
USA&lt;br>
&lt;strong>Contact information:&lt;/strong> &lt;a href="mailto:fraud@netlify.com" >fraud@netlify.com&lt;/a>&lt;/p></description></item><item><title>Local Results Scraper API - Simplified Access &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/local-results-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/local-results-api/</guid><description/></item><item><title>LoopNet Scraper API - Simple Signup, Free Credits</title><link>https://www.scrapingbee.com/scrapers/loopnet-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/loopnet-api/</guid><description/></item><item><title>Lowes Scraper API - Simplified Access, Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/lowes-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/lowes-api/</guid><description/></item><item><title>Luminati alternative for web scraping?</title><link>https://www.scrapingbee.com/luminati-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/luminati-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Luminati alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">Stop paying exorbitant fees for web scraping. Get all the data you need at a drastically better price.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>
&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Powerful proxies, without the ridiculous price tag.&lt;/h3>
 &lt;p>ScrapingBee starts at only $29/mo compared to Luminati&amp;#39;s outragous prices, see for yourself! And you always know what you’re going to pay. No surprises!&lt;/p></description></item><item><title>Marketplace Scraper with Free Credits - Easy Setup and Use</title><link>https://www.scrapingbee.com/scrapers/marketplace-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/marketplace-api/</guid><description/></item><item><title>Mediamarkt Scraper API - Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/home-depot-search-spell-check-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/home-depot-search-spell-check-api/</guid><description/></item><item><title>Mediamarkt Scraper API - Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/mediamarkt-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/mediamarkt-api/</guid><description/></item><item><title>Medium Scraper API - Effortless Signup, Free Credits</title><link>https://www.scrapingbee.com/scrapers/medium-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/medium-api/</guid><description/></item><item><title>Meesho Scraper API - Easy Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/meesho-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/meesho-scraper-api/</guid><description/></item><item><title>Mercadolibre Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/mercadolibre-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/mercadolibre-api/</guid><description/></item><item><title>Mercari Scraper API - Simple Signup, Free Credits</title><link>https://www.scrapingbee.com/scrapers/mercari-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/mercari-api/</guid><description/></item><item><title>MLS Scraper with Free Credits - Easy-to-Use Data Extraction</title><link>https://www.scrapingbee.com/scrapers/multiple-listing-service-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/multiple-listing-service-api/</guid><description/></item><item><title>Monster Scraper API - Free Signup, Credits Included</title><link>https://www.scrapingbee.com/scrapers/monster-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/monster-api/</guid><description/></item><item><title>Naver Images Scraper API - Get Free Credits Now</title><link>https://www.scrapingbee.com/scrapers/naver-images-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/naver-images-api/</guid><description/></item><item><title>Naver Search Results Scraper API - Simple Signup, Free Credits</title><link>https://www.scrapingbee.com/scrapers/naver-search-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/naver-search-api/</guid><description/></item><item><title>Netflix Scraper API - Free Starting Credits Upon Sign Up</title><link>https://www.scrapingbee.com/scrapers/netflix-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/netflix-api/</guid><description/></item><item><title>Netnut alternative for web scraping?</title><link>https://www.scrapingbee.com/netnut-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/netnut-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Netnut alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Netnut. Avoid paying exorbitant rates for your web scraping.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee simplified our &lt;strong>day-to-day marketing and engineering operations a lot&lt;/strong>. We no longer have to worry about managing our own fleet of headless browsers, and we no longer have to spend days sourcing the right proxy provider&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/mike.png" alt="Mike Ritchie">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Mike Ritchie
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">CEO @ &lt;a href="https://seekwell.io" class="font-bold underline hover:no-underline" target="_blank">SeekWell&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Strong proxies, without the ludicrous price tag.&lt;/h3>
 &lt;p>Compared to Netnut&amp;#39;s outrageous rates, ScrapingBee begins at only $29/mo, see for yourself! And you will always know what you&amp;#39;ll pay for. No surprises whatsoever!&lt;/p></description></item><item><title>Newegg Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/newegg-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/newegg-api/</guid><description/></item><item><title>News Results Scraper API - Simplicity &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/news-results-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/news-results-api/</guid><description/></item><item><title>Nextdoor Scraper API - Easy Signup &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/nextdoor-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/nextdoor-scraper-api/</guid><description/></item><item><title>Nike Scraper API - Simple Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/nike-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/nike-scraper-api/</guid><description/></item><item><title>Nimble alternative for web scraping?</title><link>https://www.scrapingbee.com/nimble-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/nimble-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Nimble alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Nimble. When simplicity, performance, and cost matter—some tools just don’t stack up.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">More than contacts. Scrape anything.&lt;/h3>
 &lt;p>Nimble is great if you only want lead data. But if you need broader scraping—products, listings, news—Nimble won’t cut it.&lt;/p></description></item><item><title>No Code Web Scraper - Make Integration</title><link>https://www.scrapingbee.com/features/make/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/make/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Enjoy no code web scraping with ScrapingBee. Integrate with most of your mainstream tools.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
 &lt;h1 class="mb-[14px]">No Code Web Scraper - Make Integration&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Enjoy no code web scraping with ScrapingBee. Integrate with most of your mainstream tools.&lt;/p></description></item><item><title>No Code Web Scraper - n8n Integration</title><link>https://www.scrapingbee.com/features/n8n/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/n8n/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Enjoy no code web scraping with ScrapingBee. Integrate with n8n to automate your workflows.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
 &lt;h1 class="mb-[14px]">No Code Web Scraper - n8n Integration&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Enjoy no code web scraping with ScrapingBee. Integrate with n8n to automate your workflows.&lt;/p></description></item><item><title>Octoparse alternative for web scraping?</title><link>https://www.scrapingbee.com/octoparse-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/octoparse-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Octoparse alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Octoparse. If your current scraping solution feels limited or overpriced, it might be time for a change.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Outgrown point-and-click tools? You're not alone.&lt;/h3>
 &lt;p>Visual scrapers like Octoparse are great for beginners—but quickly become painful to scale. If you're tired of GUIs, ScrapingBee gives you API-first power and flexibility.&lt;/p></description></item><item><title>OLX Scraper API - Easy Signup, Free Credits</title><link>https://www.scrapingbee.com/scrapers/olx-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/olx-api/</guid><description/></item><item><title>Onthemarket Scraper API - Simple Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/onthemarket-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/onthemarket-scraper-api/</guid><description/></item><item><title>OpenAI Scraper API - Signup for Free Credits</title><link>https://www.scrapingbee.com/scrapers/openai-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/openai-api/</guid><description/></item><item><title>Organic Search Results Scraper API - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/organic-results-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/organic-results-api/</guid><description/></item><item><title>Otodom Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/otodom-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/otodom-scraper-api/</guid><description/></item><item><title>Oxylabs alternative for web scraping?</title><link>https://www.scrapingbee.com/oxylabs-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/oxylabs-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Oxylabs alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Oxylabs. Looking for more reliable, affordable, and scalable scraping solutions without the complexity?&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Not just proxies. Not just high costs.&lt;/h3>
 &lt;p>Oxylabs offers great proxy services—but at a premium. Why pay more for limited proxy pools when you can access the full web for less?&lt;/p></description></item><item><title>ParseHub alternative for web scraping?</title><link>https://www.scrapingbee.com/parsehub-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/parsehub-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">ParseHub alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to ParseHub. If you&amp;#39;re seeking a more user-friendly interface, better pricing, and increased functionality, it may be time to explore other options.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">No GUI. No complexity. Just powerful APIs.&lt;/h3>
 &lt;p>ParseHub is perfect for beginners, but if you need something scalable and flexible, you need an API-first approach with powerful customization.&lt;/p></description></item><item><title>Patreon Scraper API Tool - Get Free Credits on Sign Up</title><link>https://www.scrapingbee.com/scrapers/patreon-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/patreon-api/</guid><description/></item><item><title>Pitchbook Scraper API - Easy Start &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/pitchbook-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/pitchbook-scraper-api/</guid><description/></item><item><title>Pricing - ScrapingBee Web Scraping API</title><link>https://www.scrapingbee.com/pricing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/pricing/</guid><description/></item><item><title>Privacy Policy</title><link>https://www.scrapingbee.com/privacy-policy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/privacy-policy/</guid><description>&lt;h2 id="1-preamble">1. Preamble&lt;/h2>
&lt;p>The purpose of this privacy policy (the &lt;strong>“Privacy Policy”&lt;/strong>) is to inform future prospects, customers, consultants, partners, service providers, and suppliers (including their employees) and more generally anyone browsing VostokInc's website at the following address &lt;a href="https://www.scrapingbee.com/" >https://www.scrapingbee.com/&lt;/a> (the &lt;strong>“Website”&lt;/strong>) and use VostokInc’s services about how VostokInc, a joint-stock company (“société par actions simplifiée”) with registered address located at 66 Avenue des Champs Élysées – 75008 Paris – France and registered before the Company House of Paris under number 843 352 683 (&lt;strong>“VostokInc”&lt;/strong> or &lt;strong>“We”&lt;/strong>) processes Personal Data in its capacity as data controllers and their rights in this respect.&lt;/p></description></item><item><title>Product Hunt Scraper API - Easy Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/product-hunt-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/product-hunt-scraper-api/</guid><description/></item><item><title>Properati Scraper API - Easy Signup &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/properati-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/properati-scraper-api/</guid><description/></item><item><title>Proxy Mode</title><link>https://www.scrapingbee.com/documentation/proxy-mode/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/documentation/proxy-mode/</guid><description>&lt;h2 id="what-is-the-proxy-mode">What is the proxy mode?&lt;/h2>
&lt;p>ScrapingBee also offers a proxy front-end to the API. This can make integration with third-party tools easier. The Proxy mode only changes the way you access ScrapingBee. The ScrapingBee API will then handle requests just like any standard request.&lt;/p>
&lt;p>Request cost, return code and default parameters will be the same as a standard no-proxy request.&lt;/p>
&lt;p>We recommend disabling &lt;a href="#javascript-rendering" >Javascript rendering&lt;/a> in proxy mode, which is enabled by default. The following credentials and configurations are used to access the proxy mode:&lt;/p></description></item><item><title>PubMed Scraper API - Signup for Credits Free</title><link>https://www.scrapingbee.com/scrapers/pubmed-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/pubmed-api/</guid><description/></item><item><title>Quora Scraper API - Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/quora-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/quora-api/</guid><description/></item><item><title>Rakuten Scraper API - Simple Start &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/rakuten-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/rakuten-scraper-api/</guid><description/></item><item><title>Rebranding</title><link>https://www.scrapingbee.com/rebranding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/rebranding/</guid><description>&lt;p>It's not a big change so you might wonder what's wrong with the Ninja?&lt;/p>
&lt;p>Why did we fall in love with the Bee 🐝?&lt;/p>
&lt;p>First, our company is based in France.&lt;/p>
&lt;p>We have strong legislation regarding trademark and domain name usage.&lt;/p>
&lt;p>Before launching ScrapingNinja we brainstormed a lot of different names, look at the different available domain names, and checked in different databases like &lt;a href="https://www.inpi.fr/fr" >https://www.inpi.fr/fr&lt;/a> and other European brand databases to make sure our domain/brand was unique.&lt;/p></description></item><item><title>Redfin Scraper API Tool - Simple Setup &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/redfin-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/redfin-api/</guid><description/></item><item><title>Redirecting...</title><link>https://www.scrapingbee.com/features/google-shopping-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/google-shopping-api/</guid><description/></item><item><title>Review Scraper API Tool - Simple Setup &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/review-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/review-api/</guid><description/></item><item><title>Rightmove Scraper API - Free Credits Signup</title><link>https://www.scrapingbee.com/scrapers/rightmove-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/rightmove-api/</guid><description/></item><item><title>Roblox Scraper API - Free Signup and Credits</title><link>https://www.scrapingbee.com/scrapers/roblox-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/roblox-api/</guid><description/></item><item><title>Rotten Tomatoes Scraper API - Simple Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/rotten-tomatoes-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/rotten-tomatoes-scraper-api/</guid><description/></item><item><title>RSS Scraper API Tool - Easy Setup &amp; Free Starting Credits</title><link>https://www.scrapingbee.com/scrapers/rss-feed-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/rss-feed-api/</guid><description/></item><item><title>Rumble Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/rumble-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/rumble-scraper-api/</guid><description/></item><item><title>Scrape Google Recipes Scraper API - Get Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/google-recipes-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-recipes-api/</guid><description/></item><item><title>Scrape Google Short Videos - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/google-short-videos-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/google-short-videos-api/</guid><description/></item><item><title>Scrape Nasdaq with API - Free Signup and Credits</title><link>https://www.scrapingbee.com/scrapers/nasdaq-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/nasdaq-api/</guid><description/></item><item><title>Scrape Tripadvisor with API - Free Signup and Credits</title><link>https://www.scrapingbee.com/scrapers/tripadvisor-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/tripadvisor-api/</guid><description/></item><item><title>Scrape.do alternative for web scraping?</title><link>https://www.scrapingbee.com/scrape-do-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrape-do-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Scrape.do alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Scrape.do. Simplifying web scraping shouldn’t mean sacrificing speed or reliability—check out alternatives that give you more for less.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">More than a scraper—just pure data access.&lt;/h3>
 &lt;p>Scrape.do may offer basic scraping, but it limits access to powerful tools. We give you everything you need—no upsells.&lt;/p></description></item><item><title>ScrapeHero alternative for web scraping?</title><link>https://www.scrapingbee.com/scrapehero-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapehero-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">ScrapeHero alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to ScrapeHero. Struggling with your current scraping solution? It’s time to switch to a more efficient and affordable alternative.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">No gimmicks. Just web scraping at scale.&lt;/h3>
 &lt;p>ScrapeHero offers scraping, but it's often locked behind complicated plans. Get what you need without all the complexity.&lt;/p></description></item><item><title>ScrapeOwl alternative for web scraping?</title><link>https://www.scrapingbee.com/scrapeowl-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapeowl-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">ScrapeOwl alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to ScrapeOwl. Powerful scraping should be straightforward, cost-efficient, and easy to integrate into your workflow—let’s look at better alternatives.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Not just limited scrapes. Full scraping flexibility.&lt;/h3>
 &lt;p>ScrapeOwl provides basic scraping, but if you need something more powerful and customizable, you need a better alternative.&lt;/p></description></item><item><title>ScraperAPI alternative for web scraping?</title><link>https://www.scrapingbee.com/scraperapi-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scraperapi-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">ScraperAPI alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to ScraperAPI. A better web scraping API, for 50% less.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">More, for less!&lt;/h3>
 &lt;p>Compared to ScraperAPI, ScrapingBee offers much more at a way better price!&lt;/p></description></item><item><title>Scrapfly alternative for web scraping?</title><link>https://www.scrapingbee.com/scrapfly-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapfly-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Scrapfly alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Scrapfly. Need a scraping solution that’s faster, more flexible, and less complicated? There are better options out there.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">No limited plans. No hidden extras.&lt;/h3>
 &lt;p>Scrapfly might offer robust scraping, but it's complicated and pricey. We make it simple—scrape without unnecessary costs.&lt;/p></description></item><item><title>Scraping Fish alternative for web scraping?</title><link>https://www.scrapingbee.com/scrapingfish-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapingfish-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Scraping Fish alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Scraping Fish. Web scraping should be easy, cost-effective, and hassle-free. It&amp;#39;s time to consider alternatives that better meet your needs.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Not just proxies. Real scraping solutions.&lt;/h3>
 &lt;p>ScrapingFish focuses on proxies but doesn't give you the flexibility needed for broader scraping. We offer much more than just IPs—get full scraping power without the added cost.&lt;/p></description></item><item><title>ScrapingAnt alternative for web scraping?</title><link>https://www.scrapingbee.com/scrapingant-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapingant-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">ScrapingAnt alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to ScrapingAnt. Tired of dealing with complex setups or overblown pricing? Explore alternatives that make web scraping simpler and more affordable.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Not just proxies or scraping—complete solutions.&lt;/h3>
 &lt;p>ScrapingAnt might offer simple scraping, but we give you everything you need—reliable APIs, proxy support, and advanced features.&lt;/p></description></item><item><title>ScrapingBee alternative for web scraping?</title><link>https://www.scrapingbee.com/scrapingbee-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapingbee-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">ScrapingBee alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is the most efficient web scraping API out there. Let&amp;#39;s see how it compares to the other big names.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee simplified our &lt;strong>day-to-day marketing and engineering operations a lot&lt;/strong>. We no longer have to worry about managing our own fleet of headless browsers, and we no longer have to spend days sourcing the right proxy provider&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/mike.png" alt="Mike Ritchie">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Mike Ritchie
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">CEO @ &lt;a href="https://seekwell.io" class="font-bold underline hover:no-underline" target="_blank">SeekWell&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-col">
 &lt;div class="-my-[2px] overflow-x-auto sm:-mx-[6px] lg:-mx-[8px]">
 &lt;div class="py-[2px] align-middle inline-block min-w-full sm:px-[24px] lg:px-[8px]">
 &lt;div class="overflow-hidden border-b border-gray-200">
 &lt;table class="min-w-full divide-y divide-gray-200">
 &lt;thead class="bg-black-100 text-white">
 &lt;tr>
 &lt;th scope="col" class="px-[24px] py-[3px] text-left text-xs font-20 text-gray-500 uppercase tracking-wider">
 Service
 &lt;/th>
 &lt;th scope="col" class="px-[24px] py-[3px] text-center text-xs font-20 text-gray-500 uppercase tracking-wider">
 API
 &lt;/th>
 &lt;th scope="col" class="px-[24px] py-[3px] text-center text-xs font-20 text-gray-500 uppercase tracking-wider">
 Proxy Mode
 &lt;/th>
 &lt;th scope="col" class="px-[24px] py-[3px] text-center text-xs font-20 text-gray-500 uppercase tracking-wider">
 Geolocation
 &lt;/th>
 &lt;th scope="col" class="px-[24px] py-[3px] text-center text-xs font-20 text-gray-500 uppercase tracking-wider">
 Price per GB
 &lt;/th>
 &lt;th scope="col" class="px-[24px] py-[3px] text-center text-xs font-20 text-gray-500 uppercase tracking-wider">
 Minimum monthly commitment
 &lt;/th>
 &lt;th scope="col" class="px-[24px] py-[3px] text-center text-xs font-20 text-gray-500 uppercase tracking-wider">
 Success Rate **
 &lt;/th>
 &lt;th scope="col" class="px-[24px] py-[3px] text-center text-xs font-20 text-gray-500 uppercase tracking-wider">
 Average query duration **
 &lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody class="bg-white divide-y divide-gray-200">
 &lt;tr>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap">
 &lt;div class="flex items-center">
 &lt;div class="flex-shrink-0 h-[30px] w-[30px]">
 &lt;img class="h-[30px] w-[30px]" src="https://www.scrapingbee.com/images/favico.png" alt="">
 &lt;/div>
 &lt;div class="ml-[20px]">
 &lt;div class="text-[20px] font-weight-bold text-black-100">
 ScrapingBee
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-green-1000">
 &lt;div class="text-center text-green-1000">
 &lt;svg class="h-[35px] w-[35px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-green-1000">
 &lt;div class="text-center text-green-1000">
 &lt;svg class="h-[35px] w-[35px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-green-1000">
 &lt;div class="text-center text-green-1000">
 &lt;svg class="h-[35px] w-[35px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-[20px] font-20 text-green-1000">
 $0*
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-[20px] font-20 text-green-1000">
 $49
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-[20px] font-20 text-green-1000">
 98%
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-[20px] font-20 text-green-1000">
 3.14s
 &lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap">
 &lt;div class="ml-[4px]">
 &lt;div class="text-[20px] font-weight-bold">
 Luminati
 &lt;/div>
 &lt;/div>
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 $0.1
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 $500
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 95%
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 5.12s
 &lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap">
 &lt;div class="ml-[4px]">
 &lt;div class="text-[20px] font-weight-bold">
 Netnut
 &lt;/div>
 &lt;/div>
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 $15
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 $300
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 96%
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 5.13s
 &lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap">
 &lt;div class="ml-[4px]">
 &lt;div class="text-[20px] font-weight-bold">
 Proxyscrape (free)
 &lt;/div>
 &lt;/div>
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 $0
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 $0
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 45%
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 13.6s
 &lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap">
 &lt;div class="ml-[4px]">
 &lt;div class="text-[20px] font-weight-bold">
 Freeproxycz (free)
 &lt;/div>
 &lt;/div>
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center">

 &lt;div class="text-center">
 &lt;svg class="h-[30px] w-[30px]" xmlns="http://www.w3.org/2000/svg" style="margin:auto" fill="none" viewBox="0 0 24 24" stroke="currentColor">
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7">&lt;/path>
 &lt;/svg>
 &lt;/div>

 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 $0
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 $0
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 25%
 &lt;/td>
 &lt;td class="px-[24px] py-[16px] whitespace-nowrap text-center text-md font-20">
 12.73s
 &lt;/td>
 &lt;/tr>

 &lt;/tbody>
 &lt;/table>
 &lt;/div>
 &lt;div class="pt-[30px]">
 &lt;tiny>* request-based pricing, ** benchmarks available &lt;a href="https://www.scrapingbee.com/blog/rotating-proxies/">here&lt;/a> and &lt;a href="https://www.scrapingbee.com/blog/best-free-proxy-list-web-scraping/">here&lt;/a>, ***60 ips offer&lt;/tiny>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">Great SaaS tool for legitimate scraping and data extraction. &lt;strong>ScrapingBee makes it easy to automatically pull down data from the sites&lt;/strong> that publish periodic data in a human-readable format.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/andy.jpeg" alt="Andy Hawkes">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Andy Hawkes
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Founder @ &lt;a href="https://loadster.app" class="font-bold underline hover:no-underline" target="_blank">Loadster&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[70px] md:py-[91px]">
 &lt;div class="container text-center mb-[36px]">
 &lt;span class="block -mb-[4px] uppercase text-black-100">FEATURES&lt;/span>
 &lt;h3 class="leading-[1.16] mb-[18px] tracking-[0.2px] text-black-100">Conservative pricing. Radical power.&lt;/h3>
 &lt;h4 class="text-gray-200 tracking-[0.2px]">Hassle-free web-scraping API.&lt;/h4>
 &lt;/div>
 &lt;div class="container max-w-[1308px]">
 &lt;div class="flex flex-wrap text-gray-200 text-[16px] leading-[1.50] -my-[19px] -mx-[20px] md:-mx-[36px] pb-[45px]">
 
 &lt;div class="w-full sm:w-1/2 py-[19px] px-[20px] md:px-[36px]">
 &lt;div class="relative pl-[43px]">
 &lt;div class="absolute left-[0] top-[3px] w-[20px] text-center">
 &lt;img src="https://www.scrapingbee.com/images/icons/icon-earth.svg" class="inline-block" width="20" alt="">
 &lt;/div>
 &lt;h4 class="mb-[4px] text-black-100">Smart routing&lt;/h4>
 &lt;p>To ensure a performance rate of 98% , our smart routing algorithms will always pick the right proxies for your needs.&lt;/p></description></item><item><title>Scrapingdog alternative for web scraping?</title><link>https://www.scrapingbee.com/scrapingdog-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapingdog-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Scrapingdog alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Scrapingdog. Looking for an easier, cheaper, and more reliable scraping solution? There are great alternatives to Scrapingdog out there.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Not just data—structured, actionable results.&lt;/h3>
 &lt;p>Scrapingdog does the job, but if you're after flexible, scalable scraping, we offer better solutions that fit your needs.&lt;/p></description></item><item><title>Screenshot API for Developers</title><link>https://www.scrapingbee.com/features/screenshot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/screenshot/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Programmatic Screenshot API for any website with just a simple click of a button call, in seconds.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
 &lt;h1 class="mb-[14px]">Screenshot API for Developers&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Programmatic Screenshot API for any website with just a simple click of a button call, in seconds.&lt;/p></description></item><item><title>Search Archive Scraper API - Free Signup, Credits Included</title><link>https://www.scrapingbee.com/scrapers/search-archive-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/search-archive-api/</guid><description/></item><item><title>Sec Filings Scraper API - Easy Start &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/sec-filings-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/sec-filings-scraper-api/</guid><description/></item><item><title>Sephora API Scraper - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/sephora-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/sephora-api/</guid><description/></item><item><title>SerpApi alternative for web scraping?</title><link>https://www.scrapingbee.com/serpapi-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/serpapi-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">SerpApi alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to SerpApi. Web scraping shouldn&amp;#39;t cost a fortune—or require a full-time engineer to manage.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Not just search engines. Not just inflated costs.&lt;/h3>
 &lt;p>SerpAPI is built for one job—&lt;a href="https://www.scrapingbee.com/blog/how-to-scrape-google-search-results-data-in-python-easily/">scraping search engines&lt;/a>—but it comes at a steep price. Why pay more for a limited tool when you can scrape the entire web for less?&lt;/p></description></item><item><title>Shein Scraper API - Easy Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/shein-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/shein-scraper-api/</guid><description/></item><item><title>Shopee Scraper API Tool - Get Free Credits on Sign Up</title><link>https://www.scrapingbee.com/scrapers/shopee-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/shopee-api/</guid><description/></item><item><title>Shopify Scraper API - Easy Signup &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/shopify-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/shopify-scraper-api/</guid><description/></item><item><title>Smartproxy alternative for web scraping?</title><link>https://www.scrapingbee.com/smartproxy-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/smartproxy-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Smartproxy alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">Pay the fair price for your web scraping needs.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee is helping us scrape &lt;strong>many job boards and company websites&lt;/strong> without having to deal with proxies or chrome browsers. It drastically simplified our data pipeline&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/russel.jpeg" alt="Russel Taylor">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Russel Taylor
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">CEO @ HelloOutbound&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Fulfill your web scraping needs, at a better price&lt;/h3>
 &lt;p>Switching from Smartproxy to ScrapingBee could save you some serious money. Especially if you are using their residential proxies.&lt;/p></description></item><item><title>Snapchat Scraper API - Simple Start &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/snapchat-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/snapchat-scraper-api/</guid><description/></item><item><title>Social Media Scraper API - Simple Setup &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/social-media-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/social-media-api/</guid><description/></item><item><title>SoundCloud Scraper API Tool - Start with Free Credits</title><link>https://www.scrapingbee.com/scrapers/soundcloud-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/soundcloud-api/</guid><description/></item><item><title>Spaw.co alternative for web scraping?</title><link>https://www.scrapingbee.com/spaw-co-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/spaw-co-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Spaw.co alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Spaw.co. When scraping needs to be fast, scalable, and hassle-free, consider alternatives that make web data extraction a breeze.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">No limits, no extra charges—just pure scraping power.&lt;/h3>
 &lt;p>Spaw.co offers scraping but limits access to certain features unless you upgrade. Get the full package with no upsells.&lt;/p></description></item><item><title>Spotify Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/spotify-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/spotify-api/</guid><description/></item><item><title>Steam Scraper API - Simple Start &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/steam-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/steam-scraper-api/</guid><description/></item><item><title>Stockx Scraper API - Simple Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/stockx-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/stockx-scraper-api/</guid><description/></item><item><title>StreetEasy Scraper API - Easy Start &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/streeteasy-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/streeteasy-scraper-api/</guid><description/></item><item><title>Substack Scraper API - Easy Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/substack-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/substack-scraper-api/</guid><description/></item><item><title>Supported Countries</title><link>https://www.scrapingbee.com/documentation/country_codes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/documentation/country_codes/</guid><description>&lt;h2 id="list-of-supported-country-codes">List of supported country codes&lt;/h2>
&lt;p>The following is the list of supported country codes using &lt;a href="https://en.wikipedia.org/wiki/ISO_3166-1" >ISO 3166-1 format&lt;/a> .&lt;/p>
&lt;p>Use country code with the &lt;code>country_code&lt;/code> parameter. Geolocation is only available when &lt;a href="https://www.scrapingbee.com/documentation/#premium-proxy" >premium proxies&lt;/a> are enabled: &lt;code>premium_proxy=true&lt;/code>.&lt;/p>
&lt;table>&lt;thead>&lt;tr>&lt;th style="text-align:left">Country Name&lt;/th>&lt;th style="text-align:left">country_code&lt;/th>&lt;/tr>&lt;/thead>&lt;tbody>&lt;tr>&lt;td style="text-align:left">Afghanistan&lt;/td>&lt;td style="text-align:left">af&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Albania&lt;/td>&lt;td style="text-align:left">al&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Algeria&lt;/td>&lt;td style="text-align:left">dz&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">American Samoa&lt;/td>&lt;td style="text-align:left">as&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Andorra&lt;/td>&lt;td style="text-align:left">ad&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Angola&lt;/td>&lt;td style="text-align:left">ao&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Anguilla&lt;/td>&lt;td style="text-align:left">ai&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Antarctica&lt;/td>&lt;td style="text-align:left">aq&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Antigua &amp;amp; Barbuda&lt;/td>&lt;td style="text-align:left">ag&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Argentina&lt;/td>&lt;td style="text-align:left">ar&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Armenia&lt;/td>&lt;td style="text-align:left">am&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Aruba&lt;/td>&lt;td style="text-align:left">aw&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Australia&lt;/td>&lt;td style="text-align:left">au&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Austria&lt;/td>&lt;td style="text-align:left">at&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Azerbaijan&lt;/td>&lt;td style="text-align:left">az&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Bahama&lt;/td>&lt;td style="text-align:left">bs&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Bahrain&lt;/td>&lt;td style="text-align:left">bh&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Bangladesh&lt;/td>&lt;td style="text-align:left">bd&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Barbados&lt;/td>&lt;td style="text-align:left">bb&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Belarus&lt;/td>&lt;td style="text-align:left">by&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Belgium&lt;/td>&lt;td style="text-align:left">be&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Belize&lt;/td>&lt;td style="text-align:left">bz&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Benin&lt;/td>&lt;td style="text-align:left">bj&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Bermuda&lt;/td>&lt;td style="text-align:left">bm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Bhutan&lt;/td>&lt;td style="text-align:left">bt&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Bolivia&lt;/td>&lt;td style="text-align:left">bo&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Bosnia and Herzegovina&lt;/td>&lt;td style="text-align:left">ba&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Botswana&lt;/td>&lt;td style="text-align:left">bw&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Bouvet Island&lt;/td>&lt;td style="text-align:left">bv&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Brazil&lt;/td>&lt;td style="text-align:left">br&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">British Indian Ocean Territory&lt;/td>&lt;td style="text-align:left">io&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">British Virgin Islands&lt;/td>&lt;td style="text-align:left">vg&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Brunei Darussalam&lt;/td>&lt;td style="text-align:left">bn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Bulgaria&lt;/td>&lt;td style="text-align:left">bg&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Burkina Faso&lt;/td>&lt;td style="text-align:left">bf&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Burma (no longer exists)&lt;/td>&lt;td style="text-align:left">bu&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Burundi&lt;/td>&lt;td style="text-align:left">bi&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Cambodia&lt;/td>&lt;td style="text-align:left">kh&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Cameroon&lt;/td>&lt;td style="text-align:left">cm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Canada&lt;/td>&lt;td style="text-align:left">ca&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Cape Verde&lt;/td>&lt;td style="text-align:left">cv&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Cayman Islands&lt;/td>&lt;td style="text-align:left">ky&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Central African Republic&lt;/td>&lt;td style="text-align:left">cf&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Chad&lt;/td>&lt;td style="text-align:left">td&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Chile&lt;/td>&lt;td style="text-align:left">cl&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">China&lt;/td>&lt;td style="text-align:left">cn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Christmas Island&lt;/td>&lt;td style="text-align:left">cx&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Cocos (Keeling) Islands&lt;/td>&lt;td style="text-align:left">cc&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Colombia&lt;/td>&lt;td style="text-align:left">co&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Comoros&lt;/td>&lt;td style="text-align:left">km&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Congo&lt;/td>&lt;td style="text-align:left">cg&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Cook Iislands&lt;/td>&lt;td style="text-align:left">ck&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Costa Rica&lt;/td>&lt;td style="text-align:left">cr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Croatia&lt;/td>&lt;td style="text-align:left">hr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Cuba&lt;/td>&lt;td style="text-align:left">cu&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Cyprus&lt;/td>&lt;td style="text-align:left">cy&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Czech Republic&lt;/td>&lt;td style="text-align:left">cz&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Czechoslovakia (no longer exists)&lt;/td>&lt;td style="text-align:left">cs&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">C&amp;ocirc;te D'ivoire (Ivory Coast)&lt;/td>&lt;td style="text-align:left">ci&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Democratic Yemen (no longer exists)&lt;/td>&lt;td style="text-align:left">yd&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Denmark&lt;/td>&lt;td style="text-align:left">dk&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Djibouti&lt;/td>&lt;td style="text-align:left">dj&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Dominica&lt;/td>&lt;td style="text-align:left">dm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Dominican Republic&lt;/td>&lt;td style="text-align:left">do&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">East Timor&lt;/td>&lt;td style="text-align:left">tp&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Ecuador&lt;/td>&lt;td style="text-align:left">ec&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Egypt&lt;/td>&lt;td style="text-align:left">eg&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">El Salvador&lt;/td>&lt;td style="text-align:left">sv&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Equatorial Guinea&lt;/td>&lt;td style="text-align:left">gq&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Eritrea&lt;/td>&lt;td style="text-align:left">er&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Estonia&lt;/td>&lt;td style="text-align:left">ee&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Ethiopia&lt;/td>&lt;td style="text-align:left">et&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Falkland Islands (Malvinas)&lt;/td>&lt;td style="text-align:left">fk&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Faroe Islands&lt;/td>&lt;td style="text-align:left">fo&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Fiji&lt;/td>&lt;td style="text-align:left">fj&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Finland&lt;/td>&lt;td style="text-align:left">fi&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">France&lt;/td>&lt;td style="text-align:left">fr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">French Guiana&lt;/td>&lt;td style="text-align:left">gf&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">French Polynesia&lt;/td>&lt;td style="text-align:left">pf&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">French Southern Territories&lt;/td>&lt;td style="text-align:left">tf&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Gabon&lt;/td>&lt;td style="text-align:left">ga&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Gambia&lt;/td>&lt;td style="text-align:left">gm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Georgia&lt;/td>&lt;td style="text-align:left">ge&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">German Democratic Republic (no longer exists)&lt;/td>&lt;td style="text-align:left">dd&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Germany&lt;/td>&lt;td style="text-align:left">de&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Ghana&lt;/td>&lt;td style="text-align:left">gh&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Gibraltar&lt;/td>&lt;td style="text-align:left">gi&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Greece&lt;/td>&lt;td style="text-align:left">gr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Greenland&lt;/td>&lt;td style="text-align:left">gl&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Grenada&lt;/td>&lt;td style="text-align:left">gd&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Guadeloupe&lt;/td>&lt;td style="text-align:left">gp&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Guam&lt;/td>&lt;td style="text-align:left">gu&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Guatemala&lt;/td>&lt;td style="text-align:left">gt&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Guinea&lt;/td>&lt;td style="text-align:left">gn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Guinea-Bissau&lt;/td>&lt;td style="text-align:left">gw&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Guyana&lt;/td>&lt;td style="text-align:left">gy&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Haiti&lt;/td>&lt;td style="text-align:left">ht&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Heard &amp;amp; McDonald Islands&lt;/td>&lt;td style="text-align:left">hm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Honduras&lt;/td>&lt;td style="text-align:left">hn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Hong Kong&lt;/td>&lt;td style="text-align:left">hk&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Hungary&lt;/td>&lt;td style="text-align:left">hu&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Iceland&lt;/td>&lt;td style="text-align:left">is&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">India&lt;/td>&lt;td style="text-align:left">in&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Indonesia&lt;/td>&lt;td style="text-align:left">id&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Iraq&lt;/td>&lt;td style="text-align:left">iq&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Ireland&lt;/td>&lt;td style="text-align:left">ie&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Islamic Republic of Iran&lt;/td>&lt;td style="text-align:left">ir&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Israel&lt;/td>&lt;td style="text-align:left">il&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Italy&lt;/td>&lt;td style="text-align:left">it&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Jamaica&lt;/td>&lt;td style="text-align:left">jm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Japan&lt;/td>&lt;td style="text-align:left">jp&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Jordan&lt;/td>&lt;td style="text-align:left">jo&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Kazakhstan&lt;/td>&lt;td style="text-align:left">kz&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Kenya&lt;/td>&lt;td style="text-align:left">ke&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Kiribati&lt;/td>&lt;td style="text-align:left">ki&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Korea, Democratic People's Republic of&lt;/td>&lt;td style="text-align:left">kp&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Korea, Republic of&lt;/td>&lt;td style="text-align:left">kr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Kuwait&lt;/td>&lt;td style="text-align:left">kw&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Kyrgyzstan&lt;/td>&lt;td style="text-align:left">kg&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Lao People's Democratic Republic&lt;/td>&lt;td style="text-align:left">la&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Latvia&lt;/td>&lt;td style="text-align:left">lv&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Lebanon&lt;/td>&lt;td style="text-align:left">lb&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Lesotho&lt;/td>&lt;td style="text-align:left">ls&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Liberia&lt;/td>&lt;td style="text-align:left">lr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Libyan Arab Jamahiriya&lt;/td>&lt;td style="text-align:left">ly&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Liechtenstein&lt;/td>&lt;td style="text-align:left">li&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Lithuania&lt;/td>&lt;td style="text-align:left">lt&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Luxembourg&lt;/td>&lt;td style="text-align:left">lu&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Macau&lt;/td>&lt;td style="text-align:left">mo&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Madagascar&lt;/td>&lt;td style="text-align:left">mg&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Malawi&lt;/td>&lt;td style="text-align:left">mw&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Malaysia&lt;/td>&lt;td style="text-align:left">my&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Maldives&lt;/td>&lt;td style="text-align:left">mv&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Mali&lt;/td>&lt;td style="text-align:left">ml&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Malta&lt;/td>&lt;td style="text-align:left">mt&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Marshall Islands&lt;/td>&lt;td style="text-align:left">mh&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Martinique&lt;/td>&lt;td style="text-align:left">mq&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Mauritania&lt;/td>&lt;td style="text-align:left">mr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Mauritius&lt;/td>&lt;td style="text-align:left">mu&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Mayotte&lt;/td>&lt;td style="text-align:left">yt&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Mexico&lt;/td>&lt;td style="text-align:left">mx&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Micronesia&lt;/td>&lt;td style="text-align:left">fm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Moldova, Republic of&lt;/td>&lt;td style="text-align:left">md&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Monaco&lt;/td>&lt;td style="text-align:left">mc&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Mongolia&lt;/td>&lt;td style="text-align:left">mn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Monserrat&lt;/td>&lt;td style="text-align:left">ms&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Morocco&lt;/td>&lt;td style="text-align:left">ma&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Mozambique&lt;/td>&lt;td style="text-align:left">mz&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Myanmar&lt;/td>&lt;td style="text-align:left">mm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Namibia&lt;/td>&lt;td style="text-align:left">na&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Nauru&lt;/td>&lt;td style="text-align:left">nr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Nepal&lt;/td>&lt;td style="text-align:left">np&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Netherlands Antilles&lt;/td>&lt;td style="text-align:left">an&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Netherlands&lt;/td>&lt;td style="text-align:left">nl&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Neutral Zone (no longer exists)&lt;/td>&lt;td style="text-align:left">nt&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">New Caledonia&lt;/td>&lt;td style="text-align:left">nc&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">New Zealand&lt;/td>&lt;td style="text-align:left">nz&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Nicaragua&lt;/td>&lt;td style="text-align:left">ni&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Niger&lt;/td>&lt;td style="text-align:left">ne&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Nigeria&lt;/td>&lt;td style="text-align:left">ng&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Niue&lt;/td>&lt;td style="text-align:left">nu&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Norfolk Island&lt;/td>&lt;td style="text-align:left">nf&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Northern Mariana Islands&lt;/td>&lt;td style="text-align:left">mp&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Norway&lt;/td>&lt;td style="text-align:left">no&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Oman&lt;/td>&lt;td style="text-align:left">om&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Pakistan&lt;/td>&lt;td style="text-align:left">pk&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Palau&lt;/td>&lt;td style="text-align:left">pw&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Panama&lt;/td>&lt;td style="text-align:left">pa&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Papua New Guinea&lt;/td>&lt;td style="text-align:left">pg&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Paraguay&lt;/td>&lt;td style="text-align:left">py&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Peru&lt;/td>&lt;td style="text-align:left">pe&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Philippines&lt;/td>&lt;td style="text-align:left">ph&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Pitcairn&lt;/td>&lt;td style="text-align:left">pn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Poland&lt;/td>&lt;td style="text-align:left">pl&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Portugal&lt;/td>&lt;td style="text-align:left">pt&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Puerto Rico&lt;/td>&lt;td style="text-align:left">pr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Qatar&lt;/td>&lt;td style="text-align:left">qa&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Romania&lt;/td>&lt;td style="text-align:left">ro&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Russian Federation&lt;/td>&lt;td style="text-align:left">ru&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Rwanda&lt;/td>&lt;td style="text-align:left">rw&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">R&amp;eacute;union&lt;/td>&lt;td style="text-align:left">re&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Saint Lucia&lt;/td>&lt;td style="text-align:left">lc&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Samoa&lt;/td>&lt;td style="text-align:left">ws&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">San Marino&lt;/td>&lt;td style="text-align:left">sm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Sao Tome &amp;amp; Principe&lt;/td>&lt;td style="text-align:left">st&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Saudi Arabia&lt;/td>&lt;td style="text-align:left">sa&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Senegal&lt;/td>&lt;td style="text-align:left">sn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Seychelles&lt;/td>&lt;td style="text-align:left">sc&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Sierra Leone&lt;/td>&lt;td style="text-align:left">sl&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Singapore&lt;/td>&lt;td style="text-align:left">sg&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Slovakia&lt;/td>&lt;td style="text-align:left">sk&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Slovenia&lt;/td>&lt;td style="text-align:left">si&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Solomon Islands&lt;/td>&lt;td style="text-align:left">sb&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Somalia&lt;/td>&lt;td style="text-align:left">so&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">South Africa&lt;/td>&lt;td style="text-align:left">za&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">South Georgia and the South Sandwich Islands&lt;/td>&lt;td style="text-align:left">gs&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Spain&lt;/td>&lt;td style="text-align:left">es&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Sri Lanka&lt;/td>&lt;td style="text-align:left">lk&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">St. Helena&lt;/td>&lt;td style="text-align:left">sh&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">St. Kitts and Nevis&lt;/td>&lt;td style="text-align:left">kn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">St. Pierre &amp;amp; Miquelon&lt;/td>&lt;td style="text-align:left">pm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">St. Vincent &amp;amp; the Grenadines&lt;/td>&lt;td style="text-align:left">vc&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Sudan&lt;/td>&lt;td style="text-align:left">sd&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Suriname&lt;/td>&lt;td style="text-align:left">sr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Svalbard &amp;amp; Jan Mayen Islands&lt;/td>&lt;td style="text-align:left">sj&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Swaziland&lt;/td>&lt;td style="text-align:left">sz&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Sweden&lt;/td>&lt;td style="text-align:left">se&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Switzerland&lt;/td>&lt;td style="text-align:left">ch&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Syrian Arab Republic&lt;/td>&lt;td style="text-align:left">sy&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Taiwan, Province of China&lt;/td>&lt;td style="text-align:left">tw&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Tajikistan&lt;/td>&lt;td style="text-align:left">tj&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Tanzania, United Republic of&lt;/td>&lt;td style="text-align:left">tz&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Thailand&lt;/td>&lt;td style="text-align:left">th&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Togo&lt;/td>&lt;td style="text-align:left">tg&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Tokelau&lt;/td>&lt;td style="text-align:left">tk&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Tonga&lt;/td>&lt;td style="text-align:left">to&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Trinidad &amp;amp; Tobago&lt;/td>&lt;td style="text-align:left">tt&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Tunisia&lt;/td>&lt;td style="text-align:left">tn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Turkey&lt;/td>&lt;td style="text-align:left">tr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Turkmenistan&lt;/td>&lt;td style="text-align:left">tm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Turks &amp;amp; Caicos Islands&lt;/td>&lt;td style="text-align:left">tc&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Tuvalu&lt;/td>&lt;td style="text-align:left">tv&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Uganda&lt;/td>&lt;td style="text-align:left">ug&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Ukraine&lt;/td>&lt;td style="text-align:left">ua&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Union of Soviet Socialist Republics (no longer exists)&lt;/td>&lt;td style="text-align:left">su&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">United Arab Emirates&lt;/td>&lt;td style="text-align:left">ae&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">United Kingdom (Great Britain)&lt;/td>&lt;td style="text-align:left">gb&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">United States Minor Outlying Islands&lt;/td>&lt;td style="text-align:left">um&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">United States Virgin Islands&lt;/td>&lt;td style="text-align:left">vi&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">United States&lt;/td>&lt;td style="text-align:left">us&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Uruguay&lt;/td>&lt;td style="text-align:left">uy&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Uzbekistan&lt;/td>&lt;td style="text-align:left">uz&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Vanuatu&lt;/td>&lt;td style="text-align:left">vu&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Vatican City State (Holy See)&lt;/td>&lt;td style="text-align:left">va&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Venezuela&lt;/td>&lt;td style="text-align:left">ve&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Viet Nam&lt;/td>&lt;td style="text-align:left">vn&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Wallis &amp;amp; Futuna Islands&lt;/td>&lt;td style="text-align:left">wf&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Western Sahara&lt;/td>&lt;td style="text-align:left">eh&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Yemen&lt;/td>&lt;td style="text-align:left">ye&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Yugoslavia&lt;/td>&lt;td style="text-align:left">yu&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Zaire&lt;/td>&lt;td style="text-align:left">zr&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Zambia&lt;/td>&lt;td style="text-align:left">zm&lt;/td>&lt;/tr>&lt;tr>&lt;td style="text-align:left">Zimbabwe&lt;/td>&lt;td style="text-align:left">zw&lt;/td>&lt;/tr>&lt;/tbody>&lt;/table></description></item><item><title>Suumo Scraper API - Easy Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/suumo-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/suumo-scraper-api/</guid><description/></item><item><title>Taobao Scraper - Simple Solution, Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/taobao-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/taobao-api/</guid><description/></item><item><title>Target Scraper API - Free Credits with Signup</title><link>https://www.scrapingbee.com/scrapers/target-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/target-api/</guid><description/></item><item><title>Thank you for your Submission!</title><link>https://www.scrapingbee.com/thank_you/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/thank_you/</guid><description/></item><item><title>The Best Scraper API to Avoid Getting Blocked</title><link>https://www.scrapingbee.com/scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scraper-api/</guid><description/></item><item><title>The Best Scraper API to Avoid Getting Blocked</title><link>https://www.scrapingbee.com/web-scraping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/web-scraping/</guid><description/></item><item><title>The easiest way to make the web LLM-readable</title><link>https://www.scrapingbee.com/features/markdown-scraper/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/markdown-scraper/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Get Markdown or Plain Text content from any website you want to scrape.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-50 sm:pb-100 md:mb-170">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
 &lt;h1 class="mb-[14px]">The easiest way to make the web LLM-readable&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Get Markdown or Plain Text content from any website you want to scrape.&lt;/p></description></item><item><title>The journey to a $1 million ARR SaaS without traditional VCs</title><link>https://www.scrapingbee.com/journey-to-one-million-arr/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/journey-to-one-million-arr/</guid><description>&lt;h2 id="the-early-days">The early days&lt;/h2>
&lt;div class="journey max-w-[728px] md:max-w-none mx-auto text-[16px]">
 
 &lt;div class="row relative flex flex-wrap items-center text-black-100">
 &lt;div class="col relative w-full sm:w-[100px] md:w-1/2 flex pr-[10px] md:px-[48px] mb-[20px] sm:mb-[0]">
 &lt;time class="uppercase text-[20px] lg:text-[24px] leading-[1.50] font-bold">SEP 2006&lt;/time>
 &lt;/div>
 &lt;div class="col relative w-full sm:w-auto flex-1 md:w-1/2 md:px-[48px]">
 &lt;div class="bg-yellow-100 p-[20px] rounded-md text-[18px] leading-[1.50]">
 &lt;div>
 &lt;strong class="block text-[24px] mb-[8px]">14 years ago.&lt;/strong>
 &lt;p>We (Kevin and Pierre) met in high school in a small town located in the south of France.&lt;/p>
 
 &lt;img class="lozad w-full" data-src="https://www.scrapingbee.com/images/about-us/castres.jpeg">
 
 
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 
 &lt;div class="row relative flex flex-wrap items-center text-black-100">
 &lt;div class="col relative w-full sm:w-[100px] md:w-1/2 flex pr-[10px] md:px-[48px] mb-[20px] sm:mb-[0]">
 &lt;time class="uppercase text-[20px] lg:text-[24px] leading-[1.50] font-bold">JUN 2010&lt;/time>
 &lt;/div>
 &lt;div class="col relative w-full sm:w-auto flex-1 md:w-1/2 md:px-[48px]">
 &lt;div class="bg-yellow-100 p-[20px] rounded-md text-[18px] leading-[1.50]">
 &lt;div>
 &lt;strong class="block text-[24px] mb-[8px]">... school ends.&lt;/strong>
 &lt;p>&lt;p>We go learn CS at university.
During that time, we started to learn about &lt;a href="https://www.ycombinator.com" >YC&lt;/a>, &lt;a href="https://www.indiehackers.com" >IndieHackers&lt;/a>, Rob Walling's &lt;a href="https://startupbook.net" >book&lt;/a>, &lt;a href="https://www.thefamily.co" >the family&lt;/a>, and this whole startup/bootstrapping ecosystem.&lt;/p></description></item><item><title>The Web Scraping API for Busy Developers</title><link>https://www.scrapingbee.com/what-you-want/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/what-you-want/</guid><description/></item><item><title>The Web Scraping API for Busy Developers</title><link>https://www.scrapingbee.com/web-scraping-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/web-scraping-api/</guid><description/></item><item><title>The Web Scraping API for Buzzzy Developers</title><link>https://www.scrapingbee.com/buzzy-dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/buzzy-dev/</guid><description/></item><item><title>Tiktok Email Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/tiktok-email-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/tiktok-email-scraper-api/</guid><description/></item><item><title>TikTok Scraper - Easy Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/tiktok-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/tiktok-api/</guid><description/></item><item><title>Tokopedia Scraper API - Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/tokopedia-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/tokopedia-api/</guid><description/></item><item><title>Transfermarkt Scraper API - Simple Start with Free Signup</title><link>https://www.scrapingbee.com/scrapers/transfermarkt-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/transfermarkt-api/</guid><description/></item><item><title>Trendyol Scraper API - Free Credits with Signup</title><link>https://www.scrapingbee.com/scrapers/trendyol-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/trendyol-api/</guid><description/></item><item><title>Trulia Scraper API - Free Signup with Credits</title><link>https://www.scrapingbee.com/scrapers/trulia-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/trulia-api/</guid><description/></item><item><title>Tumblr Scraper API - Free Signup Credits &amp; Simplicity</title><link>https://www.scrapingbee.com/scrapers/tumblr-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/tumblr-api/</guid><description/></item><item><title>Udemy Scraper API - Simple Start &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/udemy-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/udemy-scraper-api/</guid><description/></item><item><title>Unsplash Scraper API - Simple Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/unsplash-scraper-api-key/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/unsplash-scraper-api-key/</guid><description/></item><item><title>Upwork Scraper - Quick Integration, Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/upwork-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/upwork-api/</guid><description/></item><item><title>Viator Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/viator-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/viator-scraper-api/</guid><description/></item><item><title>Wall Street Journal Scraper API - Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/wsj-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/wsj-api/</guid><description/></item><item><title>Walmart API</title><link>https://www.scrapingbee.com/documentation/walmart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/documentation/walmart/</guid><description>&lt;p>Our Walmart API allows you to scrape Walmart search results and product details in realtime.&lt;/p>
&lt;p>We provide two endpoints:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Search endpoint&lt;/strong> (&lt;code>/api/v1/walmart/search&lt;/code>) - Fetch Walmart search results&lt;/li>
&lt;li>&lt;strong>Product endpoint&lt;/strong> (&lt;code>/api/v1/walmart/product&lt;/code>) - Fetch structured Walmart product details&lt;/li>
&lt;/ul>
&lt;div class="doc-row">
&lt;div class="doc-full">
&lt;h2 id="walmart-search-api">Walmart Search API&lt;/h2>
&lt;h3 id="quick-start">Quick start&lt;/h3>
&lt;p>To scrape Walmart search results, you only need two things:&lt;/p>
&lt;ul>
&lt;li>your API key, available &lt;a href="https://app.scrapingbee.com/account/manage/api_key" >here&lt;/a>&lt;/li>
&lt;li>a search query (&lt;a href="#query" >learn more about search query&lt;/a>)&lt;/li>
&lt;/ul>
&lt;p>Then, simply do this.&lt;/p>


&lt;div class="p-1 rounded mb-6 bg-[#F4F0F0] border border-[#1A1414]/10 text-[16px] leading-[1.50]" data-tabs-id="a83016e89cb750e987bf794d3d5c9fd2">

 &lt;div class="md:pl-[30px] xl:pl-[32px] flex items-center justify-end gap-3 py-[10px] px-[17px]" x-data="{ 
 open: false, 
 selectedLibrary: 'python-a83016e89cb750e987bf794d3d5c9fd2',
 libraries: [
 { name: 'Python', value: 'python-a83016e89cb750e987bf794d3d5c9fd2', icon: '/images/icons/icon-python.svg', width: 32, height: 32 },
 { name: 'cURL', value: 'curl-a83016e89cb750e987bf794d3d5c9fd2', icon: '/images/icons/icon-curl.svg', width: 48, height: 32 },
 { name: 'NodeJS', value: 'node-a83016e89cb750e987bf794d3d5c9fd2', icon: '/images/icons/icon-node.svg', width: 26, height: 26 },
 { name: 'Java', value: 'java-a83016e89cb750e987bf794d3d5c9fd2', icon: '/images/icons/icon-java.svg', width: 32, height: 32 },
 { name: 'Ruby', value: 'ruby-a83016e89cb750e987bf794d3d5c9fd2', icon: '/images/icons/icon-ruby.svg', width: 32, height: 32 },
 { name: 'PHP', value: 'php-a83016e89cb750e987bf794d3d5c9fd2', icon: '/images/icons/icon-php.svg', width: 32, height: 32 },
 { name: 'Go', value: 'go-a83016e89cb750e987bf794d3d5c9fd2', icon: '/images/icons/icon-go.svg', width: 32, height: 32 }
 ],
 selectLibrary(value, isGlobal = false) {
 this.selectedLibrary = value;
 this.open = false;
 // Trigger tab switching for this specific instance
 // Use Alpine's $el to find the container
 const container = $el.closest('[data-tabs-id]');
 if (container) {
 container.querySelectorAll('.nice-tab-content').forEach(tab => {
 tab.classList.remove('active');
 });
 const selectedTab = container.querySelector('#' + value);
 if (selectedTab) {
 selectedTab.classList.add('active');
 }
 }
 // Individual snippet selectors should NOT trigger global changes
 // Only the global selector at the top should change all snippets
 },
 getSelectedLibrary() {
 return this.libraries.find(lib => lib.value === this.selectedLibrary) || this.libraries[0];
 },
 init() {
 // Listen for global language changes
 window.addEventListener('languageChanged', (e) => {
 const globalLang = e.detail.language;
 const matchingLib = this.libraries.find(lib => lib.value.startsWith(globalLang + '-'));
 if (matchingLib) {
 this.selectLibrary(matchingLib.value, true);
 }
 });
 // Initialize from global state if available
 const globalLang = window.globalSelectedLanguage || 'python';
 const matchingLib = this.libraries.find(lib => lib.value.startsWith(globalLang + '-'));
 if (matchingLib &amp;&amp; matchingLib.value !== this.selectedLibrary) {
 this.selectLibrary(matchingLib.value, true);
 }
 }
 }" x-on:click.away="open = false" x-init="init()">
 &lt;div class="relative">
 
 &lt;button 
 @click="open = !open"
 type="button"
 class="flex justify-between items-center px-2 py-1.5 bg-white rounded-md border border-[#1A1414]/10 transition-colors hover:bg-gray-50 focus:outline-none min-w-[180px] shadow-sm"
 >
 &lt;div class="flex gap-2 items-center">
 &lt;img 
 :src="getSelectedLibrary().icon" 
 :alt="getSelectedLibrary().name"
 :width="20"
 :height="20"
 class="flex-shrink-0 w-5 h-5"
 />
 &lt;span class="text-black-100 font-medium text-[14px]">
 &lt;span x-text="getSelectedLibrary().name">&lt;/span>
 &lt;/span>
 &lt;/div>
 &lt;svg 
 class="w-3.5 h-3.5 text-gray-400 transition-transform duration-200" 
 :class="{ 'rotate-180': open }"
 fill="none" 
 stroke="currentColor" 
 viewBox="0 0 24 24"
 >
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7">&lt;/path>
 &lt;/svg>
 &lt;/button>
 
 
 &lt;div 
 x-show="open"
 x-transition:enter="transition ease-out duration-200"
 x-transition:enter-start="opacity-0 translate-y-1"
 x-transition:enter-end="opacity-100 translate-y-0"
 x-transition:leave="transition ease-in duration-150"
 x-transition:leave-start="opacity-100 translate-y-0"
 x-transition:leave-end="opacity-0 translate-y-1"
 class="overflow-auto absolute left-0 top-full z-50 mt-1 w-full max-h-[300px] bg-white rounded-md border border-[#1A1414]/10 shadow-lg focus:outline-none"
 style="display: none;"
 >
 &lt;ul class="py-1">
 &lt;template x-for="library in libraries" :key="library.value">
 &lt;li>
 &lt;button
 @click="selectLibrary(library.value)"
 type="button"
 class="flex gap-2 items-center px-2 py-1.5 w-full transition-colors hover:bg-gray-50"
 :class="{ 'bg-yellow-50': selectedLibrary === library.value }"
 >
 &lt;img 
 :src="library.icon" 
 :alt="library.name"
 :width="20"
 :height="20"
 class="flex-shrink-0 w-5 h-5"
 />
 &lt;span class="text-black-100 text-[14px]" x-text="library.name">&lt;/span>
 &lt;span x-show="selectedLibrary === library.value" class="ml-auto text-yellow-400">
 &lt;svg class="w-3.5 h-3.5" fill="currentColor" viewBox="0 0 20 20">
 &lt;path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd">&lt;/path>
 &lt;/svg>
 &lt;/span>
 &lt;/button>
 &lt;/li>
 &lt;/template>
 &lt;/ul>
 &lt;/div>
 &lt;/div>
 &lt;div class="flex items-center">
 &lt;span data-seed="a83016e89cb750e987bf794d3d5c9fd2" class="snippet-copy cursor-pointer flex items-center gap-1.5 px-2.5 py-1.5 text-sm text-black-100 rounded-md border border-[#1A1414]/10 bg-white hover:bg-gray-50 transition-colors" title="Copy to clipboard!">
 &lt;span class="icon-copy02 leading-none text-[14px]">&lt;/span>
 &lt;span class="text-[14px]">Copy&lt;/span>
 &lt;/span>
 &lt;/div>
 &lt;/div>

 &lt;div class="bg-[#30302F] rounded-md font-light !font-ibmplex">
 &lt;div id="curl-a83016e89cb750e987bf794d3d5c9fd2"class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-bash">curl "https://app.scrapingbee.com/api/v1/walmart/search?api_key=YOUR-API-KEY&amp;query=iphone"&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="python-a83016e89cb750e987bf794d3d5c9fd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content active">
 &lt;pre>&lt;code class="language-python"># Install the Python Requests library:
# `pip install requests`
import requests

def send_request():
 response = requests.get(
 url="https://app.scrapingbee.com/api/v1/walmart/search",
 params={
 "api_key": "YOUR-API-KEY",
 "query": "iphone",
 },

 )
 print('Response HTTP Status Code: ', response.status_code)
 print('Response HTTP Response Body: ', response.content)
send_request()&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="node-a83016e89cb750e987bf794d3d5c9fd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-javascript">// request Axios
const axios = require('axios');

axios.get('https://app.scrapingbee.com/api/v1/walmart/search', {
 params: {
 'api_key': 'YOUR-API-KEY',
 'query': 'iphone',
 }
}).then(function (response) {
 // handle success
 console.log(response);
})&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="java-a83016e89cb750e987bf794d3d5c9fd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-java">import java.io.IOException;
import org.apache.http.client.fluent.*;

public class SendRequest
{
 public static void main(String[] args) {
 sendRequest();
 }

 private static void sendRequest() {

 // Classic (GET )

 try {

 // Create request
 Content content = Request.Get("https://app.scrapingbee.com/api/v1/walmart/search?api_key=YOUR-API-KEY&amp;query=iphone")



 // Fetch request and return content
 .execute().returnContent();

 // Print content
 System.out.println(content);
 }
 catch (IOException e) { System.out.println(e); }
 }
}&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="ruby-a83016e89cb750e987bf794d3d5c9fd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-ruby">require 'net/http'
require 'net/https'

# Classic (GET )
def send_request
 uri = URI('https://app.scrapingbee.com/api/v1/walmart/search?api_key=YOUR-API-KEY&amp;query=iphone')

 # Create client
 http = Net::HTTP.new(uri.host, uri.port)
 http.use_ssl = true
 http.verify_mode = OpenSSL::SSL::VERIFY_PEER

 # Create Request
 req = Net::HTTP::Get.new(uri)

 # Fetch Request
 res = http.request(req)
 puts "Response HTTP Status Code: #{ res.code }"
 puts "Response HTTP Response Body: #{ res.body }"
rescue StandardError => e
 puts "HTTP Request failed (#{ e.message })"
end

send_request()&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="php-a83016e89cb750e987bf794d3d5c9fd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-php">&amp;lt;?php

// get cURL resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, 'https://app.scrapingbee.com/api/v1/walmart/search?api_key=YOUR-API-KEY&amp;query=iphone');

// set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');

// return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);



// send the request and save response to $response
$response = curl_exec($ch);

// stop if fails
if (!$response) {
 die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
}

echo 'HTTP Status Code: ' . curl_getinfo($ch, CURLINFO_HTTP_CODE) . PHP_EOL;
echo 'Response Body: ' . $response . PHP_EOL;

// close curl resource to free up system resources
curl_close($ch);

?&amp;gt;&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;div id="go-a83016e89cb750e987bf794d3d5c9fd2" class="text-gray-100 text-[12px] leading-[1.54] nice-tab-content">
 &lt;pre>&lt;code class="language-go">package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func sendClassic() {
	// Create client
	client := &amp;http.Client{}

	// Create request
	req, err := http.NewRequest("GET", "https://app.scrapingbee.com/api/v1/walmart/search?api_key=YOUR-API-KEY&amp;query=iphone", nil)


	parseFormErr := req.ParseForm()
	if parseFormErr != nil {
		fmt.Println(parseFormErr)
	}

	// Fetch Request
	resp, err := client.Do(req)

	if err != nil {
		fmt.Println("Failure : ", err)
	}

	// Read Response Body
	respBody, _ := ioutil.ReadAll(resp.Body)

	// Display Results
	fmt.Println("response Status : ", resp.Status)
	fmt.Println("response Headers : ", resp.Header)
	fmt.Println("response Body : ", string(respBody))
}

func main() {
 sendClassic()
}&lt;/code>&lt;/pre>
 &lt;/div>
 &lt;/div>
&lt;/div>

&lt;p>Here is a breakdown of all the parameters you can use with the Walmart Search API:&lt;/p></description></item><item><title>Walmart API</title><link>https://www.scrapingbee.com/features/walmart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/walmart/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Access Walmart\u0027s massive product data catalog with our reliable scraping API. Get pricing, descriptions, and product details with a single API call.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "154",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 &lt;h1 class="mb-[14px]">Walmart API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Access Walmart&amp;#39;s massive product data catalog with our reliable scraping API. Get pricing, descriptions, and product details with a single API call.&lt;/p></description></item><item><title>Walmart Scraping API</title><link>https://www.scrapingbee.com/scrapers/walmart-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/walmart-scraper-api/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Access Walmart\u0027s massive product data catalog with our reliable scraping API. Get pricing, descriptions, and product details with a single API call.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "38",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 pb-[50px] sm:pb-[100px] md:mb-[170px]">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 
 
 
&lt;nav aria-label="Breadcrumb" class="text-[14px] text-black mb-[20px] flex items-center">
 &lt;ol class="flex items-center" itemscope itemtype="https://schema.org/BreadcrumbList">
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Home&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="1" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;a href="https://www.scrapingbee.com/scrapers/" class="text-black no-underline" itemprop="item">
 &lt;span itemprop="name">Scrapers&lt;/span>
 &lt;/a>
 &lt;meta itemprop="position" content="2" />
 &lt;/li>
 &lt;svg width="14" height="14" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="none" class="mx-[10px] flex-shrink-0">
 &lt;path d="M9 6L15 12L9 18" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
 &lt;/svg>
 &lt;li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
 &lt;span class="text-blue-600 font-medium" itemprop="name">
 Walmart Scraping API
 &lt;/span>
 &lt;meta itemprop="position" content="3" />
 &lt;/li>
 &lt;/ol>
&lt;/nav>

 
 
 &lt;h1 class="mb-[14px]">Walmart Scraping API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Access Walmart&amp;#39;s massive product data catalog with our reliable scraping API. Get pricing, descriptions, and product details with a single API call.&lt;/p></description></item><item><title>Washington Post Scraper API - Easy Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/washington-post-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/washington-post-scraper-api/</guid><description/></item><item><title>Wayback Machine Scraper - Free Signup Credits Available</title><link>https://www.scrapingbee.com/scrapers/wayback-machine-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/wayback-machine-api/</guid><description/></item><item><title>Wayfair Scraper API - Signup for Free Credits</title><link>https://www.scrapingbee.com/scrapers/wayfair-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/wayfair-api/</guid><description/></item><item><title>Web Scraping Financial Data - Simple Sign Up Credits</title><link>https://www.scrapingbee.com/scrapers/financial-data-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/financial-data-api/</guid><description/></item><item><title>Web Scraping Real Estate Data - Effortless Signup Credits</title><link>https://www.scrapingbee.com/scrapers/real-estate-data-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/real-estate-data-api/</guid><description/></item><item><title>Webmotors Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/webmotors-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/webmotors-api/</guid><description/></item><item><title>WebScraper.io alternative for web scraping?</title><link>https://www.scrapingbee.com/webscraper-io-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/webscraper-io-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">WebScraper.io alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to WebScraper.io. Web scraping should be intuitive and affordable. If you&amp;#39;re facing limitations, there are better alternatives to consider.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Scraping should be flexible, not restricted by templates.&lt;/h3>
 &lt;p>WebScraper.io offers visual scraping, but we give you API-first flexibility that scales better.&lt;/p></description></item><item><title>Website Image Scraper API - Free Credits Signup</title><link>https://www.scrapingbee.com/scrapers/website-image-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/website-image-api/</guid><description/></item><item><title>Whop Scraper API - Easy Start &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/whop-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/whop-scraper-api/</guid><description/></item><item><title>Wikipedia Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/wikipedia-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/wikipedia-api/</guid><description/></item><item><title>Woocommerce Scraper API - Easy Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/woocommerce-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/woocommerce-scraper-api/</guid><description/></item><item><title>Xing Scraper API - Free Signup Credits Available</title><link>https://www.scrapingbee.com/scrapers/xing-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/xing-api/</guid><description/></item><item><title>Yad2 Scraper API - Free Signup Credits Available</title><link>https://www.scrapingbee.com/scrapers/yad2-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yad2-api/</guid><description/></item><item><title>Yahoo Search Scraper API - Free Credits &amp; Simplified Start</title><link>https://www.scrapingbee.com/scrapers/yahoo-search-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yahoo-search-api/</guid><description/></item><item><title>Yahoo! Ads Scraper API - Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/yahoo-ads-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yahoo-ads-api/</guid><description/></item><item><title>Yahoo! Finance Scraper API - Simple Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/yahoo-finance-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yahoo-finance-scraper-api/</guid><description/></item><item><title>Yahoo! Images Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/yahoo-images-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yahoo-images-api/</guid><description/></item><item><title>Yahoo! Questions Scraper API - Get Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/yahoo-related-questions-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yahoo-related-questions-api/</guid><description/></item><item><title>Yandex Reverse Image Scraper API - Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/yandex-reverse-image-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yandex-reverse-image-api/</guid><description/></item><item><title>Yandex Scraper API - Free Credits with Simple Signup</title><link>https://www.scrapingbee.com/scrapers/yandex-images-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yandex-images-api/</guid><description/></item><item><title>Yandex Search Scraper API - Free Signup &amp; Effortless Integration</title><link>https://www.scrapingbee.com/scrapers/yandex-search-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yandex-search-api/</guid><description/></item><item><title>Yellow Pages Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/yellow-pages-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/yellow-pages-scraper-api/</guid><description/></item><item><title>YouTube Ad Results Scraper API - Get Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/youtube-ad-results-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/youtube-ad-results-api/</guid><description/></item><item><title>YouTube API</title><link>https://www.scrapingbee.com/documentation/youtube/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/documentation/youtube/</guid><description>&lt;p>Our YouTube API allows you to scrape YouTube search results, video metadata, transcripts, and trainability information in realtime.&lt;/p>
&lt;p>We provide four endpoints:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Search endpoint&lt;/strong> (&lt;code>/api/v1/youtube/search&lt;/code>) - Fetch YouTube search results&lt;/li>
&lt;li>&lt;strong>Metadata endpoint&lt;/strong> (&lt;code>/api/v1/youtube/metadata&lt;/code>) - Fetch structured YouTube video metadata&lt;/li>
&lt;li>&lt;strong>Transcript endpoint&lt;/strong> (&lt;code>/api/v1/youtube/transcript&lt;/code>) - Fetch YouTube video transcripts&lt;/li>
&lt;li>&lt;strong>Trainability endpoint&lt;/strong> (&lt;code>/api/v1/youtube/trainability&lt;/code>) - Check video transcript availability&lt;/li>
&lt;/ul>
&lt;div class="doc-row">
&lt;div class="doc-full">
&lt;h2 id="youtube-search-api">YouTube Search API&lt;/h2>
&lt;h3 id="quick-start">Quick start&lt;/h3>
&lt;p>To scrape YouTube search results, you only need two things:&lt;/p></description></item><item><title>YouTube API</title><link>https://www.scrapingbee.com/features/youtube/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/features/youtube/</guid><description>&lt;p>&lt;script type="application/ld+json">
 {
 "@context": "https://schema.org",
 "@type": "Product",
 "name": "ScrapingBee",
 "brand": {
 "@type": "Brand",
 "name": "ScrapingBee"
 },
 "description": "Scrape YouTube search results, video metadata, transcripts, and trainability information in real-time with structured JSON output.",
 "aggregateRating": {
 "@type": "AggregateRating",
 "ratingValue": "4.9",
 "reviewCount": "154",
 "bestRating": 5
 }
 }
&lt;/script>
&lt;section class="bg-skew-yellow-b pt-[100px] sm:pt-[100px] md:pt-[156px] mb-[120px] relative z-1 ">
 &lt;div class="container">
 &lt;div class="flex flex-wrap items-center -mx-[15px]">
 &lt;div class="w-full sm:w-1/2 px-[15px]">
 &lt;div class="max-w-[542px] leading-[1.77]">
 &lt;h1 class="mb-[14px]">YouTube API&lt;/h1>
 &lt;p class="mb-[36px] text-[20px]">Scrape YouTube search results, video metadata, transcripts, and trainability information in real-time with structured JSON output.&lt;/p></description></item><item><title>Youtube Comment Scraper API - Simple Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/youtube-comment-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/youtube-comment-scraper-api/</guid><description/></item><item><title>Youtube Email Scraper API - Easy Start &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/youtube-email-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/youtube-email-scraper-api/</guid><description/></item><item><title>YouTube Search Scraper API - Simplicity &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/youtube-search-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/youtube-search-api/</guid><description/></item><item><title>YouTube Shorts Scraper API - Simple Signup Credits Free</title><link>https://www.scrapingbee.com/scrapers/youtube-shorts-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/youtube-shorts-api/</guid><description/></item><item><title>Youtube Title Scraper API - Easy Access &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/youtube-title-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/youtube-title-scraper-api/</guid><description/></item><item><title>Youtube Transcript Scraper API - Easy Signup &amp; Free Credits</title><link>https://www.scrapingbee.com/scrapers/youtube-transcript-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/youtube-transcript-scraper-api/</guid><description/></item><item><title>Youtube Video Scraper API - Simple Use &amp; Free Signup Credits</title><link>https://www.scrapingbee.com/scrapers/youtube-video-scraper-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/youtube-video-scraper-api/</guid><description/></item><item><title>Zara Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/zara-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/zara-api/</guid><description/></item><item><title>ZenRows alternative for web scraping?</title><link>https://www.scrapingbee.com/zenrows-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/zenrows-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">ZenRows alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to ZenRows. Not all scraping APIs are created equal. Here&amp;#39;s how the alternatives compare.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">No locked features. No asterisks.&lt;/h3>
 &lt;p>ZenRows offers solid scraping features, but limits access to key capabilities unless you pay more. We don't do that.&lt;/p></description></item><item><title>Zenscrape alternative for web scraping?</title><link>https://www.scrapingbee.com/zenscrape-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/zenscrape-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Zenscrape alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Zenscrape. Need scraping that’s simple, fast, and cost-effective? Check out alternatives that deliver better value and performance.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">Not just scraping—smart, efficient data extraction.&lt;/h3>
 &lt;p>Zenscrape offers scraping but limits key features unless you pay extra. We make all features available without the need for upgrades.&lt;/p></description></item><item><title>Zillow Scraper API - Free Signup Credits Provided</title><link>https://www.scrapingbee.com/scrapers/zillow-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/zillow-api/</guid><description/></item><item><title>Zomato Web Scraper - Simplified Signup + Free Credits</title><link>https://www.scrapingbee.com/scrapers/zomato-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/zomato-api/</guid><description/></item><item><title>ZoomInfo Scraper API - Sign Up for Free Credits</title><link>https://www.scrapingbee.com/scrapers/zoominfo-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/zoominfo-api/</guid><description/></item><item><title>Zoopla Scraper API - Free Credits on Signup</title><link>https://www.scrapingbee.com/scrapers/zoopla-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/scrapers/zoopla-api/</guid><description/></item><item><title>Zyte API alternative for web scraping?</title><link>https://www.scrapingbee.com/zyte-api-alternative/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.scrapingbee.com/zyte-api-alternative/</guid><description>&lt;p>&lt;section class="bg-yellow-100 py-[100px] md:pt-[220px] md:pb-[20px] mb-[80px] relative z-1">
 &lt;div class="container">
 &lt;div class="max-w-[1024px] mx-auto text-center">
 &lt;h1 class="mb-[14px]">Zyte API alternative for web scraping?&lt;/h1>
 &lt;p class="mb-[32px]">ScrapingBee is a better alternative to Zyte API. Your web scraping solution doesn’t have to be overpriced or complicated—there are simpler and more affordable alternatives.&lt;/p>
 &lt;div class="flex flex-wrap items-center justify-center mb-[33px]">
 &lt;div class="flex flex-col items-start gap-[20px]">
 &lt;a href="https://app.scrapingbee.com/account/register" class="btn px-[39px] mr-[20px]">Try ScrapingBee for Free&lt;/a>
 &lt;div class="flex items-center">
 &lt;a href="https://www.capterra.com/p/195060/ScrapingBee/" target="_blank" class="inline-block"> &lt;img border="0" class="h-[40px] mr-[10px] -ml-[9px]" src="https://brand-assets.capterra.com/badge/8898153e-408a-4cdb-9477-bda37032c670.svg" /> &lt;/a>
 &lt;span class="text-[18px] mr-[10px]">based on 100+ reviews.&lt;/span>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
 &lt;/div>
&lt;/section>

&lt;section class="pt-[50px] sm:pt-101 pb-[50px] sm:pb-[70px] md:pb-[82px]">
 &lt;div class="container max-w-[894px] w-full flex flex-wrap">

 &lt;blockquote class="p-[38px] bg-gray-900 rounded-2xl m-[0] text-black-100 leading-[1.55]">
 &lt;q class="block mb-[35px] text-[24px]">ScrapingBee &lt;strong>clear documentation, easy-to-use API, and great success rate&lt;/strong> made it a no-brainer.&lt;/q>
 &lt;cite class="avatar flex items-center not-italic">
 
 &lt;span class="w-[56px] h-[56px] rounded-full overflow-hidden bg-gray-1000 mr-[24px]">
 &lt;img height="56" width="56" src="https://www.scrapingbee.com/images/testimonials/dominic.jpeg" alt="Dominic Phillips">
 &lt;/span>
 
 &lt;span>
 &lt;strong class="text-[18px] font-bold block mb-[4px]">Dominic Phillips
 
 &lt;/strong>
 
 &lt;span class="text-[15px] block">Co-Founder @ &lt;a href="https://codesubmit.io" class="font-bold underline hover:no-underline" target="_blank">CodeSubmit&lt;/a>&lt;/span>
 
 &lt;/span>
 &lt;/cite>
 &lt;/blockquote>
 &lt;/div>
&lt;/section>

&lt;section class="py-[50px] sm:py-[60px] md:py-[80px] text-gray-200 text-[16px] leading-[1.50]">
 &lt;div class="container max-w-[1292px]">
 &lt;div class="flex flex-wrap -mx-[23px]">
 &lt;div class="w-full md:w-[500px] lg:w-[608px] px-[23px]">
 &lt;div class="pr-[20px]">
 &lt;div class="mb-[48px]">
 &lt;h3 class="text-black-100 mb-[8px]">No complexity, no unnecessary costs—just efficient web scraping.&lt;/h3>
 &lt;p>Zyte API provides a lot of power but comes with added complexity and high costs. We provide all the same features with simpler, more affordable plans.&lt;/p></description></item></channel></rss>