Besoin d'aide sur Python (gros noob inside)

scrapy
#1

Hello

Le contexte:
Comme je suis vraiment cingl passionné de whisky, je passe bien trop beaucoup de temps sur des sites d’enchères de whisky. Mais quand on achète aux enchères, il faut savoir quand s’arrêter car le prix n’est plus intéressant par rapport au commerce. Du coup, je me suis d’abord développer un scraper en… macro excel, qui interroge un ensemble de sites internet pour trouver les références de whisky qui m’intéressent, et leur prix (pour l’instant, j’interroge 7 sites différents dont 3 amazon - FR, ES et DE, mais d’autres sont prévus). Le souci, c’est que c’est lent.

Du coup, j’ai cherché un peu sur l’internet multimédia, et j’ai trouvé scrapy qui a l’air pas mal, qui est un package (ou une librairie?) en python. Sauf que je connais pas python.
Bon, un langage, ça s’apprend, on va apprendre sur le tas.

Le contexte technique (ah quand même):
Je suis sous Windows 10 (mais je me demande si je vais pas foutre ça sur un raspberry pi 3b), j’ai installé python 3.7.0 x64, miniconda, et j’ai installé scrapy (c’est la 1.5.1). J’ai également pour développer installé VisualStudio Code avec l’extension python.

Le problème
Je veux utiliser scrapy, qui entre autre contient un exe, et qui a été installé par miniconda, sauf que, que ce soit d’un cmd ou d’un shell python, ça ne se lance pas. Comme le scrapy.exe est planqué dans C:\ProgramData\Miniconda3\pkgs\scrapy-1.5.1-py36_0\Scripts ma question est: dois-je tout mettre dans le PATH? Comment installer des trucs facilement et les utiliser dans la foulée?
Bref, une fois que j’arriverai à lancer scrapy (je peux aussi le lancer depuis un script mais je veux faire ça une fois que j’aurai un peu joué avec le scrapy shell), j’arriverai probablement à me débrouiller, mais je n’arrive pas à démarrer. Comment faire?

TL,DR
Comment on utilise un package python qui contient un .exe, sous Windows, le package étant installé avec miniconda et l’exe dans un chemin à la con?

Merci!

#2

Hello,

Je suis tombé là dessus, non testé, a priori seul le début de l’article te concerne. https://makina-corpus.com/blog/metier/2016/compile_python_wheels_windows/compiler-les-librairies-python-sous-windows

Et comme tu es passé par Anaconda, enfin le petit, tu peux lire cela (non testé), peut-être à utiliser à la place de mon précédent paragraphe.

#3

Alors …

Normalement si tu lance le shell conda il a déja une sorte de path dans mes souvenirs ou tout les modules en exe sont accessible.

Regarde pipenv …
(cela te permet de faire un environnement virtuel , de gérer confortablement tes modules, et de lancer un shel dans cet environnement virtuel).

http://sametmax.com/pipenv-solution-moderne-pour-remplacer-pip-et-virtualenv/ (avec des bouts de nsfw dedans).

Ensuite scrapy mouif pour avoir fait pas mal de projets dans ce domaine la, perso j’ai utilisé

Requests :

http://docs.python-requests.org/en/master/

et Beautiful soup :

https://www.crummy.com/software/BeautifulSoup/bs4/doc/

1 Like
#4

Je vais regarder tout ça, merci :slight_smile:

1 Like
#5

Je te file un bout de code :

bussiere@kusanagi [23:11:24] [~/Workspace/ColdFire]
-> % pipenv install
Creating a virtualenv for this project…
Pipfile: /home/bussiere/Workspace/ColdFire/Pipfile
Using /usr/bin/python3 (3.5.2) to create virtualenv…
⠋Already using interpreter /usr/bin/python3
Using base prefix ‘/usr’
New python executable in /home/bussiere/.local/share/virtualenvs/ColdFire-AAWlMZ01/bin/python3
Also creating executable in /home/bussiere/.local/share/virtualenvs/ColdFire-AAWlMZ01/bin/python
Installing setuptools, pip, wheel…done.
Setting project for ColdFire-AAWlMZ01 to /home/bussiere/Workspace/ColdFire

Virtualenv location: /home/bussiere/.local/share/virtualenvs/ColdFire-AAWlMZ01
Creating a Pipfile for this project…
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (a79791)!
Installing dependencies from Pipfile.lock (a79791)…
:snake: ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 — 00:00:00
To activate this project’s virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
bussiere@kusanagi [23:11:37] [~/Workspace/ColdFire]
-> % pipenv shell
Launching subshell in virtual environment…
. /home/bussiere/.local/share/virtualenvs/ColdFire-AAWlMZ01/bin/activate
bussiere@kusanagi [23:11:44] [~/Workspace/ColdFire]
-> % . /home/bussiere/.local/share/virtualenvs/ColdFire-AAWlMZ01/bin/activate
(ColdFire-AAWlMZ01) bussiere@kusanagi [23:11:56] [~/Workspace/ColdFire]
-> % pip install requests beautifulsoup4
Collecting requests
Using cached https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl
Collecting beautifulsoup4
Downloading https://files.pythonhosted.org/packages/21/0a/47fdf541c97fd9b6a610cb5fd518175308a7cc60569962e776ac52420387/beautifulsoup4-4.6.3-py3-none-any.whl (90kB)
100% |████████████████████████████████| 92kB 1.1MB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Collecting idna<2.8,>=2.5 (from requests)
Using cached https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests)
Downloading https://files.pythonhosted.org/packages/df/f7/04fee6ac349e915b82171f8e23cee63644d83663b34c539f7a09aed18f9e/certifi-2018.8.24-py2.py3-none-any.whl (147kB)
100% |████████████████████████████████| 153kB 2.5MB/s
Collecting urllib3<1.24,>=1.21.1 (from requests)
Using cached https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c53851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl
Installing collected packages: chardet, idna, certifi, urllib3, requests, beautifulsoup4
Successfully installed beautifulsoup4-4.6.3 certifi-2018.8.24 chardet-3.0.4 idna-2.7 requests-2.19.1 urllib3-1.23

ensuite tu as juste a faire un :

python scriptName.py

(tape exit pour quitter le virtual env de pipenv)

Tu peux meme poster un login

import requests
url_0 = “https://www.toto.com/login
data = {
“urlRedirection”: {url},
“password”: {“Charlotte”},
“login”: {“therese@gmail.com”},
}
headers = {
“User-Agent”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36”
}
s = requests.session()
s.post(url_0, data, headers=headers)
r = s.get(url, headers=headers)
data = r.content.decode(“utf-8”)

Mais on va faire un peu plus simple :

import requests
from bs4 import BeautifulSoup

response = requests.get("https://www.geekzone.fr/")
data = response.text
print(data)


soup = BeautifulSoup(data, 'html.parser')

# Find First NEws (first element with rel attribut = bookmark") 
news = soup.find(rel="bookmark")
print(news)

# Find All  NEws  (all elements with rel attribut = bookmark") 
news = soup.find_all(rel="bookmark")
print(news)

for n in news :
    print(n)
    # here it prints the render of html ex : <a href="">Toto</a> just gives Toto
    print(n.text)

Bon par contre par rapport a scrapy quand tu veux des ips differentes et faire plusieurs thread ca demande un peu de boulot.