This chapter covered why sequential downloading creates a bottleneck. We then looked at how to download large numbers of web pages efficiently across multiple threads and processes.
In the next chapter, we will cover how to scrape content from web pages that load their content dynamically using JavaScript.