<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Surfsky</title>
    <description>The latest articles on DEV Community by Surfsky (@surfsky).</description>
    <link>https://dev.to/surfsky</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1153095%2Fffe5a68d-d0bd-4930-8371-533ddcde93de.jpg</url>
      <title>DEV Community: Surfsky</title>
      <link>https://dev.to/surfsky</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/surfsky"/>
    <language>en</language>
    <item>
      <title>How to set up fast mass parsing of prices on Amazon bypassing its anti-bot system</title>
      <dc:creator>Surfsky</dc:creator>
      <pubDate>Wed, 13 Mar 2024 13:53:34 +0000</pubDate>
      <link>https://dev.to/surfsky/how-to-set-up-fast-mass-parsing-of-prices-on-amazon-bypassing-its-anti-bot-system-1adl</link>
      <guid>https://dev.to/surfsky/how-to-set-up-fast-mass-parsing-of-prices-on-amazon-bypassing-its-anti-bot-system-1adl</guid>
      <description>&lt;p&gt;Hello, this is Pavel from the Surfsky team. While working on the project, I learned about several very common cases in which developers face bans and blocks and cannot bypass them using standard tools like undetected-chromedriver, Puppeteer, or Selenium. If you've tried everything, but the results still leave a lot of room for improvement, read on.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: we solved the problem of slow and inefficient parsing of Amazon using our own service, but this article also describes general principles of how anti-bots work, which will be useful when using other tools too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Part 1. The problem: data is not being properly collected
&lt;/h2&gt;

&lt;p&gt;A major seller of electronics on Amazon faced difficulties in obtaining up-to-date product information. The company that supplied them with data was constantly late and provided incomplete data. They argued that Amazon had improved its anti-bot systems, and now the complexity of web data parsing has significantly increased. As a result, the customer started losing up to 15% of profits compared to previous periods.&lt;/p&gt;

&lt;p&gt;The tasks that the client wanted to solve were as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get data about products and price dynamics from the keepa.com price tracker.&lt;/li&gt;
&lt;li&gt;Select the most relevant products and start tracking them, monitoring changes in price, discounts, ratings, and number of reviews. The number of analyzed products was just over 80,000.&lt;/li&gt;
&lt;li&gt;Web parsing of extended product information: detailed product descriptions, user reviews, visual materials, photos and videos, and a list of competitors.&lt;/li&gt;
&lt;li&gt;Data analysis and processing: calculation and visualization of statistical indicators, generation of reports, and application of statistical price prediction models for future periods.&lt;/li&gt;
&lt;li&gt;Business decision-making: based on the obtained data, perform listing optimization, plan promotions and discounts, and make decisions on purchasing new products.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Part 2. Audit and problem analysis
&lt;/h2&gt;

&lt;p&gt;The client's requirements were as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parsing prices of &lt;strong&gt;80,000 products daily&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Providing a fresh dataset &lt;strong&gt;daily by 15:00 UTC&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The data must be &lt;strong&gt;consistent and in sufficient volume&lt;/strong&gt;, without gaps, errors, and inaccuracies.&lt;/li&gt;
&lt;li&gt;The data collection process must &lt;strong&gt;be controllable and predictable&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;client requested help with integrating the solution&lt;/strong&gt; into their technology stack, as well as competent and prompt technical support.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since we have already worked with Amazon, we knew in advance where to start and how to optimally solve these tasks. Traditional parsing methods are insufficient to deal with the constantly changing protection and bot recognition algorithms used by Amazon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does Amazon (among others) detect automation?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network level.&lt;/strong&gt; Amazon analyzes network requests, spam score of the IP address, and packet headers. Here, the type of proxies being used, their quality, and their correct application and rotation are crucially important: we need to ensure their effective use and prevent overspending.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browser fingerprinting.&lt;/strong&gt; This is a method for collecting information about the browser and device being used, based on which a device fingerprint is created, which includes: browser type, version, and languages; screen resolution; window size; Canvas; WebGL; fonts; audio, and much more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Emulating user actions.&lt;/strong&gt; Amazon uses an anti-bot system to analyze user actions and tries to block bots. To bypass it, it is necessary to emulate actions of real users: delays, imitation of cursor movements, rhythmic keystrokes, random pauses, and irregular behavior patterns.&lt;/p&gt;

&lt;p&gt;Specific measures must be taken at each of these levels to prevent anti-bot systems from identifying automation. A satisfactory result can be achieved in several ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use your own custom solutions and maintain their infrastructure on your own;&lt;/li&gt;
&lt;li&gt;Use paid-for services like Apify, Scrapingbee, Browserless.&lt;/li&gt;
&lt;li&gt;Combine high-quality proxies, captcha solvers, and multi-accounting browsers;&lt;/li&gt;
&lt;li&gt;Use standard browsers in headless mode with anti-detection patches.&lt;/li&gt;
&lt;li&gt;Other options of varying complexity are also available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why did we use our own solution, Surfsky?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At the network level, Surfsky uses high-quality residential and mobile proxies from various geolocations and subnets. In each case, we analyze which proxies are more suitable for the task at hand and provide customization options for each client. On our servers, the network level is integrated natively and allows us to avoid leaks, through which Amazon might learn the real IP address and detect spoofing.&lt;/p&gt;

&lt;p&gt;Surfsky uses only real browser fingerprints collected from actual user devices. Currently, there are more than 10,000 of them and they are constantly updated. Moreover, spoofing is performed at the lowest possible level of the browser kernel.&lt;/p&gt;

&lt;p&gt;If you also would like to start using Surfsky, go to our &lt;a href="https://surfsky.io/"&gt;website&lt;/a&gt; and order a demo. If you've read up to this point, then our service can definitely solve the problems you might be facing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 3: Finding a Solution
&lt;/h2&gt;

&lt;p&gt;First, we developed a proof-of-concept: scripts that launch our browser in multi-threaded mode to parse data from product pages. Let’s recall that our client needs to collect data on 80,000 products per day, which is &lt;strong&gt;about 3,400 targeted requests per hour&lt;/strong&gt;. During the development phase, we always plan for the possibility of an increase in request volume, so we account for at least a 10% increase. Thus, our solution must be scalable to at least 88,000 products per day. To deliver collected data to the client by 15:00 UTC daily, we need to have at least 4 hours of buffer time. We calculated a minimum of 88,000/20 = &lt;strong&gt;4,400 requests per hour&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Next, our task was to find the optimal number of requests processed in our cloud cluster. We allocated and reserved a pool of residential proxies (mix worldwide). Instead of average values, we use percentiles for more accurate calculations. A product page in the 95th percentile takes up ~8-10 MB. The full page load time through a proxy is 6 seconds. Parsing and saving data to the database take 2 seconds.&lt;/p&gt;

&lt;p&gt;All in all, we have 20 hours of time available daily to collect data covering at least 88,000 products. Thus, &lt;strong&gt;a minimum of 10 browser instances is required&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Having completed our calculations, we launched a series of proof-of-concept tests for 8 hours to collect detailed statistics. It turned out that about 20% of requests returned a captcha. To solve this, we emulated user actions, including realistic cursor movements and page scrolling. We also connected automatic captcha recognition, after which we ran our tests again. As a result, &lt;strong&gt;the request time increased from 8 to 21 seconds&lt;/strong&gt;, but we reduced the number of erroneous responses, which gives us a more stable and predictable result in the long term. Thus, we increased &lt;strong&gt;the number of browser instances from 10 to 27&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 4: Integration
&lt;/h2&gt;

&lt;p&gt;This is the shortest part: after developing our technical solution, we focused on its integration into the client's infrastructure. Throughout the integration, we provided constant support to the client. The entire process took 12 days, 4 of which were spent on auditing and developing the optimal solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using &lt;a href="https://surfsky.io/"&gt;Surfsky&lt;/a&gt; allowed us to solve the client's problems: we were able to obtain accurate data on time. The cost of support decreased, and the overall efficiency of the client's operations improved.&lt;/p&gt;

&lt;p&gt;Using anti-detection technologies has become a must for web browser automation tasks. This is because anti-bot systems are continuously improving, getting better every year at identifying automated behavior and browser characteristics. Anti-bots use algorithms and behavioral pattern analysis, and bypassing them is becoming increasingly difficult.&lt;/p&gt;

&lt;p&gt;At Surfsky, we have created and continuously maintain the most up-to-date and powerful solution for web automation. For this, we use a multi-accounting anti-detect browser and all currently available cutting-edge tools to counteract all attempts at identifying browser automation. Our approach allows our users to bypass complex anti-bot systems while maintaining a high degree of anonymity and security.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>database</category>
      <category>python</category>
    </item>
    <item>
      <title>Surfsky 0.6.2: Alpha testing completed, CAPTCHA solver implemented, performance enhanced</title>
      <dc:creator>Surfsky</dc:creator>
      <pubDate>Thu, 15 Feb 2024 12:02:06 +0000</pubDate>
      <link>https://dev.to/surfsky/surfsky-062-alpha-testing-completed-captcha-solver-implemented-performance-enhanced-21lo</link>
      <guid>https://dev.to/surfsky/surfsky-062-alpha-testing-completed-captcha-solver-implemented-performance-enhanced-21lo</guid>
      <description>&lt;p&gt;We've made many updates to Surfsky recently, but the biggest news is that we're done with alpha testing and ready for our first customers! To start using Surfsky, simply &lt;a href="https://surfsky.io/request-demo"&gt;request a demo&lt;/a&gt; or reach out via our &lt;a href="https://surfsky.io/contact-us"&gt;contact form&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here's a quick summary of the latest key updates in Surfsky version 0.6.2:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updated the browser kernel to 121.4. We keep the kernel up-to-date and do not lag behind the official Chrome release schedule, blending in with the crowd of regular users of this browser.&lt;/li&gt;
&lt;li&gt;We've created a feature that can solve Cloudflare Turnstile, hCaptcha, and reCAPTCHA v2/v3/enterprise. At present, this tool can be utilized in client code. Soon, we'll upgrade it to solve these automatically on our server.&lt;/li&gt;
&lt;li&gt;Browser starts up faster now. We've improved how it scales.&lt;/li&gt;
&lt;li&gt;Added a graceful browser closure, which involves sending closure signals to APIs and processes so they can complete their work correctly, close connections, and free up resources before fully closing the instance.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webscraping</category>
      <category>browser</category>
      <category>python</category>
      <category>startup</category>
    </item>
    <item>
      <title>Amazon Scraping Tools: Features Comparison</title>
      <dc:creator>Surfsky</dc:creator>
      <pubDate>Wed, 20 Dec 2023 08:36:45 +0000</pubDate>
      <link>https://dev.to/surfsky/amazon-scraping-tools-features-comparison-18ee</link>
      <guid>https://dev.to/surfsky/amazon-scraping-tools-features-comparison-18ee</guid>
      <description>&lt;p&gt;Collecting data from Amazon can be challenging, especially when it needs to be done regularly and on a large scale. The main issues when working with Amazon include IP address blocks and CAPTCHAs. These problems occur because of the high volume of requests, which are often similar, and inconsistencies in browser fingerprints. To reduce the risk of blocking, users need to experiment with finding unbanned proxies while also avoiding exceeding traffic limits.&lt;/p&gt;

&lt;p&gt;Inconsistent fingerprints can be a problem because Amazon uses different security techniques to detect bots. They analyze browser data and compare it with the user's operating system. Behavioral patterns also matter. It's important to regularly update the automation logic to imitate real users. Managing the entire automation stack involves more than just scripting and running it. It includes automating launch schedules, creating auxiliary subsystems for handling proxies and browser data, and implementing monitoring mechanisms to ensure the system runs smoothly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This article compares Surfsky with other popular browser automation and scraping services:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scrapingbee&lt;/li&gt;
&lt;li&gt;Browserless v.1 (Cloud Subscription)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s evaluate these services based on their performance and features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Price
&lt;/h2&gt;

&lt;p&gt;We will not focus on this because Surfsky is currently in the Alpha stage, so it is not useful to compare it with services that are already on the market. However, let’s mention the pricing of ScrapingBee and Browserless. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ScrapingBee&lt;/th&gt;
&lt;th&gt;Browserless&lt;/th&gt;
&lt;th&gt;Surfsky&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Real price for 1000 requests, $&lt;/td&gt;
&lt;td&gt;$6&lt;/td&gt;
&lt;td&gt;$3.2&lt;/td&gt;
&lt;td&gt;Free now&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Proxies
&lt;/h2&gt;

&lt;p&gt;High-quality proxies are essential for web scraping. Different types of proxies can be useful for solving various problems, so we investigated the available proxy options in the scraping services.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ScrapingBee&lt;/th&gt;
&lt;th&gt;Browserless&lt;/th&gt;
&lt;th&gt;Surfsky&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Proxy rotation&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in residential proxies&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP support&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOCKS5 support&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SSH support&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenVPN support&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Fingerprinting
&lt;/h2&gt;

&lt;p&gt;Purposefully altering the browser fingerprint can help evade anti-bot systems. However, most of the currently available solutions only offer a partial remedy to this problem. For instance, ScrapingBee recommends utilizing the 'Stealth Proxy' feature, which simply falsifies HTTP headers. On the other hand, Browserless employs the open-source library puppeteer-extra-plugin-stealth, but unfortunately, it is ineffective against advanced anti-bot systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic browser fingerprint management&lt;/strong&gt; includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User-agent spoofing;&lt;/li&gt;
&lt;li&gt;Modifying HTTP headers;&lt;/li&gt;
&lt;li&gt;Hiding --enable-automation, --headless flags;&lt;/li&gt;
&lt;li&gt;Overriding API permissions;&lt;/li&gt;
&lt;li&gt;Spoofing navigator, iframe, WebGL, media, window, chrome objects and properties.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is important to note that object modification is performed using JavaScript and can be easily detected. Additionally, in basic techniques, inconsistencies and non-standard property values are often compared against the expected values for the user's browser and operating system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advanced browser fingerprint management&lt;/strong&gt; includes not only basic techniques, but also some more advanced methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebGL Vendor info and image hash;&lt;/li&gt;
&lt;li&gt;Canvas fingerprinting;&lt;/li&gt;
&lt;li&gt;IP, DNS hardening;&lt;/li&gt;
&lt;li&gt;Audio and video fingerprinting;&lt;/li&gt;
&lt;li&gt;WebRTC hardening;&lt;/li&gt;
&lt;li&gt;Font fingerprinting;&lt;/li&gt;
&lt;li&gt;Geolocation API spoofing;&lt;/li&gt;
&lt;li&gt;SSL/TLS fingerprinting;&lt;/li&gt;
&lt;li&gt;HTML5 features spoofing;&lt;/li&gt;
&lt;li&gt;Extended JavaScript Browser information spoofing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is important to note that advanced fingerprinting is implemented differently compared to basic fingerprinting design. Instead of using JavaScript, it is implemented by modifying the browser kernel.&lt;/p&gt;

&lt;p&gt;High-quality and consistent anti-fingerprinting detection measures always include low-level substitutions and real user fingerprints. Surfsky is designed to counter the most complex anti-bot systems.&lt;/p&gt;

&lt;p&gt;Services like PixelScan and CreepJS are designed to detect and highlight inconsistencies in digital fingerprints. We used these services for the test.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ScrapingBee&lt;/th&gt;
&lt;th&gt;Browserless&lt;/th&gt;
&lt;th&gt;Surfsky&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Basic browser fingerprinting&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced browser fingerprinting&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real GPU canvas rendering&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PixelScan passing&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CreepJS passing&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Convenience
&lt;/h2&gt;

&lt;p&gt;It is hard to evaluate such things as convenience, but here are the main aspects we’ve focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support should be available at least in the form of a communication channel with the development team.&lt;/li&gt;
&lt;li&gt;An easy-to-use admin panel should include features such as managing subscriptions and creating requests.&lt;/li&gt;
&lt;li&gt;Easy-to-use documentation should include code examples for a quick start and clear manuals.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ScrapingBee&lt;/th&gt;
&lt;th&gt;Browserless&lt;/th&gt;
&lt;th&gt;Surfsky&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy-to-use admin panel&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Easy-to-use documentation&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;p&gt;Here are other parameters we decided to compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The number of &lt;strong&gt;concurrent requests&lt;/strong&gt; that can be executed per unit of time determines the request limit. If you exceed this limit, services may apply various sanctions such as rate-limiting, returning errors, or blocking access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scaling&lt;/strong&gt; is an indicator of a service's ability to dynamically adjust server capacity, either increasing or decreasing it. The service needs to be able to adapt to the dynamic variation in the number of client requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome Debug Protocol&lt;/strong&gt; is a set of tools and API that allows interacting with the Google Chrome/Chromium browser for debugging and automation purposes, often used for debugging and flexible work with the browser. Its functions are described in the specification here: &lt;a href="https://chromedevtools.github.io/devtools-protocol/"&gt;https://chromedevtools.github.io/devtools-protocol/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The ability to take a &lt;strong&gt;screenshot&lt;/strong&gt; of the page after it has loaded or after other trigger actions.&lt;/li&gt;
&lt;li&gt;Executing &lt;strong&gt;JavaScript scripts&lt;/strong&gt; on a browser page. It can be useful for debugging purposes, monitoring status, ensuring accessibility, and verifying the correct display of page content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profile management&lt;/strong&gt; means being able to save your browser's current state. Imagine you're automating tasks on LinkedIn, which usually requires logged-in accounts to perform actions. If you need to regularly perform actions with these accounts, you'll need a system that can save cookies, local storage, session storage, history, passwords, bookmarks, service workers, and page caches. It can be difficult and time-consuming to develop synchronization for this purpose, especially if the necessary software interface is not available. Surfsky solves this problem by providing auto save and restore browser session functionality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scraping API&lt;/strong&gt; is not strictly necessary, but it is a useful tool that aims to simplify scraping work. It is an API that enables you to perform basic actions with the browser, such as opening a page, retrieving HTML, taking screenshots, and more. This tool can be beneficial when you don't have the opportunity or need to develop a script using browser interaction frameworks.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ScrapingBee&lt;/th&gt;
&lt;th&gt;Browserless&lt;/th&gt;
&lt;th&gt;Surfsky&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Concurrent requests&lt;/td&gt;
&lt;td&gt;200+ on business+ plan&lt;/td&gt;
&lt;td&gt;up to 1000&lt;/td&gt;
&lt;td&gt;unlimited by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scaling&lt;/td&gt;
&lt;td&gt;Upon support request&lt;/td&gt;
&lt;td&gt;Premium subscription&lt;/td&gt;
&lt;td&gt;Infinite by default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chrome Debug Protocol&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screenshot&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JavaScript rendering&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Profile management&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scraping API&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;Here are some of the measurements we used to evaluate the performance of the tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Page load time&lt;/strong&gt;. Consider the operation completed when the ‘DOMContentLoaded’ event is triggered. This benchmark will utilize the built-in proxies provided by the service itself. We'll use Amazon's Today's Deals as an example: &lt;a href="https://www.amazon.com/gp/goldbox"&gt;https://www.amazon.com/gp/goldbox&lt;/a&gt;. The fastest service received 3 points, the second-fastest received 2 points, and the slowest received 1 point.&lt;/li&gt;
&lt;li&gt;Scraping Google SERP (search results for 100 random keywords), Amazon Today's Deals, eBay search results (100 random keywords). In this setup, each participant will start 20 instances simultaneously, and each test will be run 3 times. The fastest service received 3 points, the second-fastest received 2 points, and the slowest received 1 point.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each test will be run 3 times at 1-minute intervals.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;ScrapingBee&lt;/th&gt;
&lt;th&gt;Browserless&lt;/th&gt;
&lt;th&gt;Surfsky&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Page load time (avg)&lt;/td&gt;
&lt;td&gt;6.1 sec&lt;/td&gt;
&lt;td&gt;4.7 sec&lt;/td&gt;
&lt;td&gt;3.4 sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google SERP (avg)&lt;/td&gt;
&lt;td&gt;1.79 page/sec&lt;/td&gt;
&lt;td&gt;0.95 page/sec&lt;/td&gt;
&lt;td&gt;2.71 page/sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amazon today’s deals (avg)&lt;/td&gt;
&lt;td&gt;1.18 page/sec&lt;/td&gt;
&lt;td&gt;0.97 page/sec&lt;/td&gt;
&lt;td&gt;3.32 page/sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ebay search results&lt;/td&gt;
&lt;td&gt;1.15 page/sec&lt;/td&gt;
&lt;td&gt;0.78 page/sec&lt;/td&gt;
&lt;td&gt;1.36 page/sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance Score&lt;/td&gt;
&lt;td&gt;7 points&lt;/td&gt;
&lt;td&gt;5 points&lt;/td&gt;
&lt;td&gt;12 points&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As a conclusion, we invite you to join the Surfsky Alpha test! The team is currently looking for feedback, and now you have a chance to contribute to the product backlog. Let's work together to create the best web scraping tool! Visit &lt;a href="https://surfsky.io/"&gt;https://surfsky.io/&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;We`ve added a demo, so now you can easily check out the parsing capabilities of our cloud browser: open any website and get its contents as HTML and a screenshot. &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://surfsky.io/demo" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--7syUYKNF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://framerusercontent.com/images/dxz9vwLU65klCmzfaWkoU9OqUCQ.jpg" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://surfsky.io/demo" rel="noopener noreferrer" class="c-link"&gt;
          Surfsky Cloud Browser Free Scraping Demo
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Headless cloud browser based on Chromium and equipped with advanced fingerprint spoofing technologies.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--YknZr0Z2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://framerusercontent.com/images/oGcN0qFE90AfOeniiSKU2TBHi40.svg" width="33" height="32"&gt;
        surfsky.io
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>webscraping</category>
      <category>database</category>
      <category>startup</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Surfsky 0.5.0: added Scraping API, launch speed up by 30%</title>
      <dc:creator>Surfsky</dc:creator>
      <pubDate>Thu, 30 Nov 2023 10:36:14 +0000</pubDate>
      <link>https://dev.to/surfsky/surfsky-050-added-scraping-api-launch-speed-up-by-30-k2p</link>
      <guid>https://dev.to/surfsky/surfsky-050-added-scraping-api-launch-speed-up-by-30-k2p</guid>
      <description>&lt;p&gt;The Surfsky team continues improving our cloud-based headless browser. Recent updates include a significant number of improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We have introduced a new feature that allows users to scrape websites without writing any code using the &lt;a href="https://docs.surfsky.io/docs/scraping/api"&gt;Scraping API&lt;/a&gt;. To do so, simply launch a one-time profile and specify the necessary URL and parsing parameters. Surfsky will then provide the HTML content and optionally a screenshot of the specified URL. Additionally, we have added the Scraping API to Rapid API, which can be found &lt;a href="https://rapidapi.com/Surfsky/api/surfsky-scraping-api"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Surfsky browser launch is now at least 30% faster thanks to instance preloading, which improves overall productivity and efficiency.&lt;/li&gt;
&lt;li&gt;We have updated the Surfsky browser kernel to Chromium 119. We strive to release Chromium kernel updates as soon as they become available, and our update release schedule is synchronized with global Chrome update statistics.&lt;/li&gt;
&lt;li&gt;We have fixed bugs related to SSH proxies, eliminating random connection errors when launching the browser with SSH.&lt;/li&gt;
&lt;li&gt;We have added a large pool of residential proxies. Now our users can run Surfsky without the need for their own proxies, thanks to our improved proxy infrastructure.&lt;/li&gt;
&lt;li&gt;We have improved the SSH proxy pre-check functionality, making it significantly faster and more reliable.&lt;/li&gt;
&lt;li&gt;We have fixed a bug related to stopping a persistent profile by using the stop method.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Surfsky alpha test continues! Register at &lt;a href="https://surfsky.io/"&gt;the Surfsky website&lt;/a&gt; and provide your feedback to the project team. Let us know about any difficulties, errors, issues, or wishes you may have, and we will continue developing the best web automation tool tailored to your needs.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>browser</category>
      <category>news</category>
      <category>python</category>
    </item>
    <item>
      <title>How to bypass Cloudflare protection when web scraping</title>
      <dc:creator>Surfsky</dc:creator>
      <pubDate>Thu, 21 Sep 2023 13:58:29 +0000</pubDate>
      <link>https://dev.to/surfsky/how-to-bypass-cloudflare-protection-when-web-scraping-pa</link>
      <guid>https://dev.to/surfsky/how-to-bypass-cloudflare-protection-when-web-scraping-pa</guid>
      <description>&lt;p&gt;We are the &lt;a href="https://surfsky.io/"&gt;Surfsky&lt;/a&gt; team, and today we would like to tell you about our product and how it can be useful to you. Currently in the alpha stage, you can give it a try for free and in return, please share your feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Surfsky?
&lt;/h2&gt;

&lt;p&gt;Surfsky is a cloud-based browser. It launches in the cloud and offers an interface to connect automation libraries and frameworks, such as Puppeteer and Playwright. It also has a convenient web inspector that allows you to see what is happening on a page to help you write the necessary data extraction algorithm correctly. &lt;/p&gt;

&lt;p&gt;But the main feature is advanced fingerprint spoofing to bypass security systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why would I need such a browser?
&lt;/h2&gt;

&lt;p&gt;As you probably have guessed already, for data extraction. In an ideal world each service would come with an API for data collection. However, in the real one not every service offers such an API, and those who do might limit it in terms of the data it provides, its speed, or terms of use. That’s why to bypass these restrictions, information is often collected from publicly available pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You need a browser to collect publicly available information automatically&lt;/strong&gt;. This is because services that you’d like to scrape are often created as single-page applications, that is, websites partially or completely created with JS rendering. To display such a web page correctly and fully, it has to be opened in a browser.&lt;/p&gt;

&lt;p&gt;To make collecting information from multiple services easier for you, &lt;strong&gt;we have created a browser that launches in the cloud at your request&lt;/strong&gt;. Using it, you can easily extract all the necessary data from the pages that interest you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not use a regular browser?
&lt;/h2&gt;

&lt;p&gt;One of the most common problems encountered when web scraping is getting banned, restricted, or blocked. Services use special systems to identify bots and cases of illegal data usage or access, and consequently block page rendering: they either cover the requested page with a CAPTCHA or don’t show it at all.&lt;/p&gt;

&lt;p&gt;In our browser we have done everything to prevent websites from thinking that you’re a bot, so that you are always able to get the necessary information. We collect digital fingerprints of real users, analyze them, and use them in our browser to spoof parameters checked by security systems. &lt;/p&gt;

&lt;p&gt;Such checks include, but are not limited to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;(in)consistency of the GPU data and its parameters;&lt;/li&gt;
&lt;li&gt;(in)consistency of system fonts;&lt;/li&gt;
&lt;li&gt;(in)consistency of the network connection and geolocation data;&lt;/li&gt;
&lt;li&gt;presence of automation tools;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Changing the browser fingerprint sometimes may not be enough for sufficient concealment, so we have added support for several proxy types: http, https, socks5, and ssh, as well as support for the OpenVPN protocol. &lt;/p&gt;

&lt;p&gt;As an example, let us open the website &lt;code&gt;https://nowsecure.nl&lt;/code&gt;, which uses Cloudflare defenses, in both headless Chrome running on a server and Surfsky.&lt;/p&gt;

&lt;p&gt;The server result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7w4n1z7c837dr223nns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp7w4n1z7c837dr223nns.png" alt="The server result" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Surfsky:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw39cix7jypq3wjs4ffyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw39cix7jypq3wjs4ffyc.png" alt="Surfsky:" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is how easily Surfsky can bypass Cloudflare defensive measures.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works: some examples.
&lt;/h2&gt;

&lt;p&gt;Let’s see how we can launch our browser in the cloud and connect to it using Python.&lt;/p&gt;

&lt;p&gt;After registering you will receive an API access token that you will need to use to run queries. To launch the browser you need to run one query specifying the proxy type with which you would like to launch the browser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const axios = require('axios')

const BROWSER_API = axios.create({
    baseURL: 'api-public.surfsky.io',
    timeout: 100000,
})

const { wsEndpoint } = BROWSER_API.post(
    '/profiles/one_time',
  { proxy: 'http.your-favourite-proxy.com' },
  { headers: { 'X-Cloud-Api-Token': API_TOKEN } }
).then((r) =&amp;gt; {
  return { wsEndpoint: r.data.ws_url }
})

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this is how by running just one query you get a browser fully ready to work. Let’s open amazon.com and take its screenshot using the Playwright framework:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { chromium } = require('playwright')

const browser = await chromium.connectOverCDP(wsEndpoint)
const page = await browser.newPage()

await page.goto('https://amazon.com')
await page.screenshot({ path: 'screen.png' })

await browser.close()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have easily launched the browser, opened the page that we wanted, and got its screenshot.&lt;/p&gt;

&lt;p&gt;Using our service you can launch the necessary amount of browser instances from the same device without any restrictions and work with them as if they were running on your system.&lt;/p&gt;

&lt;p&gt;If you already have browser automation code, you can simply substitute the way to launch the browser with a single http request, and everything will continue working exactly as before, no additional changes necessary.&lt;/p&gt;




&lt;p&gt;We thank you for reading! We hope that you are now interested in trying Surfsky out. We are currently in the alpha testing stage, and our team will be happy to receive any constructive feedback. You can register to take part in the alpha testing here: &lt;a href="https://surfsky.io/"&gt;https://surfsky.io/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We hope to see you onboard soon!&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>playwright</category>
      <category>python</category>
      <category>data</category>
    </item>
  </channel>
</rss>
