AioScrape
A scraping library on top of aiohttp and parsechain. Note that this is alpha software.
Installation
pip install aioscrape
Usage
from aioscrape import run, fetch, settings
from aioscrape.middleware import last_fetch, make_filecache
from aioscrape.utils import SOME_HEADERS # To not look like a bot
from urllib.parse import urljoin
from parsechain import C
from funcy import lcat, lconcat
def main():
# Settings are scoped and can be redefined later with another "with"
cache = make_filecache('.fcache')
with settings(headers=SOME_HEADERS, middleware=[cache, last_fetch]):
print(run(scrape_all()))
async def scrape_all():
# All the settings in scope like headers and middleware are applied to fetch()
start_page = await fetch(START_URL)
# AioScrape integrates with parsechain to make extracting a breeze
urls = start_page.css('.pagingLinks a').attrs('href')
list_urls = [urljoin(start_page.url, page_url) for page_url in urls]
# Using asyncio.wait() and friends to run requests in parallel
list_pages = [start_page] + await wait_all(map(fetch, list_urls))
# Scrape articles
result = lcat(await wait_all(map(scrape_articles, list_pages)))
write_to_csv('export.csv', result)
async def scrape_articles(list_page):
urls = list_page.css('#headlines .titleLink').attrs('href')
abs_urls = [urljoin(list_page.url, url) for url in urls]
return await wait_all(map(scrape_article, abs_urls))
async def scrape_article(url):
resp = await fetch(url)
return resp.root.multi({
'url': C.const(resp.url),
'title': C.microdata('headline').first,
'date': C.microdata('datePublished').first,
'text': C.microdata('articleBody').first,
'contacts': C.css('.sidebars .contact p')
.map(C.inner_html + html_to_text) + lconcat + ''.join,
})
if __name__ == '__main__':
main()
TODO
Response.follow()
non-GET requests
work with forms
Metadata
Release files for aioscrape 0.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aioscrape-0.0.2.tar.gz | 6.5 kB | Without provenance | Details for aioscrape-0.0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aioscrape-0.0.2-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details for aioscrape-0.0.2-py2.py3-none-any.whl |
Total release size: 15.5 kB
Release files / aioscrape-0.0.2.tar.gz
| Download URL | aioscrape-0.0.2.tar.gz |
|---|---|
| Size | 6.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0610acaf29b493b94cc7e9744f10ebbfc25d836e05e9100b2a28d50b1ab71bbd
|
|
BLAKE2b-256 checksum How to use checksums |
ac7693fa57f4c0458a1dc1de563ab0ce6d40fada2cecc5df13abaa7e0afaefc1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Python-urllib/2.7
|
Release files / aioscrape-0.0.2-py2.py3-none-any.whl
| Download URL | aioscrape-0.0.2-py2.py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
80e16ade3c66d571de176a59b44eba5b5762868dcb380839eed31a7d5dc8c6b7
|
|
BLAKE2b-256 checksum How to use checksums |
b0b64e86c9d78cf1716e451d3cb70d2ff0e1ac48d2448ba01e81b3653a3c128d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Python-urllib/2.7
|
Security for aioscrape 0.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.