2017-10-21 22 views
0

Ma version python est 3.6.3. et mon OS est WIN7. Je travaille maintenant sur l'extraction des caractères chinois d'un site Web ci-dessous: https://crl.ptopenlab.com:8800/poem/show?3&%25E5%258F%2591%25E7%2594%259F&A718FCB2-CE47-4649-BB46-0E09B169FD59Impossible d'obtenir des caractères chinois avec Beutifulsoup4 dans python3.x sous Windows OS

Les éléments que je veux extrait les personnages sont intégrés dans les codes HTML ci-dessous:

<div id="poemcontent" style="top: 82.4px;"> 
     <div id="title">发生</div> 
     <div class="poembody">发情犹是梦</div> 
     <div class="poembody">生意未能行</div> 
     <div class="poembody">独坐青山下</div> 
     <div class="poembody">还看白日明</div> 

    </div> 

Mes codes python sont:

import urllib.request 
res=urllib.request.urlopen("https://crl.ptopenlab.com:8800/poem/show?3&%25E5%258F%2591%25E7%2594%259F&A718FCB2-CE47-4649-BB46-0E09B169FD59").read() 

from bs4 import BeautifulSoup 

soup = BeautifulSoup(res,from_encoding="RTF-8") 

body=soup.body 
print(body.div.next_sibling.next_sibling.next_sibling.next_sibling.next_sibling.next_sibling.contents) 

Ce code n'extrait pas vraiment les caractères chinois de exclusivement. Je veux juste vérifier si les caractères chinois peuvent être affichés correctement. Malheureusement, le résultat est pas ce que je pensais:

['\n', <div id="title"></div>, '\n', <div class="poembody"></div>, '\n', <div class="poembody"></div>, '\n', <div class="poembody"></div>, '\n', <div class="poembody"><img height="100px" src="static/images/write.gif" width="100px"/></div>, '\n'] 

Si j'extraire le premier élément de la liste, il affiche comme:

<div id="title"></div> 

Voilà le problème, il n'y a pas de caractère affiché!

J'ai essayé d'extraire des caractères chinois sur d'autres sites Web en utilisant des codes python similaires que les caractères que j'ai explorés peuvent être affichés normalement. Aucun d'eux ne s'est comporté comme celui-ci.

J'ai modifié plusieurs méthodes de codage, mais cela n'a pas fonctionné. Comment puis-je résoudre ce problème? Merci!

Répondre

0

La raison pour laquelle vous n'obtenez pas le contenu poembody est que tout est généré via un appel AJAX une fois la page chargée. L'extraction de la page ne récupérera pas ce contenu.

Vous pouvez déclencher manuellement les appels AJAX et collecter leur contenu, avec les bonnes entrées. Plus précisément, appelez getPoems(), qui prend trois arguments, type, subject et uuid. Ces valeurs à leur tour sont analysées à partir du window.location.search générique. Consultez le fichier poem-0.0.76.js pour plus de détails, lié à la balise <head> de l'URL que vous avez fournie. Avec un peu de recul, il devrait être possible de tout rassembler pour obtenir les poèmes dont vous avez besoin.