# Web Scraping

A method of extracting data from websites, typically through automated software such as bots or web crawlers.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Claims About RubyGems Caching and RubyDoc Code Execution

DevFeed: [Claims About RubyGems Caching and RubyDoc Code Execution](<https://devfeed.tech/articles/what-a-time-to-be-alive-39007.md>)

Original publisher: [Read original article](<https://tenderlovemaking.com/2026/09/11/what-a-time-to-be-alive/>)

Published: 2026-09-12T00:02:11Z

Content type: opinion

Language: en

Sources: [Aaron Patterson](<https://devfeed.tech/sources/aaron-patterson.md>)

Topics: [rubygems](<https://devfeed.tech/topics/rubygems.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [vulnerability](<https://devfeed.tech/topics/vulnerability.md>), [Docker](<https://devfeed.tech/topics/docker.md>), [Web Scraping](<https://devfeed.tech/topics/web-scraping.md>)

Tags: [caching](<https://devfeed.tech/tags/caching.md>), [docker](<https://devfeed.tech/tags/docker.md>), [rubygems](<https://devfeed.tech/tags/rubygems.md>), [scraping](<https://devfeed.tech/tags/scraping.md>), [vulnerability](<https://devfeed.tech/tags/vulnerability.md>)

### AI overview

An opinion post discusses alleged RubyGems activity involving a caching vulnerability and web scraping. It also describes how published gems can cause RubyDoc.info to run YARD-loaded code in a networked Docker container.

### Source excerpt

Today Reuters and the Wall Street Journal both reported about rogue AI agents at OpenAI attacking RubyGems.org. https://www.rubyhack.ai/ has an amazing writeup, and you should read it. I just wanted to make a quick post about it because it's wild. TL;DR: It seems like OpenAI Bots knew about the RubyGems caching vulnerability, tried to take advantage of it, and at the same time ran some weird web scraping code on RubyDoc.info. Back in May, socket.dev reported about a "GemStuffer Campaign" where someone (I guess OpenAI) was uploading tons of junk gems to RubyGems.org. For some reason, the gems would scrape UK government websites, then repackage the data as gems, and attempt to upload them to RubyGems. I honestly didn't think much about this (or even look into it) until Sydney Von Arx and Spencer Kitts (both co-authors on https://www.rubyhack.ai) contacted me asking about RubyGems. I thought the claims they were making were completely outlandish until I actually read the code in these "GemStuffer" gems. After reading the code in these gems, a couple things stood out to me. YARD Documentation First, the gems leverage YARD documentation to execute arbitrary code on host machines. In most of the examples you'll see a .yardopts file that looks like this: --load ./script.rb README.md lib/**/*.rb Here's a link to an example. If you have YARD installed, and you install this gem, then YARD will load and run whatever is in ./script.rb from inside the gem. I think it's pretty common knowledge that C extensions will execute extconf.rb (so you basically have an RCE vector), but I was surprised to find out that a documentation tool would do that too. Nobody is going to install a gem named slnleaker5 though, so why would this matter? Well, any time a Gem is published RubyDoc.info will download the gem and process the YARD documentation. RubyDoc.info will execute the arbitrary code inside a Docker container. The Docker container still has network access though, so these gems could ha

## The Real Python Podcast - Episode #304: Configuring a Versatile LLM Harness & Scraping the Web With Scrapy

DevFeed: [The Real Python Podcast - Episode #304: Configuring a Versatile LLM Harness & Scraping the Web With Scrapy](<https://devfeed.tech/articles/the-real-python-podcast-episode-304-configuring-a-versatile-llm-harness-scraping-the-web-with-scrapy-4388.md>)

Original publisher: [Read original article](<https://realpython.com/podcasts/rpp/304/>)

Author: Real Python

Published: 2026-07-24T12:00:00Z

Content type: article

Language: en

Sources: [Real Python](<https://devfeed.tech/sources/real-python.md>)

Topics: [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Python](<https://devfeed.tech/topics/python.md>), [Web Scraping](<https://devfeed.tech/topics/web-scraping.md>), [Homelab](<https://devfeed.tech/topics/homelab.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [data](<https://devfeed.tech/topics/data.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [agentic](<https://devfeed.tech/tags/agentic.md>), [ai](<https://devfeed.tech/tags/ai.md>), [api](<https://devfeed.tech/tags/api.md>), [applications](<https://devfeed.tech/tags/applications.md>), [developer](<https://devfeed.tech/tags/developer.md>), [hosting](<https://devfeed.tech/tags/hosting.md>), [llm](<https://devfeed.tech/tags/llm.md>), [podcast](<https://devfeed.tech/tags/podcast.md>), [python](<https://devfeed.tech/tags/python.md>), [self-hosting](<https://devfeed.tech/tags/self-hosting.md>), [web](<https://devfeed.tech/tags/web.md>), [workflow](<https://devfeed.tech/tags/workflow.md>)

### AI overview

Real Python Podcast Episode 304 discusses building versatile harnesses around large language models, efficient agentic developer workflows, web scraping with Scrapy, and self-hosting Python applications. The episode also covers local models, edge computing, token use, tools, and related projects.

### Source excerpt

Which is more important, the model or the "harness" around an LLM? What are ways to assemble an efficient agentic developer workflow? This week on the show, Ayan Pahwa joins us to discuss harnessing, web scraping, and self-hosting Python applications.

## Vercel Functions can now run up to 30 minutes

DevFeed: [Vercel Functions can now run up to 30 minutes](<https://devfeed.tech/articles/vercel-functions-can-now-run-up-to-30-minutes-1151.md>)

Original publisher: [Read original article](<https://vercel.com/changelog/vercel-functions-can-now-run-up-to-30-minutes>)

Author: Tiago Ventura Loureiro

Published: 2026-06-15T14:00:00Z

Content type: release

Language: en

Sources: [Vercel News](<https://devfeed.tech/sources/vercel-news.md>)

Topics: [Vercel](<https://devfeed.tech/topics/vercel.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [Python](<https://devfeed.tech/topics/python.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Next.js](<https://devfeed.tech/topics/next-js.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [Headless Browser](<https://devfeed.tech/topics/headless-browser.md>), [Web Scraping](<https://devfeed.tech/topics/web-scraping.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [apis](<https://devfeed.tech/tags/apis.md>), [automation](<https://devfeed.tech/tags/automation.md>), [browser](<https://devfeed.tech/tags/browser.md>), [cost](<https://devfeed.tech/tags/cost.md>), [llm](<https://devfeed.tech/tags/llm.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [python](<https://devfeed.tech/tags/python.md>), [vercel](<https://devfeed.tech/tags/vercel.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

Vercel Functions running on Node.js and Python can now execute for up to 30 minutes for Pro and Enterprise teams. The update supports longer-running workloads such as LLM reasoning, streamed AI responses, document and media processing, OCR, web scraping, browser automation, workflow steps, and queue handlers.

### Source excerpt

Vercel Functions using the Node.js and Python runtimes now support execution durations up to 30 minutes for Pro and Enterprise teams, more than 2x the previous 800 second limit. Support for additional runtimes is coming soon. Use longer-running Functions for work that needs more time to finish, including: Long LLM reasoning and tool calls AI responses that stream for several minutes Document and media processing OCR and extraction Web scraping and browser automation Complex Workflow steps or Queue handlers Fluid compute keeps long-running work cost-efficient. Active CPU billing only applies while your code is executing, and pauses while your Function is waiting on I/O such as AI model calls, database queries, and third-party APIs. Set maxDuration to opt in. For Next.js App Router, configure it in the route file: For other runtimes and frameworks, configure maxDuration for a specific function path in vercel.json: Durations above 800 seconds are in beta and require Fluid compute. Learn more about configuring max duration for Vercel Functions in the documentation. Read more

## One honojs file for entire web scraping API

DevFeed: [One honojs file for entire web scraping API](<https://devfeed.tech/articles/one-honojs-file-for-entire-web-scraping-api-39140.md>)

Original publisher: [Read original article](<https://ihatereading.in/t/one-honojs-file-for-entire-web-scraping-api>)

Author: iHateReading

Published: 2026-04-13T16:54:35Z

Content type: tutorial

Language: en

Sources: [iHateReading](<https://devfeed.tech/sources/ihatereading.md>)

Topics: [Hono](<https://devfeed.tech/topics/honojs.md>), [Web Scraping](<https://devfeed.tech/topics/web-scraping.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [backend](<https://devfeed.tech/tags/backend.md>), [blockchain](<https://devfeed.tech/tags/blockchain.md>), [coding](<https://devfeed.tech/tags/coding.md>), [development](<https://devfeed.tech/tags/development.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [github-repository](<https://devfeed.tech/tags/github-repository.md>), [honojs](<https://devfeed.tech/tags/honojs.md>), [ihatereading](<https://devfeed.tech/tags/ihatereading.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [one-honojs-file-for-entire-web-scraping-api](<https://devfeed.tech/tags/one-honojs-file-for-entire-web-scraping-api.md>), [product](<https://devfeed.tech/tags/product.md>), [programming](<https://devfeed.tech/tags/programming.md>), [react](<https://devfeed.tech/tags/react.md>), [scraping](<https://devfeed.tech/tags/scraping.md>), [typescript](<https://devfeed.tech/tags/typescript.md>), [web-development](<https://devfeed.tech/tags/web-development.md>), [web-scraping](<https://devfeed.tech/tags/web-scraping.md>), [web-scraping-github-repository-scraping-backend-honojs](<https://devfeed.tech/tags/web-scraping-github-repository-scraping-backend-honojs.md>)

### AI overview

A tutorial about building web-scraping endpoints in a single Honojs file.

### Source excerpt

Building scrape endpoints using one honojs file

## Data Is the Bottleneck in Many AI Projects

DevFeed: [Data Is the Bottleneck in Many AI Projects](<https://devfeed.tech/articles/the-most-important-part-of-your-ai-project-isn-t-ai-32383.md>)

Original publisher: [Read original article](<https://brianjenney.substack.com/p/the-most-important-part-of-your-ai>)

Author: Brian Jenney

Published: 2026-02-07T16:25:26Z

Content type: opinion

Language: en

Sources: [Brian Jenney](<https://devfeed.tech/sources/brian-jenney.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [Web Scraping](<https://devfeed.tech/topics/web-scraping.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [data](<https://devfeed.tech/tags/data.md>), [data-pipeline](<https://devfeed.tech/tags/data-pipeline.md>), [grounding](<https://devfeed.tech/tags/grounding.md>), [web-scraping](<https://devfeed.tech/tags/web-scraping.md>)

### AI overview

The article argues that data collection and preparation, rather than wiring together AI components, are often the main bottlenecks in AI projects. It discusses messy real-world data, data pipelines, vector databases, and web scraping as ways to ground useful AI outputs.

### Source excerpt

This is the first Saturday I've had off in a few weeks.

## How Grepsr uses Temporal to deliver scalable and reliable web data

DevFeed: [How Grepsr uses Temporal to deliver scalable and reliable web data](<https://devfeed.tech/articles/how-grepsr-uses-temporal-to-deliver-scalable-and-reliable-web-data-35855.md>)

Original publisher: [Read original article](<https://temporal.io/blog/how-grepsr-uses-temporal-to-deliver-scalable-and-reliable-web-data>)

Author: Subrat Basnet

Published: 2025-07-24T00:00:00Z

Content type: article

Language: en

Sources: [Temporal Blog](<https://devfeed.tech/sources/temporal-blog.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [Web Scraping](<https://devfeed.tech/topics/web-scraping.md>), [reliability](<https://devfeed.tech/topics/reliability.md>), [Microservices](<https://devfeed.tech/topics/microservices.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>), [event driven](<https://devfeed.tech/topics/event-driven.md>), [Monitoring](<https://devfeed.tech/topics/monitoring.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [retry](<https://devfeed.tech/topics/retry.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [code](<https://devfeed.tech/tags/code.md>), [community](<https://devfeed.tech/tags/community.md>), [data](<https://devfeed.tech/tags/data.md>), [event-driven](<https://devfeed.tech/tags/event-driven.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [monitoring](<https://devfeed.tech/tags/monitoring.md>), [orchestration](<https://devfeed.tech/tags/orchestration.md>), [reliability](<https://devfeed.tech/tags/reliability.md>), [retry](<https://devfeed.tech/tags/retry.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

Grepsr describes how it uses Temporal to orchestrate a microservices-based, event-driven web-data extraction platform. The article explains how workflow orchestration addresses failure tracing, lost state, brittle parallel execution, and limited cron-job visibility while supporting large-scale data processing.

### Source excerpt

Grepsr scaled to 600 M web-data records a day with 99% delivery reliability by orchestrating its micro-services on Temporal -- see how code-first Workflows made it happen.

## Building RagRabbit, An Open Source RAG Search with Postgres as the Vector Store

DevFeed: [Building RagRabbit, An Open Source RAG Search with Postgres as the Vector Store](<https://devfeed.tech/articles/building-ragrabbit-an-open-source-rag-search-with-postgres-as-the-vector-store-5761.md>)

Original publisher: [Read original article](<https://neon.com/blog/ragrabbit-neon>)

Author: Carlota Soto

Published: 2025-03-17T17:40:19Z

Content type: article

Language: en

Sources: [Blog -- Neon Docs](<https://devfeed.tech/sources/blog-neon-docs.md>)

Topics: [Retrieval Augmented Generation (RAG)](<https://devfeed.tech/topics/retrieval-augmented-generation-rag.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [Web Scraping](<https://devfeed.tech/topics/web-scraping.md>), [llamaindex](<https://devfeed.tech/topics/llamaindex.md>), [Model Context Protocol (MCP)](<https://devfeed.tech/topics/model-context-protocol-mcp.md>), [Appwrite](<https://devfeed.tech/topics/appwrite.md>), [Claude](<https://devfeed.tech/topics/claude.md>), [Vercel](<https://devfeed.tech/topics/vercel.md>), [Serverless](<https://devfeed.tech/topics/serverless.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [building](<https://devfeed.tech/tags/building.md>), [case-studies](<https://devfeed.tech/tags/case-studies.md>), [claude](<https://devfeed.tech/tags/claude.md>), [cursor](<https://devfeed.tech/tags/cursor.md>), [databases](<https://devfeed.tech/tags/databases.md>), [embedding](<https://devfeed.tech/tags/embedding.md>), [llamaindex](<https://devfeed.tech/tags/llamaindex.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [openai](<https://devfeed.tech/tags/openai.md>), [rag](<https://devfeed.tech/tags/rag.md>), [search](<https://devfeed.tech/tags/search.md>), [serverless](<https://devfeed.tech/tags/serverless.md>), [source](<https://devfeed.tech/tags/source.md>), [vercel](<https://devfeed.tech/tags/vercel.md>)

### AI overview

This article introduces RagRabbit, an open-source toolkit for building retrieval-augmented generation workflows with Postgres and pgVector. It crawls websites, converts pages to Markdown, creates LLM-friendly text files, stores embeddings in Postgres, and provides AI question answering through OpenAI or Claude. It also offers an MCP server for supplying relevant document chunks to Cursor and Claude Desktop, with deployment on Vercel and Neon.

### Source excerpt

"When I started RagRabbit, I did testing on vector databases, but I didn't see a real advantage. Postgres with Pgvector covers everything I need, and it's very performant for the number of rows I handle" (Marco D'Alia, Software Architect behind RagRabbit) While experimenting with...

## Fighting TLS fingerprinting with Node.js

DevFeed: [Fighting TLS fingerprinting with Node.js](<https://devfeed.tech/articles/fighting-tls-fingerprinting-with-node-js-19098.md>)

Original publisher: [Read original article](<https://httptoolkit.com/blog/tls-fingerprinting-node-js/>)

Author: HTTP Toolkit; Tim Perry

Published: 2021-12-07T13:40:00Z

Content type: tutorial

Language: en

Sources: [HTTP Toolkit](<https://devfeed.tech/sources/http-toolkit.md>)

Topics: [TLS (Transport Layer Security)](<https://devfeed.tech/topics/tls.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [Web Scraping](<https://devfeed.tech/topics/web-scraping.md>), [HTTP](<https://devfeed.tech/topics/http.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [http](<https://devfeed.tech/tags/http.md>), [interception](<https://devfeed.tech/tags/interception.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [mitm](<https://devfeed.tech/tags/mitm.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [proxy](<https://devfeed.tech/tags/proxy.md>), [tls](<https://devfeed.tech/tags/tls.md>)

### AI overview

This tutorial explains how TLS fingerprinting lets servers and proxies identify client software from unencrypted connection metadata. It examines how this can block HTTP Toolkit and other automated traffic, then shows how Node.js techniques can work around that blocking.

### Source excerpt

The modern internet is full of services that want to know who you are. Fingerprinting is the latest way to do this: capturing many small details about your client, and using it to create an id that's sufficiently unique to recognize you and infer details about your network client and device. This is a privacy problem, which I'm not going to focus on here, but collecting and analysing interaction metadata is also a powerful tool to recognize certain types of clients, even when they attempt to disguise themselves. TLS provides a particularly good surface for this kind of fingerprinting, which allows a server or proxy to recognize the kind of software (a specific browser version, Python, Ruby, Node.js, etc) that's opening any TLS connection, before the client has even sent any data (such as an HTTP request) within the connection, and purely using unencrypted public data from the connection. In many cases, this is a problem. HTTP Toolkit acts as a MitM proxy for HTTP(S) traffic inspection & mocking, and this potentially allows servers to recognize and block it, along with any other similar debugging proxies. Many other automated scripts and tools can also be recognized, blocking web scraping and other requests from anything but a real browser. Until recently, I thought this was fairly theoretical, but last week an HTTP Toolkit user showed me a real-world example, where non-browser traffic is blocked completely, based just on its TLS fingerprint, causing big problems for HTTP Toolkit usage. Fortunately, we can work around this. In this article, I want to explain how TLS fingerprinting works, look at a real-world example, and then see exactly how you can defeat this blocking using Node.js (with techniques that you can easily apply elsewhere too). How does TLS fingerprinting work? TLS provides a huge amount of data for fingerprinting. Every connection secured by TLS (for example, all HTTPS requests) starts with a 'client hello' message from the client, sent unencrypted, wi