Maison >développement back-end >Tutoriel Python >Que dois-je faire si le robot d'exploration Python rencontre une redirection de page Web lors de l'exploration de la page Web ?

Que dois-je faire si le robot d'exploration Python rencontre une redirection de page Web lors de l'exploration de la page Web ?

尚
original
2019-06-28 13:58:077905parcourir

Que dois-je faire si le robot d'exploration Python rencontre une redirection de page Web lors de l'exploration de la page Web ?

Les robots des moteurs de recherche rencontreront des situations dans lesquelles la page Web est redirigée lors de l'exploration de la page. La soi-disant redirection se fait par diverses méthodes (les trois mentionnées dans cet article) Rediriger diverses requêtes réseau. vers d'autres emplacements (URL). La page d'accueil de chaque site Web constitue l'accès aux ressources du site Web. Lorsqu'une redirection se produit sur la page d'accueil du site Web, si elle n'est pas gérée correctement, le contenu de l'ensemble du site Web risque de ne pas être détecté.

1. La redirection côté serveur s'effectue côté serveur De manière générale, les robots peuvent s'adapter et n'ont pas besoin de traitements particuliers, comme les codes de réponse 301 (redirection permanente), 302 (redirection temporaire), etc. . Plus précisément, cela peut être jugé par les deux attributs url et status_code dans l'objet de réponse obtenu par les requêtes. Lorsque status_code est 301, 302 ou d'autres codes représentant la redirection, cela signifie que la demande d'origine a été redirigée ; lorsque l'attribut url de l'objet de réponse est incohérent avec le lien lors de l'envoi de la demande, cela signifie également que la demande d'origine a été redirigée ; et a été traité automatiquement.

#请求重定向
#方法一
response.setStatus(302);
response.setHeader("location", "/day06/index.jsp");
        
#方法二
response.sendRedirect("/day06/index.jsp");

Scrapy Shell obtient la page redirigée

scrapy shell -s ROBOTSTXT_OBEY=False --no-redirect " 
fetch(response.headers['Location'])

2. Meta rafraîchissement, c'est-à-dire que la balise e8e496c15ba93d81f6ea4fe5f55a2244 complété par le navigateur, vous devez écrire du code pour le traiter. Par exemple, si une certaine redirection est affichée dans le commentaire de la troisième ligne du code HTML ci-dessous, le navigateur peut sauter automatiquement, mais le robot d'exploration ne peut obtenir la page qu'avant le saut et ne peut pas sauter automatiquement.

<html>
<head>  
  <meta http-equiv="refresh" content="0.1;url=http://www.redirectedtoxxx.com/"><!--本网页会在0.1秒内refresh为url所指的网页-->
</head>
</html>

La solution est d'obtenir le code source de la page avant le saut et d'extraire les informations de l'url de redirection (la valeur de l'attribut url dans la troisième ligne du code ci-dessus). Une opération spécifique :

① Utiliser xpath('//meta[@http-equiv="refresh" and @content]/@content') pour extraire la valeur du contenu

②Utiliser Regular expression extrait la valeur de l’URL redirigée.

3. redirection js, redirection via du code JavaScript. Par exemple, le code JavaScript suivant

<script language=javascript>window.location.href=&#39;http://www.redirectedtoxxx.com&#39;</script>

est le plus simple à résoudre si la page Web contient du contenu. De manière générale, il s'agit essentiellement du contenu de la page Web statique qui a été codée en dur, ou du Web dynamique. La page est rendue à l'aide d'un modèle et le navigateur obtient le HTML. Il contient déjà toutes les informations clés, de sorte que le contenu que vous voyez directement sur la page Web peut être chargé avec du code javascript via des balises HTML spécifiques. Cette situation est due au fait que le contenu est. dans la balise HTML lorsque la page Web est affichée, en fait, c'est parce que le code js est exécuté et ajouté à la balise, donc le contenu est dans le code js à ce moment-là, et l'exécution js est effectuée du côté du navigateur, Ainsi, lorsqu'un programme est utilisé pour demander l'adresse d'une page Web, la réponse obtenue est le code de la page Web et le code js, vous pouvez donc voir le contenu du côté du navigateur. Puisque le js n'est pas exécuté lors de l'analyse, le contenu sous le spécifié. La balise HTML doit être vide. La solution à ce stade est généralement de trouver le code js contenant la chaîne, puis d'obtenir le contenu correspondant via des expressions régulières au lieu d'analyser les balises HTML.

Pour plus d'articles techniques liés à Python, veuillez visiter la colonne Tutoriel Python pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn