Scraper une page LinkedIn depuis une VM Linux en Python.

Bonjour à tous!
J’ai un souci concernant le scraping :
Je tente de scraper les descriptions de jobs de certaines pages LinkedIn à partir d’une machine virtuelle Linux.
Pour cela, j’utilise le code suivant :

import requests
from bs4 import BeautifulSoup
headers = {'User-agent': 'Aaze!/;:0)'}
url = "https://www.linkedin.com/jobs/view/2440639573/?alternateChannel=search&refId=pwXhK%2BJFcP3C%2FNuBBvGMfg%3D%3D&trackingId=t2dVnmtv2%2Fduw50OlQDjNQ%3D%3D"
r = requests.get(url, headers=headers)
rep_http = r.status_code  # http response
soup = BeautifulSoup(r.text, 'lxml')
mission = soup.find('div', class_=lambda value: value and value.startswith("show-more-less-html"))
print(mission.text)

Ce code fonctionne parfaitement en local, mais dès que je le lance sur une VM (linux, AWS ec2) Linkedin me me refuse la requête HTTP.
Voici le message d’erreur que j’obtiens :

image

J’ai vu sur StackoverFlow que les IP provenant d’AWS étaient blacklistées, avez vous une idée de comment procéder? Un « header » particulier à mettre dans la requête, un proxy peut etre?

PS : J’ai également tenté avec Selenium (en lançant un webdriver) et cela fonctionne aussi très bien en local, mais toujours pas sur la VM.

Merci beaucoup d’avoir lu jusqu’ici et pour vos réponses.

Pour passer par un proxy avec le module requests, c’est très simple, il suffit de créer un dictionnaire qui contient en clé le protocole et en valeur l’IP suivi du port. On passe ensuite le dictionnaire en argument de proxies. Proxies with Python 'Requests' module - Stack Overflow

Mais je ne sais pas si c’est le problème. Souvent les instances gratuites interdisent les requêtes externes pour éviter le flood, piratage, etc. Il faut alors passer par un compte payant pour débloquer cette fonctionnalité.

Merci pour ta réponse @TitanX! :slight_smile: j’ai testé entre temps l’utilisation d’un proxy mais la connexion est longue et est finalement refusée (j’avais pris un proxy élite gratuit - basé en France sur un site de référencement).
Quand tu parles de compte payant, tu parles de l’instance aws? Car c’est une instance payante que j’utilise.

Oui je parlais de l’instance AWS. J’avais eu le problème chez pythonanywhere pour faire des requêtes vers l’extérieur (il fallait passer par un compte payant). Mais si ton instance AWS est payante alors le problème ne vient sûrement pas de là. C’est effectivement peut être linkedin qui bloque les requêtes d’AWS.

Essaie de trouver un autre proxy (ça ne fonctionne pas toujours du premier coup) en testant d’abord en local puis sur AWS.