Website Content Crawler avatar
Website Content Crawler
Try for free

No credit card required

View all Actors
Website Content Crawler

Website Content Crawler

apify/website-content-crawler
Try for free

No credit card required

Crawl websites and extract text content to feed AI models, LLM applications, vector databases, or RAG pipelines. The Actor supports rich formatting using Markdown, cleans the HTML, downloads files, and integrates well with 🦜🔗LangChain, LlamaIndex, and the wider LLM ecosystem.

Do you want to learn more about this Actor?

Get a demo
CH

Crawling claims to succeed, but crawls nothing and returns no results

Open

chrislrobert opened this issue
2 months ago

I have three Website Content Crawler jobs that run every Saturday night. Last week, one of the three jobs mysteriously failed to crawl anything or return any results. Its full log:

12024-06-30T00:03:30.322Z ACTOR: Pulling Docker image of build cxepl9SPHv3B0GfJ2 from repository.
22024-06-30T00:03:30.463Z ACTOR: Creating Docker container.
32024-06-30T00:03:51.362Z ACTOR: Starting Docker container.
42024-06-30T00:03:55.108Z Starting X virtual framebuffer using: Xvfb :99 -ac -screen 0 1920x1080x24+32 -nolisten tcp
52024-06-30T00:03:55.109Z Executing main command
62024-06-30T00:03:58.629Z INFO  System info {"apifyVersion":"3.2.3","apifyClientVersion":"2.9.0","crawleeVersion":"3.10.3","osType":"Linux","nodeVersion":"v18.19.1"}
72024-06-30T00:03:59.116Z WARN  A non-zero value of the `dynamicContentWaitSecs` option is not supported by the Cheerio crawler.
82024-06-30T00:04:16.425Z INFO  HttpCrawler: Starting the crawler.
92024-06-30T00:04:16.802Z INFO  CheerioCrawler: Starting the crawler.
102024-06-30T00:04:16.910Z INFO  CheerioCrawler: All requests from the queue have been processed, the crawler will shut down.
112024-06-30T00:04:17.220Z INFO  CheerioCrawler: Final request statistics: {"requestsFinished":0,"requestsFailed":0,"retryHistogram":[],"requestAvgFailedDurationMillis":null,"requestAvgFinishedDurationMillis":null,"requestsFinishedPerMinute":0,"requestsFailedPerMinute":0,"requestTotalDurationMillis":0,"requestsTotal":0,"crawlerRuntimeMillis":16579}
122024-06-30T00:04:17.221Z INFO  CheerioCrawler: Finished! Total 0 requests: 0 succeeded, 0 failed. {"terminal":true}

(The warning about dynamicContentWaitSecs was new, and it seems like it's still documented as a valid input parameter.) Run URL: https://console.apify.com/actors/aYG0l9s7dbB7j3gbS/runs/HPbMHZufEn5eIfskb

Then this week, all three jobs failed in precisely the same way. Run URLs: https://console.apify.com/actors/aYG0l9s7dbB7j3gbS/runs/5tafMNrXeNUswOpXo, https://console.apify.com/actors/aYG0l9s7dbB7j3gbS/runs/Fn7JwjD3OGIcj171i, https://console.apify.com/actors/aYG0l9s7dbB7j3gbS/runs/3Ee1hY3mQWxqJ2KW4

This morning (about 13 hours after the three failed runs), I manually triggered a run and it started out fine. It gave the new warning, but it continued to crawl and return results. I then re-triggered my weekly process, which fired off its three runs via the API, and they all worked fine, despite including the new warning. One example run: https://console.apify.com/actors/aYG0l9s7dbB7j3gbS/runs/8zqZHm9xzcM3b1bfT

Any idea what's going on here? In addition to the crawls not working, they return success, so my automated processes think they succeeded when they in fact failed. It's caused some embarrassment here on my end.

jindrich.bar avatar

Hi @chrislrobert,

Thanks for reaching out and providing detailed logs. We couldn't reproduce the issue on our end, but we made some changes in the latest version (0.3.41) regarding how initial URLs are processed. Please try updating to this version.

Additionally, beware that even if all requests throw server errors, the run will still show as successful. To determine the actual quality of the scraped data, please check the result count or the data itself.

Let us know if the issue persists or if you need further assistance! Cheers!

CH

chrislrobert

2 months ago

Hi @jindrich.bar,

Hmm, okay, we are definitely checking for empty result datasets now, and will keep an eye on this. In terms of updating to the latest version, we're calling apify_client.actor("apify/website-content-crawler").call(run_input=apify_input) from Python, without any version number in the apify_input — so I suppose that it'll always use the latest production version by default?

Chris

Developer
Maintained by Apify
Actor metrics
  • 2.8k monthly users
  • 434 stars
  • 99.9% runs succeeded
  • 2.9 days response time
  • Created in Mar 2023
  • Modified 3 days ago