GSoC 2014 Ideas
Scrapy is a very popular web crawling and scraping framework for Python (10th in Github most trending Python projects) used to write spiders for crawling and extracting data from websites. Scrapy has a healthy and active community, and it's applying for its first Google Summer of Code in 2014.
If you're interested in participating in GSoC 2014 as a student, you should join the scrapy-users mailing list and post your questions and ideas there. You can also join the #scrapy IRC channel at Freenode to chat with other Scrapy users & developers. All Scrapy development happens at GitHub Scrapy repo.
This page contains a list of curated ideas that have passed all requirements, please add your new ideas to GSoC-2014-Draft-Ideas.
Brief explanation | A unified and simplified way to hook up functionality without dealing with middlewares, pipelines or individual components |
Expected results | The add-ons functionality implemented as described in SEP-021. |
Required skills | Python, general understanding of Scrapy extensions desirable but not required |
Difficulty level | Easy |
Mentor(s) | Pablo Hoffman |
Brief explanation | Finish core API cleanup and native support for per-spider settings |
Expected results | Core API implemented, documented and tested, as documented in SEP-019 |
Required skills | Python, API design |
Difficulty level | Advanced |
Mentor(s) | Pablo Hoffman, Nicolas Ramirez |
This task will involve some refactoring, keeping backwards compatibility for the most popular features.
Brief explanation | Add Python 3.3 support to Scrapy, keeping 2.7 compatibility |
Expected results | Scrapy testing suite should pass most tests and basic spider should work under Python 3.3, at least on Linux (ideally also on Mac/Windows). |
Required skills | Python 2 & 3, some Testing and Twisted background |
Difficulty level | Advanced |
Mentor(s) | Mikhail Korobov |
The main challenge with this task is that Twisted (a library that Scrapy is built upon) does not yet support Python 3, and Twisted is quite large. However, Scrapy only uses a (very small) subset of its functionality. Students working on this task should be prepared to port (or drop) certain parts of Twisted that do not yet support Python 3.
Brief explanation | Write an HTTP API that wraps any Scrapy spider, it should accept Requests, execute them in Scrapy, and return data extracted by the spider. |
Expected results | Working server, Twisted API, docs and tests. |
Required skills | Python, Twisted (desired), Scrapy basics |
Difficulty level | Intermediate |
Mentor(s) | Shane Evans |
Scrapy supports crawling in batch mode very well, i.e. a long running process starting from seed requests, extracting and following links and exporting data. Sometimes users would like to reuse the same code to extract interactively. This project provides an API to support this usage and allows scrapy extraction code to be reused from other applications.
Brief explanation | Develop a better IPython + Scrapy integration that would display the HTML page inline in the console, provide some interactive widgets and run Python code against the results. IPython 2.0 release is not too far away, and it should provide a standard protocol for this. Here is a scrapy-ipython proof of concept demo. |
Expected results | It should become possible to develop Scrapy spiders interactively and visually inside IPython notebooks |
Required skills | Python, JavaScript, HTML, Interface Design, Security |
Difficulty level | Intermediate |
Mentor(s) | Mikhail Korobov, Shane Evans |
Brief explanation | Develop more comprehensive benchmarks. Profile and address CPU bottlenecks found. Address both known memory inefficiencies (which will be provided) and new ones uncovered. |
Expected results | Reusable benchmarks, measureable performance improvements. |
Required skills | Python, Profiling, Algorithms and Data Structures |
Difficulty level | Advanced |
Mentor(s) | Mikhail Korobov, Daniel Graña, Shane Evans |
Brief explanation | A project that allows users to define a Scrapy spider by creating a stand alone script or executable |
Expected results | Demo spiders in a programming languge other than Python, documented API and tests. |
Required skills | Python and other programming language |
Difficulty level | Intermediate |
Mentor(s) | Shane Evans |
Scrapy has a lot of useful functionality not available in frameworks for other programming languages. The goal of this project is to allow developers to write spiders simply and easily in any programming language, while permitting Scrapy to manage concurrency, scheduling, item exporting, caching, etc. This project takes inspiration from hadoop streaming, a utility allowing hadoop mapreduce jobs to be written in any language.
This task will involve writing a Scrapy spider that forks a process and communicates with it using a protocol that needs to be defined and documented. It should also allow for crashed processes to be restarted without stopping the crawl.
Stretch goals:
- Library support in python and another language. This should make writing spiders similar to how it is currently done in Scrapy
- Recycle spiders periodically (e.g. to control memory usage)
- Use multiple cores by forking multiple processes and load balancing between them.
Brief explanation | Currently, Scrapyd lack of popularity is mainly due to the poor web UI. The goal of this task is to make the UI more beautiful and powerful. |
Expected results | A web UI that is pleasant and efficient to use. It should allow browsing scraped items and logs using. |
Required skills | Python, Javascript, HTML/CSS |
Difficulty level | Intermediate |
Mentor(s) | Pablo Hoffman |
Brief explanation | Add integration tests for different networking scenarios |
Expected results | Be able to tests from vertical to horizontal crawling against websites in same and different ips respecting throttling and handling timeouts, retries, dns failures. It must be simple to define new scenarios with predefined components (websites, proxies, routers, injected error rates) |
Required skills | Python, Networking and Virtualization |
Mentor(s) | Daniel Graña |
Brief explanation | Replace current HTTP1.1 downloader handler with a in-house solution easily customizable to crawling needs. |
Expected results | A HTML parser that degrades nicely to parse invalid responses, filtering out the offending headers and cookies as browsers does. It must be able to avoid downloading responses bigger than a size limit, it can be configured to throttle bandwidth used per download, and if there is enough time it can lay out the interface to response streaming |
Required skills | Python, Twisted and HTTP protocol |
Mentor(s) | Daniel Graña |
Current HTTP1.1 download handler depends on code shipped with Twisted that is not easily extensible by us, we ship twisted code under scrapy.xlib.tx to support running Scrapy in older twisted versions for distributions that doesn't ship uptodate Twisted packages. But this is an ongoing cat-mouse game, the http download handler is an essential component of a crawling framework and having no control over its release cycle leaves us with code that is hard to support.
The idea of this task is to depart from current Twisted code looking for a design that can cover current and future needs taking in count the goal is to deal with websites that doesn't follow standards to the letter.
Brief explanation | Profile and look for alternatives to the backend of our signal dispatcher based on pydispatcher lib. |
Expected results | The new signal dispatching implemented, documented and tested, with backwards compatibility support. |
Required skills | Python |
Difficulty level | Intermediate |
Mentor(s) | Daniel Graña |
Django moved out of pydispatcher by simplifying the api and improving its signal dispatching performance long time ago. Scrapy issue #8