9
votes

Comment envoyer JavaScript et des cookies activés dans Scrapy?

Je raclage un site Web à l'aide de Scrapy nécessitant une cuisson et un script Java à être activé. Je ne pense pas que je devrai réellement traiter JavaScript. Tout ce dont j'ai besoin, c'est de prétendre que JavaScript soit activé.

Voici ce que j'ai essayé: 1) Activez les cookies en suivant les paramètres xxx

2) en utilisant le middleware de téléchargement pour les cookies xxx

3) Envoyer 'x x -JavaScript-activé ':' vrai ' xxx

mais aucun d'entre eux ne fonctionne avec moi. Pouvez-vous s'il vous plaît suggérer une idée ou me donner une certaine direction?

Merci d'avance pour vos réponses.


0 commentaires

3 Réponses :


1
votes

Scrapy ne prend pas en charge Java Script.

mais

Vous pouvez utiliser une autre bibliothèque avec SCRAPY pour exécuter JS, comme webkit, sélénium, etc.,

Et vous n'avez pas besoin d'activer les cookies ( cookies_enabled = true ), même pas nécessaire pour ajouter downloader_middlewares dans votre paramètres.py Parce qu'ils sont déjà disponibles dans Paramètres de skérapie par défaut


1 commentaires

Akhter, merci pour la réponse. Comme je l'ai dit, je n'aurai besoin de traiter JavaScript. Le serveur ne me donnera pas une page réelle si la graine de graines JavaScript n'est pas activée sur la source demandeur. J'ai juste besoin d'envoyer un signal au serveur que JavaScript et les cookies sont activés.



4
votes

afaik, il n'y a pas de solution universelle. Vous devez déboguer sur le site, pour voir comment il détermine que JavaScript n'est pas pris en charge / activé par votre client.

Je ne pense pas que le serveur regarde x-javascript-activé en-tête. Peut-être qu'il y a un cookie défini par JavaScript lorsque la page se charge dans un vrai navigateur compatible JavaScript? Peut-être que le serveur regarde utilisateur utilisateur en-tête?

Voir aussi cette réponse .


0 commentaires

6
votes

Vous devriez essayer Splash JS Moteur avec Scrapyjs . Voici un exemple de comment le configurer dans votre projet d'araignée: xxx pré>

HUB de raclage Quelle est la même société derrière Scrapy, a Instances spéciales pour exécuter vos araignées avec Splash activé.

RENDUMENT SPLASHREQUEST CODE> au lieu de Demande CODE> dans votre araignée comme ceci: p>

import scrapy
from scrapy_splash import SplashRequest

class MySpider(scrapy.Spider):
    start_urls = ["http://example.com", "http://example.com/foo"]

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse,
                endpoint='render.html',
                args={'wait': 0.5},
            )

    def parse(self, response):
        # response.body is a result of render.html call; it
        # contains HTML processed by a browser.
        # …


0 commentaires