Scraping trop long

Salut à tous,

Je m’amuse à scraper EUROPAGES en ce moment, mais effectivement avec 400.000 pages à visiter cela prend du temps.

Je cherche une solution pour aller vite, que ce soit en no code, ou en python si possible.

Merci :slight_smile:

Salut,

c’est protégé ?
C’est la France ou d’autres pays ?
Tu sais combien de requetes par seconde le site tient bien ?

je compte 125 k sociétés fr avec un site web, c’est interessant de récup ca

En python, çà semble faisable, soit à la main en utilisant suffisemment de proxies et des requetes en parallèle (multithreads ou mieux asyncio)

Mais çà c’est la solution un peu préhistorique, même si çà marche. Sinon avec un framework type scrapy çà se fait bien

Si tu galères contactes moi on peut en discuter, j’ai suffisamment de proxies pour ce type de site

1 « J'aime »

Aucune protection je bombarde a fond dessus sans soucis donc vraiment je cherche la solution qui va a balle

Je scrap tout le site
J’ai aps encore tester

ok premier test fait
test sur 3000 en moins d’une heure sans chercher à envoyer plein de requetes.
Passé par le sitemap, et je prends que les url de société pas de produit.
en 1 jour on peut en recup 70.000-80.000 , ca va. en y allant doucement.
Tu veux tout récup en 1 journée ?
je te conseil selenium ou puppeteer

1 « J'aime »

Yes j’ai déjà les URL de toutes les société par les produits, ensuite le but c’est d’aller sur chaque site chopé les mails.

Je ne suis pas à cette cadence car je fais tourner d’autres scrap en meme temps sur mes machines, mais je pense que la semaine pro j’aurais le fichier :slight_smile:

je vais essayer puppeteer car selenium parfois un peu longué quand meme
Ca fait bien le taf, mais ca prend son temps

De mon côté j’ai près d’1 millions de stés (France (150000) + Etranger) avec leur activité mais pas leur url

Hello, si tu a pas la foi de faire ça toi même, il y’a pas mal de gars qui font ce genre de gros scraps sur fiverr pour pas cher :slight_smile:

Meme pas besoin, prends un français qui a faim

Histoire vrai, y’a 1 an je scrapais ces sites ( ct pas au volume mais au temps ) pour 30 € , le script prend littéralement 5 min a faire. Mais ce n’est pas une vie, j’en avait fait 1200 en 1 an

4 « J'aime »

Si vous voulez utiliser des outils qui proposent une solution Cloud ? Par exemple, octoparse ? pour d’une part diviser le travail en plusieurs sous-tâches qui s’exécutent en même temps, ou d’autre part, avec une solution cloud, vous n’avez pas besoin de surveiller

Hello,
Tu peux utiliser la stack suivante (très efficace):
Scraper: Scrapy + Playwright (l’intégration playwright est vraiment bien)
Proxies: Scrapoxy + le connecteur AWS => avec 10 instances + le plugin pour faire la rotation dans Scrapy.
Fabien

2 « J'aime »

L’intégration playwright fonctionne bien mais uniquement sur linux à ma connaissance. Mais que çà soit playwright ou sélénium çà va être lent, car on lance un navigateur, je ne voie pas l’intérêt, scrapy va gérer çà tout seul sans navigateur et çà sera 10 ou 100x plus rapide.

J’utilise très rarement un navigateur, sauf si le site est très protégé, sinon il n’y a aucun intérêt, c’est même plus long et plus compliqué à coder je trouve.

1 « J'aime »

En python il y a aussi playwright.

Mais pour aller vite

  1. httpx / aiohttp et avoir un bon reseau.
  2. Diviser les tâches sur plusieurs machines et avoir une gestion de queue avec celery/ redis.
# tasks.py
from celery import Celery
from httpx import AsyncClient

app = Celery('tasks', broker='redis://<broker_address>:<port>/<db_number>')

@app.task
async def scrape(url):
    async with AsyncClient() as client:
        response = await client.get(url)
        # Process the response as needed

# main.py
from tasks import scrape

# List of URLs to scrape
urls = [...]

# Submit tasks
for url in urls:
    scrape.delay(url)

ça pourrait aussi être quelque chose du genre

# tasks.py
from celery import Celery
from netmiko import ConnectHandler

app = Celery('tasks', broker='redis://<broker_address>:<port>/<db_number>')

@app.task
def scrape_server(server):
    # Connect to server using Netmiko
    ssh_client = ConnectHandler(
        device_type=server['device_type'],
        host=server['host'],
        username=server['username'],
        password=server['password']
    )

    # Execute scraping commands
    # ...

    # Disconnect from server
    ssh_client.disconnect()

# main.py
from tasks import scrape_server

# List of servers to scrape
servers = [
    {'device_type': 'cisco_ios', 'host': 'router1.example.com', 'username': 'admin', 'password': 'password1'},
    {'device_type': 'cisco_ios', 'host': 'router2.example.com', 'username': 'admin', 'password': 'password2'},
    # Add more servers as needed
]

# Submit tasks
for server in servers:
    scrape_server.delay(server)

Mais les questions sont toujours :

  • Si c’est du one shot
  • Si c’est facile à maintenir.
  • Si la vitesse du reseau est bonne
  • Si il faut render le js,
  • Si il n’y a pas une undocumented API au lieux de scrap.
2 « J'aime »

@fabienv très cool scrapoxy! Tu as déjà tester Fireprox avec l’API Gateway AWS, je ne sais pas si ça marche toujours mais ça pourrait être une alternative intéressante non?

Firefox a une fingerprint moins reconnue que Chrome, donc ca passe mieux. Par contre, il est plus dure à « contrôler » avec les frameworks d’automation.
J’ai pas encore testé l’API Gateway AWS.

autant pour moi :slight_smile: merci

c’est pas compliqué … on le fait pour nos clients Datapult.ai (encore en BETA)
si tu veux m’en dire plus, envoie moi un MP !++