https://www.reddit.com/r/gameofthrones/ p>
Dans cette page, j'essaie d'obtenir des informations d'heure à partir d'un texte de temps comme "il y a 14 jours".
Dans le navigateur, lorsque je déplace un point de la souris sur ce texte, il affiche les informations basées sur la date et l'heure. Mais si je consulte la source de la page Web, je ne la trouve pas. Je pense donc que cela fonctionne basé sur Javascript.
Je ne suis pas développeur Web et je ne sais pas comment puis-je retracer le problème.
Ma question est la suivante: comment puis-je suivre les données fonctionnant en fonction du javascript à l'aide des outils de développement chrome et de scrapy shell?
4 Réponses :
>>> response.css('[data-click-id="timestamp"]::text').get() '15 days ago'
Ce n'est pas ce que recherche la question. Lorsque vous survolez le texte «Il y a X jours», une fenêtre contextuelle s'affiche avec la date et l'heure complètes. Ces données ne sont pas disponibles directement dans le HTML, sauf si vous déclenchez l'événement Javascript.
lorsque vous essayez de déplacer la souris sur ce mot, il s'affiche comme "thu feb 07 2019 ......." Je veux obtenir ces informations et cela montre ces informations sur l'explorateur en utilisant la balise time et title ... . OMG
@malberts Je suppose que montrer uniquement les informations de travail basées sur html par l'explorateur. mais le chrome est différent .. Il n'a jamais montré l'étiquette de temps et les informations ... Donc je suppose que cela fonctionne avec javascript.
@bluebamus Oui, il affiche le texte contextuel avec Javascript. La date / heure complète n'est pas masquée dans le HTML. Au lieu de cela, il est stocké dans des objets Javascript auxquels vous ne pouvez pas accéder directement à partir de Scrapy.
Reddit dispose d'une API officielle . Dans ce cas, j'envisagerais sérieusement de l'utiliser au lieu du scraping HTML.
D'un autre côté, si vous voulez vraiment faire du scraping HTML, je vous suggère d'utiliser quelque chose comme Scrapy Splash pour déclencher ce Javascript. Essayer de trouver les données brutes cachées dans les objets Javascript ne vaut probablement pas la peine. Surtout si le Javascript effectue un traitement supplémentaire que vous devrez répliquer car il ne fonctionnera pas sur Scrapy de toute façon.
Merci mec. avant de le vérifier par l'explorateur, je suppose que cela fonctionne basé sur javascript. mais pas maintenant ... je confond. chrome dev-tools n'affiche pas de balise de temps, mais les outils de développement de l'explorateur le montrent .... même si j'utilise Scrapy Splash, peut-il détecter les informations de temps? ...
@bluebamus Scrapy Splash peut exécuter Javascript. Vous lui enverrez donc une commande pour survoler le texte "il y a X jours" et vous pourrez ensuite obtenir le texte. Lorsque vous passez la souris, il ajoute un
@bluebamus Pouvez-vous ajouter un écran montrant comment les outils de développement Explorer le montrent?
sûr! J'ai fait. il montre l'heure et la balise de titre ... Donc, je suis déroutant .. Comment fonctionne le chrome pour cela ... Je ne suis pas sûr que le code html de chrome utilise un javascript ...
J'ai trouvé une solution. J'écrirai une nouvelle réponse.
il s'agit du même résultat d'URL pour " reddit.com/r/gameofthrones ". et pouvez-vous vérifier ce résultat avec Chrome dev-tools?
oh .. réponse modifiée ...: D
Vous devez utiliser le sous-domaine en lecture seule de Reddit (sans participation):
https: / /np.reddit.com/r/gameofthrones/
Notez qu'il s'agit de np
et non de www
. Dans cette vue, vous obtenez la date et l'heure complètes dans le HTML dans la balise (dans n'importe quel navigateur) sans exécuter Javascript:
Example:
scrapy shell 'https://np.reddit.com/r/gameofthrones/' >>> response.css('time::attr(datetime)').get() '2010-03-02T22:52:12+00:00'
Je pensais qu'il était basé sur un site dynamique. hmm ... gère-t-il la navigation multi-web par redirection de domaine? Je ne comprends pas. Comment cela s'affiche sur " np.reddit.com/r/gameofthrones ". 'raddit' sert-il au-dessus du service de domaine? ou est-ce une autre solution de service de site Web en lecture seule?
Si vous connaissez cette réponse, pourriez-vous me dire pourquoi? s'il vous plaît: D
Les deux domaines appartiennent à Reddit. Ils servent différents HTML et Javascript sur différents sous-domaines (mais toujours le même contenu). Je ne sais pas s'ils effectuent une redirection automatique. Mais en gros, utilisez simplement la version np
.
Merci pour votre réponse. Cela m'a permis d'améliorer mes connaissances. :RÉ