# Comment télécharger des ebooks depuis un .onion avec Python3 

> Dans ce tutoriel, nous allons voir comment télécharger des ebooks d’anarchistes gratuits depuis un site .onion. 

- **Author**: Sasha Bouloudnine
- **Published**: 2023-03-24 (24 mars 2023)
- **Reading time**: 7 min
- **Canonical**: https://www.lobstr.io/fr/blog/comment-telecharger-des-ebooks-depuis-un-onion-avec-python3-1
- **Also in**: en: https://www.lobstr.io/blog/download-ebooks-from-onion-link-python-requests

---

[Le darknet](https://en.wikipedia.org/wiki/Darknet) est un espace mystérieux du net, qui suscite intérêt et méfiance. On y trouve [des sites non-indexés par Google](https://www.quora.com/Why-doesnt-Google-index-the-Dark-Web-Deep-Web), avec des produits plus ou moins légaux: drogues, armes, contrefaçons.

Outre les produits illégaux, dont nous déconseillons bien entendu l’usage, on a également trouvé cette [exceptionnelle bibliothèque de livres anarchistes,](http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index) qui offre plus de **10000 références de livres d’inspiration anarchiste** au format .pdf et accessibles entièrement gratuitement. 

![download-ebooks-from-onion-link-python-requests-image-1.png](https://d37gzvgyugjozl.cloudfront.net/slug_telecharger_ebooks_depuis_lien_onion_python_requests_6c99b006be.png "width=628;height=309")

Accessible depuis [Tor](https://www.torproject.org/download/), avec son fameux lien en .onion: 
[http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index](http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index)

Pourtant, en si l’on essaye d’y accéder rapidement avec [Python3](https://www.python.org/downloads/), et [requests](https://requests.readthedocs.io/en/latest/): 

```python
import requests 
r = requests.get('http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index')
print(r.text)
```

**Impossible d’y accéder** — avec l’impossibilité de télécharger les éléments de la page:

![download-ebooks-from-onion-link-python-requests-image-2.png](https://d37gzvgyugjozl.cloudfront.net/telecharger_ebooks_depuis_lien_onion_python_requests_e53e5939c6.png "width=628;height=319")

Que faire?

Dans ce tutoriel, nous allons donc voir comment télécharger, avec [Python3](https://www.python.org/downloads/) et [requests](https://requests.readthedocs.io/en/latest/), plus de 100 .pdf accessibles gratuitement sur [le darknet](http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index). 

Et le code est disponible ici en intégralité:
https://gist.github.com/lobstrio/8d1c87203755d569da7ce2433179f099

En route vers les sombres contrées du darknet!

🥷

## Prérequis

Afin de réaliser ce tutoriel de bout en bout, soyez sur d’avoir **les éléments suivants installés** sur votre ordinateur.

* [python3 ](https://www.codecademy.com/article/install-python3)
* [SublimeText](https://www.sublimetext.com/3)

Vous pouvez cliquer sur les liens ci-dessous, qui vous dirigeront soit vers un tutoriel d’installation, soit vers le site en question.

Pour préciser l’utilité de chacun des éléments cités ci-dessus: python3 est le langage informatique avec lequel nous allons scraper les sites et télécharger les pdf, et SublimeText est un éditeur de texte. Sublime.

À nous de jouer.

## Installation

On va procéder comme suit: 

1. installer TorBrowser
2. installer le package tor

Pour la première étape, il suffit de se rendre ici: 
[https://www.torproject.org/download/](https://www.torproject.org/download/)

Télécharger ensuite le navigateur qui correspond à votre système d’exploitation. 
Ici pour moi, Mac OS: 

![telecharger-ebooks-depuis-lien-onion-python-requests.png](https://d37gzvgyugjozl.cloudfront.net/telecharger_ebooks_depuis_lien_onion_python_requests_a991238663.png "width=628;height=329")

Et suivez ensuite simplement les instructions d’installation: 

![download-ebooks-from-onion-link-python-requests-image-4.png](https://d37gzvgyugjozl.cloudfront.net/telecharger_ebooks_depuis_lien_onion_python_requests_f88294f692.png "width=454;height=347")

Enfin, on va installer[ requests](https://requests.readthedocs.io/en/latest/) qui permet de se déplacer sur Internet avec Python, [pysocks](https://pypi.org/project/PySocks/), qui va nous permettre de nous connecter au réseau de proxies de Tor avec Python, et [lxml](https://lxml.de/tutorial.html), qui permet de récupérer les éléments présents sur une page: 

```bash
$ pip3 install requests
$ pip3 install pysocks
$ pip3 install lxml
```

Enfin, on va installer Tor depuis la ligne de commande: 

**Mac OS**

D’abord on installe [brew](https://brew.sh/), l’outil d’installation de package de Mac OS: 

```bash
$ /usr/bin/ruby -e "$(curl -fsSL 
https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

Ensuite, on installe [tor](https://community.torproject.org/onion-services/setup/install/): 

```bash
$ brew install tor
```

On vérifie que tor est bien installé: 

```bash
$ brew info tor
==> tor: stable 0.4.7.10 (bottled)
```

Enfin, on lance le service:

```bash
$ brew services start tor
```

**Linux**

On installe le package: 

```bash
$ sudo apt install tor
```

Et on lance la machine: 

```bash
$ sudo /etc/init.d/tor start
```

Et voilà, nous sommes prêts à scraper, avec notre navigateur requests directement connecté aux proxies de Tor.

🔥

## Le code

Voilà le code en intégralité:

```python
import requests
from lxml import html
import time

print('~~ start')

anarchist_library_onion_link = "http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index"
latest_books_library_onion_link = "http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/latest?bare=1"

session = requests.session()
session.proxies = {'http': 'socks5h://localhost:9050', 'https': 'socks5h://localhost:9050'}


tor_ip = session.get("https://api.ipify.org/").text
local_ip = requests.get("https://api.ipify.org/").text
assert all([tor_ip, local_ip])
assert tor_ip != local_ip

response = session.get("http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/latest?bare=1", timeout=100)

doc = html.fromstring(response.text)
items = doc.xpath('//div[@class="list-group"]//div[@class="amw-listing-item"]')
for i, item in enumerate(items[:10]): 
	link = "".join(item.xpath('./a/@href'))
	print(link)
	
	response = session.get(link, timeout=100)
	assert response.ok
	item_page_doc = html.fromstring(response.text)
	
	pdf_link = "".join(item_page_doc.xpath('//span[@id="download-format-pdf"]/a/@href'))
	assert pdf_link
	pdf_name = pdf_link.split('/')[-1]

	pdf_response = session.get(pdf_link, stream=True)
	with open(pdf_name, 'wb') as fd:
	    for chunk in pdf_response.iter_content(2000):
	        fd.write(chunk)
	print('✅ %s (%s)' % (pdf_name, i+1))
	time.sleep(1)

print('~~ success')
print(""" _       _         _            
| |     | |       | |           
| | ___ | |__  ___| |_ __ __  
| |/ _ \| '_ \/ __| __/| '__|
| | (_) | |_) \__ \ |_ | |   
|_|\___/|_.__/|___/\__||_|   
                                
""")
```

Pour exécuter le code: 

1. télécharger le code .py
2. lancer le script via la ligne de commande

Et voilà ce qui va apparaître directement sur votre terminal: 

```bash
$ python3 scraping-anarchists-library-darknet-requests-tor-tutorial.py
~~ start
✅ kevin-carson-may-day.pdf (1)
✅ theodoros-karyotis-ioanna-maria-maravelidi-yavor-tarinski-asking-questions-with-the-zapatistas.pdf (2)
✅ rasmus-hastbacka-six-myths-about-union-action.pdf (3)
✅ asbo-bang-up-and-smash-2nd-edition.pdf (4)
✅ bob-black-fija.pdf (5)
~~ success
 _       _         _            
| |     | |       | |           
| | ___ | |__  ___| |_ __ __  
| |/ _ \| '_ \/ __| __/| '__|
| | (_) | |_) \__ \ |_ | |   
|_|\___/|_.__/|___/\__||_|
```

Et les précieux ebooks d’anarchistes, téléchargés gratuitement depuis le darknet, **directement sauvegardé sur votre ordinateur**: 

![download-ebooks-from-onion-link-python-requests-image-5.png](https://d37gzvgyugjozl.cloudfront.net/telecharger_ebooks_depuis_lien_onion_python_requests_bcce700913.png "width=628;height=159")
🤓

## Guide Complet

Le guide va se décomposer en 3 parties.

1. se connecter aux proxies Tor avec requests et Python
2. naviguer sur le site
3. télécharger les pdfs

### Tor Proxies

D’abord, connectons-nous aux proxies de Tor avec Python3 et requests, comme suit:

```python
session = requests.session()
session.proxies = {'http': 'socks5h://localhost:9050', 'https': 'socks5h://localhost:9050'}
```

C’est à partir du port 9050 que Tor se connecte à son pool de proxies. 
Pour plus d’informations, vous pouvez consulter [notre article dédié](https://www.lobstr.io/blog/how-to-scrape-data-anonymously-using-tor-proxies-and-python) à ce sujet.

Maintenant, on va accéder à [https://api.ipify.org](https://api.ipify.org/), une fois en utilisant tor, une fois en utilisant notre IP local:

```python
tor_ip = session.get("https://api.ipify.org/").text
local_ip = requests.get("https://api.ipify.org/").text
print(tor_ip)
print(local_ip)
```

Et le résultat est clair: 

```bash
$ python3 scraping-anarchists-library-darknet-requests-tor-tutorial.py
5.45.106.207
80.125.29.188
```

2 IPs différentes — **nous sommes bien connectés aux proxies de Tor**!

Maintenant essayons de nous connecter au site: 

```python
response = session.get(latest_books_library_onion_link, timeout=100)
print(response.status_code)
```

Et ici encore, en lançant le script, le message est clair: 

```bash
$ python3 scraping-anarchists-library-darknet-requests-tor-tutorial.py
200
```

Plus de page inaccessible. **Nous accèdons positivement à ce site présent sur le darknet de façon programmatique, avec requests et Python**.

🐍

### Page de résultats

Maintenant, nous allons naviguer sur le site.

D’abord, ouvrez Tor Browser, et rendez-vous sur le site en .onion: 
[http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index](http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index)

Une fois que vous êtes sur le site, ouvrez votre console d’inspection, avec clique droit + Inspect, puis sélectionnez la partie Network. 

![download-ebooks-from-onion-link-python-requests-image-6.png](https://d37gzvgyugjozl.cloudfront.net/telecharger_ebooks_depuis_lien_onion_python_requests_af83e1f952.png "width=628;height=447")

Appuyez ensuite sur l’icône de recherche (1) ci-dessous, ce qui va ouvrir l’outil de recherche de requêtes: 

![download-ebooks-from-onion-link-python-requests-image-7.png](https://d37gzvgyugjozl.cloudfront.net/telecharger_ebooks_depuis_lien_onion_python_requests_746c935b64.png "width=628;height=443")

Rechargez la page, et dans l’outil de recherche, sélectionnez un des mots présents sur la page, ici “A short history of May Day”:

![download-ebooks-from-onion-link-python-requests-image-8.png](https://d37gzvgyugjozl.cloudfront.net/telecharger_ebooks_depuis_lien_onion_python_requests_b4441e11df.png "width=628;height=449")

Une requête apparaît!
C’est l’URL de cette requête que nous allons récupérer, et insérer directement dans notre code en Python:

```python
response = session.get("http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/latest?bare=1", timeout=100)
```

Maintenant, nous allons récupérer l’URL de chacune des pages de chaque ouvrage.

En ouvrant la partie *Inspector* de l’outil d’inspection, on se rend compte que chaque page d’ouvrage est située dans une div qui a pour classe 'amw-listing-item': 

![download-ebooks-from-onion-link-python-requests-image-9.png](https://d37gzvgyugjozl.cloudfront.net/telecharger_ebooks_depuis_lien_onion_python_requests_7b05f9f038.png "width=628;height=341")

On récupère ce xPath, et enfin, pour chaque `div`, on va aller chercher le lien présent au sein de l’attribut ‘href’ de la balise ‘a’.

Voilà le code: 

```python
response = session.get("http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/latest?bare=1", timeout=100)

doc = html.fromstring(response.text)
items = doc.xpath('//div[@class="list-group"]//div[@class="amw-listing-item"]')
for i, item in enumerate(items[:10]): 
	link = "".join(item.xpath('./a/@href'))
	print(link)
```

Et lorsqu’on le lance depuis la ligne de commande, les liens apparaissent distinctement: 

```bash
$ python3 scraping-anarchists-library-darknet-requests-tor-tutorial.py
http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/library/kevin-carson-may-day
http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/library/theodoros-karyotis-ioanna-maria-maravelidi-yavor-tarinski-asking-questions-with-the-zapatistas
http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/library/rasmus-hastbacka-six-myths-about-union-action
http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/library/asbo-bang-up-and-smash-2nd-edition
http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/library/bob-black-fija
```

Magnifique!

Ne nous reste plus qu’à: 

1. nous rendre sur la page de chaque ouvrage
2. télécharger le livre au format .pdf

### Page d’ouvrage

D’abord, on se rend sur la page d’ouvrage avec requests: 

```python
response = session.get(link)
```

Puis depuis le TorBrowser, une fois sur la page d’ouvrage, inspecte la zone avec le lien vers le pdf: 

![download-ebooks-from-onion-link-python-requests-image-10.png](https://d37gzvgyugjozl.cloudfront.net/telecharger_ebooks_depuis_lien_onion_python_requests_6dc1a934e4.png "width=628;height=425")

Il apparaît que le lien se trouve en suivant ce [xPath](https://www.w3schools.com/xml/xpath_intro.asp):

```python
 '//span[@id="download-format-pdf"]/a/@href'
```

Enfin, [on télécharge le document avec requests](https://stackoverflow.com/questions/34503412/download-and-save-pdf-file-with-python-requests-module): 

```python
pdf_link = "".join(item_page_doc.xpath('//span[@id="download-format-pdf"]/a/@href'))
assert pdf_link
pdf_name = pdf_link.split('/')[-1]

pdf_response = session.get(pdf_link, stream=True)
with open(pdf_name, 'wb') as fd:
    for chunk in pdf_response.iter_content(2000):
        fd.write(chunk)
```

Et voilà, le tour est joué!

## Bénéfices

Ce code va vous permettre de **télécharger des documents .pdf avec** [requests](https://requests.readthedocs.io/en/latest/) **et** [Python3](https://www.python.org/downloads/), **directement depuis un site .onion** présent sur le dark net.

Un[ bénéfice culturel](https://www.google.fr/search?source=hp&ei=TFNOWrXLMIj5UICGuLAP&btnG=Rechercher&q=why+read+anarchists+book&oq=google+maps&gs_l=psy-ab.3..35i39k1j0l3j0i131k1l3j0l3.326.1746.0.1833.12.8.0.0.0.0.220.584.0j2j1.3.0....0...1c.1.64.psy-ab..9.3.583.0..0i67k1j0i131i67k1.0.0GbPiF4lFwk#bsht=CgRmYnNtEgYIBBAAGAs) évident.

## Limitations

Si ce script en Python permet de se connecter à un site .onion avec [Python3](https://www.python.org/downloads/) et [requests](https://requests.readthedocs.io/en/latest/), vous ne pourrez télécharger qu’une seule page de résultats. La pagination n’est, elle, pas prise en charge.

Par ailleurs, ce tutoriel ne concerne que la librairie anarchiste présente sur le darknet, accessible via cet URL .onion: [http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index](http://libraryqxxiqakubqv3dc2bend2koqsndbwox2johfywcatxie26bsad.onion/special/index). 

Pour accéder à d’autres sources de données, il va falloir modifier le script conjointement.

**Attention, enfin, ce tutoriel est à usage purement éducatif**. 

Nous nous dégageons donc de toute responsabilité quant à l’usage immodéré qui pourrait en être fait, notamment sur des sites liés à d’autres types de services ou d’autres types de données. Par ailleurs, nous souhaitons vous rappeler que, selon la législation du pays dans lequel vous opérez, il est strictement interdit de posséder des textes protégés par le droit d’auteur, sans offrir la rémunération juste qui en revient à l’auteur. Aussi, nous vous recommandons fortement de consulter les législations en vigueur dans votre pays d’exercice avant de vous engager dans une quelconque démarche de développement informatique comme illustré ci-avant.

## Conclusion

Et c’est la fin du tutoriel!

Dans ce tutoriel, nous avons vu comment télécharger des .pdf depuis une librairie anarchiste en .onion présente sur le darknet, avec [requests](https://requests.readthedocs.io/en/latest/)et [Python3](https://www.python.org/downloads/).

Si vous avez des questions, ou si vous avez besoin d’un service de scraping sur-mesure, solide et scalable, nous restons bien entendu à votre disposition [ici](https://www.lobstr.io/custom).

Happy scraping!

🦀

---

## Related articles

- [Comment scraper anonymement avec Python et des Tor Proxies?](https://www.lobstr.io/fr/blog/comment-scraper-avec-des-tor-proxies-et-python)
- [Comment scraper des PDFs avec Python3 et Tika?](https://www.lobstr.io/fr/blog/comment-scraper-des-pdfs-avec-python3-et-tika)

Tags: Code

_Canonical HTML: https://www.lobstr.io/fr/blog/comment-telecharger-des-ebooks-depuis-un-onion-avec-python3-1_

More for agents: https://www.lobstr.io/llms.txt, pricing in Markdown: https://www.lobstr.io/pricing.md
