{"id":27351,"date":"2025-02-14T10:25:50","date_gmt":"2025-02-14T04:55:50","guid":{"rendered":"https:\/\/www.seminarsonly.com\/news\/?p=27351"},"modified":"2025-02-15T13:41:48","modified_gmt":"2025-02-15T08:11:48","slug":"node-unblocker-node-unblocker-for-web-scraping-github","status":"publish","type":"post","link":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/","title":{"rendered":"Node Unblocker : Node-unblocker for Web Scraping Github"},"content":{"rendered":"<h3><em><span style=\"color: #008000;\"><span style=\"color: #000080;\">Node Unblocker :\u00a0<\/span>Unblocker was originally a web proxy for evading internet censorship, similar to CGIproxy \/ PHProxy \/ Glype but written in node.js. It&#8217;s since morphed into a general-purpose library for proxying and rewriting remote webpages.<\/span><\/em><\/h3>\n<p>All data is processed and relayed to the client on the fly without unnecessary buffering, making unblocker one of the fastest web proxies available.<\/p>\n<h2><span style=\"color: #800000;\">The magic part<\/span><\/h2>\n<p>The script uses &#8220;pretty&#8221; urls which, besides looking pretty, allow links with relative paths to just work without modification. (E.g.\u00a0<code>&lt;a href=\"path\/to\/file2.html\"&gt;&lt;\/a&gt;<\/code>)<\/p>\n<p>In addition to this, links that are relative to the root (E.g.\u00a0<code>&lt;a href=\"\/path\/to\/file2.html\"&gt;&lt;\/a&gt;<\/code>) can be handled without modification by checking the referrer and 307 redirecting them to the proper location in the referring site. (Although the proxy does attempt to rewrite these links to avoid the redirect.)<\/p>\n<p>Cookies are proxied by adjusting their path to include the proxy&#8217;s URL, and a bit of extra work is done to ensure they remain intact when switching protocols or subdomains.<\/p>\n<h2><a id=\"user-content-limitations\" class=\"anchor\" href=\"https:\/\/www.npmjs.com\/package\/unblocker#limitations\" aria-hidden=\"true\"><\/a><span style=\"color: #800000;\">Limitations<\/span><\/h2>\n<p>Although the proxy works well for standard login forms and even most AJAX content, OAuth login forms and anything that uses\u00a0<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/postMessage\" rel=\"nofollow\">postMessage<\/a>\u00a0(Google, Facebook, etc.) are not likely to work out of the box. This is not an insurmountable issue, but it&#8217;s not one that I expect to have fixed in the near term.<\/p>\n<p>More advanced websites, such as Roblox, Discord, YouTube*, Instagram, etc. do not currently work. At the moment, there is no timeframe for when these might be supported.<\/p>\n<ul>\n<li>There is an example that detects YouTube video pages and\u00a0replaces them with a custom page that just streams the video.<\/li>\n<\/ul>\n<p>Patches are welcome, including both general-purpose improvements to go into the main library, and site-specific fixes to go in the examples folder.<\/p>\n<h2><a id=\"user-content-running-the-website-on-your-computer\" class=\"anchor\" href=\"https:\/\/www.npmjs.com\/package\/unblocker#running-the-website-on-your-computer\" aria-hidden=\"true\"><\/a><span style=\"color: #800000;\">Running the website on your computer<\/span><\/h2>\n<p>See\u00a0<a href=\"https:\/\/github.com\/nfriedly\/nodeunblocker.com\">https:\/\/github.com\/nfriedly\/nodeunblocker.com<\/a><\/p>\n<h2><a id=\"user-content-using-unblocker-as-a-library-in-your-software\" class=\"anchor\" href=\"https:\/\/www.npmjs.com\/package\/unblocker#using-unblocker-as-a-library-in-your-software\" aria-hidden=\"true\"><\/a><span style=\"color: #800000;\">Using unblocker as a library in your software<\/span><\/h2>\n<pre><code>npm install --save unblocker\r\n<\/code><\/pre>\n<p>Unblocker exports an\u00a0express-compatible API, so using in an express application is trivial:<\/p>\n<pre><code>var express = require('express')\r\nvar Unblocker = require('unblocker');\r\nvar app = express();\r\nvar unblocker = new Unblocker({prefix: '\/proxy\/'});\r\n\r\n\/\/ this must be one of the first app.use() calls and must not be on a subdirectory to work properly\r\napp.use(unblocker);\r\n\r\napp.get('\/', function(req, res) {\r\n    \/\/...\r\n});\r\n\r\n\/\/ the upgrade handler allows unblocker to proxy websockets\r\napp.listen(process.env.PORT || 8080).on('upgrade', unblocker.onUpgrade);\r\n<\/code><\/pre>\n<p><img decoding=\"async\" class=\"alignnone wp-image-27353 aligncenter\" src=\"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg\" alt=\"node unblocker\" width=\"795\" height=\"447\" srcset=\"https:\/\/seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg 960w, https:\/\/seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker-300x169.jpg 300w, https:\/\/seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker-768x432.jpg 768w, https:\/\/seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker-678x381.jpg 678w\" sizes=\"(max-width: 795px) 100vw, 795px\" \/><\/p>\n<h2><a id=\"user-content-configuration\" class=\"anchor\" href=\"https:\/\/www.npmjs.com\/package\/unblocker#configuration\" aria-hidden=\"true\"><\/a><span style=\"color: #800000;\">Configuration<\/span><\/h2>\n<p>Unblocker supports the following configuration options, defaults are shown:<\/p>\n<div class=\"highlight highlight-source-js\">\n<pre><span class=\"pl-kos\">{<\/span>\r\n    <span class=\"pl-c1\">prefix<\/span>: <span class=\"pl-s\">'\/proxy\/'<\/span><span class=\"pl-kos\">,<\/span>  <span class=\"pl-c\">\/\/ Path that the proxied URLs begin with. '\/' is not recommended due to a few edge cases.<\/span>\r\n    <span class=\"pl-c1\">host<\/span>: <span class=\"pl-c1\">null<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c\">\/\/ Host used in redirects (e.g `example.com` or `localhost:8080`). Default behavior is to determine this from the request headers.<\/span>\r\n    <span class=\"pl-c1\">requestMiddleware<\/span>: <span class=\"pl-kos\">[<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c\">\/\/ Array of functions that perform extra processing on client requests before they are sent to the remote server. API is detailed below.<\/span>\r\n    <span class=\"pl-c1\">responseMiddleware<\/span>: <span class=\"pl-kos\">[<\/span><span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c\">\/\/ Array of functions that perform extra processing on remote responses before they are sent back to the client. API is detailed below.<\/span>\r\n    <span class=\"pl-c1\">standardMiddleware<\/span>: <span class=\"pl-c1\">true<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c\">\/\/ Allows you to disable all built-in middleware if you need to perform advanced customization of requests or responses.<\/span>\r\n    <span class=\"pl-c1\">clientScripts<\/span>: <span class=\"pl-c1\">true<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c\">\/\/ Injects JavaScript to force things like WebSockets and XMLHttpRequest to go through the proxy.<\/span>\r\n    <span class=\"pl-c1\">processContentTypes<\/span>: <span class=\"pl-kos\">[<\/span> <span class=\"pl-c\">\/\/ All  built-in middleware that modifies the content of responses limits itself to these content-types.<\/span>\r\n        <span class=\"pl-s\">'text\/html'<\/span><span class=\"pl-kos\">,<\/span>\r\n        <span class=\"pl-s\">'application\/xml+xhtml'<\/span><span class=\"pl-kos\">,<\/span>\r\n        <span class=\"pl-s\">'application\/xhtml+xml'<\/span><span class=\"pl-kos\">,<\/span>\r\n        <span class=\"pl-s\">'text\/css'<\/span>\r\n    <span class=\"pl-kos\">]<\/span><span class=\"pl-kos\">,<\/span>\r\n    <span class=\"pl-c1\">httpAgent<\/span>: <span class=\"pl-c1\">null<\/span><span class=\"pl-kos\">,<\/span> <span class=\"pl-c\">\/\/override agent used to request http response from server. see https:\/\/nodejs.org\/api\/http.html#http_class_http_agent<\/span>\r\n    <span class=\"pl-c1\">httpsAgent<\/span>: <span class=\"pl-c1\">null<\/span> <span class=\"pl-c\">\/\/override agent used to request https response from server. see https:\/\/nodejs.org\/api\/https.html#https_class_https_agent<\/span>\r\n<span class=\"pl-kos\">}<\/span><\/pre>\n<\/div>\n<p>Setting\u00a0<code>process.env.NODE_ENV='production'<\/code>\u00a0will enable more aggressive caching on the client scripts and potentially other optimizations in the future.<\/p>\n<h2><a id=\"user-content-custom-middleware\" class=\"anchor\" href=\"https:\/\/www.npmjs.com\/package\/unblocker#custom-middleware\" aria-hidden=\"true\"><\/a><span style=\"color: #800000;\">Custom Middleware<\/span><\/h2>\n<p>Unblocker &#8220;middleware&#8221; are small functions that allow you to inspect and modify requests and responses. The majority of Unblocker&#8217;s internal logic is implimented as middleware, and it&#8217;s possible to write custom middleware to augment or replace the built-in middleware.<\/p>\n<p>Custom middleware should be a function that accepts a single\u00a0<code>data<\/code>\u00a0argument and runs synchronously.<\/p>\n<p>To process request and response data, create a\u00a0Transform Stream\u00a0to perform the processing in chunks and pipe through this stream. (Example below.)<\/p>\n<p>To respond directly to a request, add a function to\u00a0<code>config.requestMiddleware<\/code>\u00a0that handles the\u00a0<code>clientResponse<\/code>\u00a0(a standard\u00a0http.ServerResponse\u00a0when used directly, or a\u00a0Express Response\u00a0when used with Express. Once a response is sent, no further middleware will be executed for that request.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node Unblocker :\u00a0Unblocker was originally a web proxy for evading internet censorship, similar to CGIproxy \/ PHProxy \/ Glype but written in node.js. It&#8217;s since morphed into a general-purpose library&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-27351","post","type-post","status-publish","format-standard","hentry","category-news"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Node Unblocker : Node-unblocker for Web Scraping Github - Seminarsonly.com<\/title>\n<meta name=\"description\" content=\"Unblocker was originally a web proxy for evading internet censorship, similar to CGIproxy \/ PHProxy \/ Glype but written in node.js. It&#039;s since morphed into a general-purpose library for proxying and rewriting remote webpages.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node Unblocker : Node-unblocker for Web Scraping Github\" \/>\n<meta property=\"og:description\" content=\"Unblocker was originally a web proxy for evading internet censorship, similar to CGIproxy \/ PHProxy \/ Glype but written in node.js. It&#039;s since morphed into a general-purpose library for proxying and rewriting remote webpages.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/\" \/>\n<meta property=\"og:site_name\" content=\"Seminarsonly.com\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/seminarsonly\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-14T04:55:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-15T08:11:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg\" \/>\n<meta name=\"author\" content=\"Freddy John\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@seminarsonly\" \/>\n<meta name=\"twitter:site\" content=\"@seminarsonly\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Freddy John\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/\"},\"author\":{\"name\":\"Freddy John\",\"@id\":\"https:\/\/seminarsonly.com\/news\/#\/schema\/person\/75cf706896b7210fb0a84651adc258bd\"},\"headline\":\"Node Unblocker : Node-unblocker for Web Scraping Github\",\"datePublished\":\"2025-02-14T04:55:50+00:00\",\"dateModified\":\"2025-02-15T08:11:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/\"},\"wordCount\":477,\"image\":{\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg\",\"articleSection\":[\"news\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/\",\"url\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/\",\"name\":\"Node Unblocker : Node-unblocker for Web Scraping Github - Seminarsonly.com\",\"isPartOf\":{\"@id\":\"https:\/\/seminarsonly.com\/news\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg\",\"datePublished\":\"2025-02-14T04:55:50+00:00\",\"dateModified\":\"2025-02-15T08:11:48+00:00\",\"author\":{\"@id\":\"https:\/\/seminarsonly.com\/news\/#\/schema\/person\/75cf706896b7210fb0a84651adc258bd\"},\"description\":\"Unblocker was originally a web proxy for evading internet censorship, similar to CGIproxy \/ PHProxy \/ Glype but written in node.js. It's since morphed into a general-purpose library for proxying and rewriting remote webpages.\",\"breadcrumb\":{\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#primaryimage\",\"url\":\"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg\",\"contentUrl\":\"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/seminarsonly.com\/news\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node Unblocker : Node-unblocker for Web Scraping Github\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/seminarsonly.com\/news\/#website\",\"url\":\"https:\/\/seminarsonly.com\/news\/\",\"name\":\"Seminarsonly.com\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/seminarsonly.com\/news\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/seminarsonly.com\/news\/#\/schema\/person\/75cf706896b7210fb0a84651adc258bd\",\"name\":\"Freddy John\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/671d452f5fe9027ab894cbed50911cc764b2c16878222070bf044f21705d4c94?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/671d452f5fe9027ab894cbed50911cc764b2c16878222070bf044f21705d4c94?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/671d452f5fe9027ab894cbed50911cc764b2c16878222070bf044f21705d4c94?s=96&d=mm&r=g\",\"caption\":\"Freddy John\"},\"sameAs\":[\"https:\/\/seminarsonly.com\/news\"],\"url\":\"https:\/\/seminarsonly.com\/news\/author\/anupvnaick_51wq8y4s\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Node Unblocker : Node-unblocker for Web Scraping Github - Seminarsonly.com","description":"Unblocker was originally a web proxy for evading internet censorship, similar to CGIproxy \/ PHProxy \/ Glype but written in node.js. It's since morphed into a general-purpose library for proxying and rewriting remote webpages.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/","og_locale":"en_US","og_type":"article","og_title":"Node Unblocker : Node-unblocker for Web Scraping Github","og_description":"Unblocker was originally a web proxy for evading internet censorship, similar to CGIproxy \/ PHProxy \/ Glype but written in node.js. It's since morphed into a general-purpose library for proxying and rewriting remote webpages.","og_url":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/","og_site_name":"Seminarsonly.com","article_publisher":"https:\/\/facebook.com\/seminarsonly","article_published_time":"2025-02-14T04:55:50+00:00","article_modified_time":"2025-02-15T08:11:48+00:00","og_image":[{"url":"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg","type":"","width":"","height":""}],"author":"Freddy John","twitter_card":"summary_large_image","twitter_creator":"@seminarsonly","twitter_site":"@seminarsonly","twitter_misc":{"Written by":"Freddy John","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#article","isPartOf":{"@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/"},"author":{"name":"Freddy John","@id":"https:\/\/seminarsonly.com\/news\/#\/schema\/person\/75cf706896b7210fb0a84651adc258bd"},"headline":"Node Unblocker : Node-unblocker for Web Scraping Github","datePublished":"2025-02-14T04:55:50+00:00","dateModified":"2025-02-15T08:11:48+00:00","mainEntityOfPage":{"@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/"},"wordCount":477,"image":{"@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#primaryimage"},"thumbnailUrl":"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg","articleSection":["news"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/","url":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/","name":"Node Unblocker : Node-unblocker for Web Scraping Github - Seminarsonly.com","isPartOf":{"@id":"https:\/\/seminarsonly.com\/news\/#website"},"primaryImageOfPage":{"@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#primaryimage"},"image":{"@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#primaryimage"},"thumbnailUrl":"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg","datePublished":"2025-02-14T04:55:50+00:00","dateModified":"2025-02-15T08:11:48+00:00","author":{"@id":"https:\/\/seminarsonly.com\/news\/#\/schema\/person\/75cf706896b7210fb0a84651adc258bd"},"description":"Unblocker was originally a web proxy for evading internet censorship, similar to CGIproxy \/ PHProxy \/ Glype but written in node.js. It's since morphed into a general-purpose library for proxying and rewriting remote webpages.","breadcrumb":{"@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#primaryimage","url":"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg","contentUrl":"https:\/\/www.seminarsonly.com\/news\/wp-content\/uploads\/2022\/04\/node-unblocker.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/seminarsonly.com\/news\/node-unblocker-node-unblocker-for-web-scraping-github\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/seminarsonly.com\/news\/"},{"@type":"ListItem","position":2,"name":"Node Unblocker : Node-unblocker for Web Scraping Github"}]},{"@type":"WebSite","@id":"https:\/\/seminarsonly.com\/news\/#website","url":"https:\/\/seminarsonly.com\/news\/","name":"Seminarsonly.com","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/seminarsonly.com\/news\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/seminarsonly.com\/news\/#\/schema\/person\/75cf706896b7210fb0a84651adc258bd","name":"Freddy John","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/671d452f5fe9027ab894cbed50911cc764b2c16878222070bf044f21705d4c94?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/671d452f5fe9027ab894cbed50911cc764b2c16878222070bf044f21705d4c94?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/671d452f5fe9027ab894cbed50911cc764b2c16878222070bf044f21705d4c94?s=96&d=mm&r=g","caption":"Freddy John"},"sameAs":["https:\/\/seminarsonly.com\/news"],"url":"https:\/\/seminarsonly.com\/news\/author\/anupvnaick_51wq8y4s\/"}]}},"_links":{"self":[{"href":"https:\/\/seminarsonly.com\/news\/wp-json\/wp\/v2\/posts\/27351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/seminarsonly.com\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/seminarsonly.com\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/seminarsonly.com\/news\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/seminarsonly.com\/news\/wp-json\/wp\/v2\/comments?post=27351"}],"version-history":[{"count":0,"href":"https:\/\/seminarsonly.com\/news\/wp-json\/wp\/v2\/posts\/27351\/revisions"}],"wp:attachment":[{"href":"https:\/\/seminarsonly.com\/news\/wp-json\/wp\/v2\/media?parent=27351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/seminarsonly.com\/news\/wp-json\/wp\/v2\/categories?post=27351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/seminarsonly.com\/news\/wp-json\/wp\/v2\/tags?post=27351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}