2017-10-21 18 views
0

私のpythonのバージョンは3.6.3です。私のOSはWIN7です。 私は今、以下のウェブサイトから中国語の文字を抽出するに取り組んでいます: https://crl.ptopenlab.com:8800/poem/show?3&%25E5%258F%2591%25E7%2594%259F&A718FCB2-CE47-4649-BB46-0E09B169FD59WindowsのOSのpython3.xでBeutifulsoup4を入手できない中国語の文字

私は抽出をしたい要素は、以下のHTMLコードに埋め込まれた文字は、次のとおりです。

<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> 

私のPythonのコードは次のとおりです。

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) 

このコードでは、実際に排他的に漢字を抽出するわけではありません。漢字を正しく表示できるかどうかチェックしたいだけです。残念ながら、結果は私が期待したものではありません。

['\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'] 

私は、リスト内の最初の項目を抽出した場合、それは以下のように表示されます。

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

だからそれが問題だ、表示なしの文字はありません!

他のウェブサイトで似たようなpythonコードを使って漢字を抽出しようとしましたが、クロールされた文字は正常に表示されます。彼らのどれもがこのように行動しなかった。

いくつかのエンコード方法を変更しましたが、うまくいかなかった。どうすればこの問題を解決できますか?ありがとう!

答えて

0

poembodyのコンテンツが取得されないのは、ページが読み込まれた後でAJAX呼び出しによってすべて生成されるためです。ページをスクラップしても、このコンテンツは取得されません。

正しい入力があれば、手動でAJAX呼び出しをトリガーしてコンテンツを収集することができます。具体的には、getPoems()を呼び出します。これには、type,subject、およびの3つの引数があります。これらの値は、一般的なwindow.location.searchから解析されます。提供したURLの<head>タグでリンクされている詳細については、poem-0.0.76.jsファイルを参照してください。ちょっとしたバックトラッキングで、必要な詩を得るためにすべてをまとめておくことが可能なはずです。

関連する問題