2017-06-15 8 views
0

私はbeautifulsoupを使って基本的なテキストの掻き取りを行ってきましたが、このページ(http://reference.wolfram.com/language/ref/BarChart.html)では、問題のテキストが画像としてフォーマットされています。個々のコマンド(例:BarChart [{1、2、3}])をクリックしてコピーして手動で貼り付けることもできますが、コードの一部。Pythonを使用してこのページからコマンドをスクラップする方法はありますか?

+2

どうすればよいですか?はいあります。 – zwer

+0

ページが読み込まれるスクリプトを見て、そのようなクリックごとに呼び出される 'load_copy_text()'を見つけて理解してください。多分掻き取りは必要ではないかもしれません。 – 9000

答えて

0

これはやり過ぎかもしれないが、あなたはseleniumを使用することができ、基本的にマウスクリックのアクションを自動化し、バックのPythonにコピーしたテキストを取得するためにクリップボードパッケージを使用していますが。目安は次のようになります。

from selenium import webdriver 
import clipboard 

driver = webdriver.Chrome() 

driver.get("http://reference.wolfram.com/language/ref/BarChart.html") 

#get all the image elements 
elem: = driver.find_elements_by_tag_name("img") 

#click and paste 
text_list = [] 
for elem in elems: 
    #clicking on the image element 
    elem.click() 

    #get text from clipboard 
    text = clipboard.paste() 

    #check if text is empty 
    if text != "": 
     text_list.append(text) 

私はこれはおそらくそれを行うための最善の方法ではありません、言ったように、あなたは簡単な方法がありますかどうかを確認するために、ウェブサイト上のclipboard.jsファイルに見ることができます。それが役に立てば幸い。

0

ページとやりとりしているときにブラウザの開発ツールを見ると、image/text要素の1つ上にマウスを置くと、その要素のテキストを読み込むように要求されます。したがって、これらの値をすべて取得するには、テキストごとに1つのリクエストを行う必要があります。 URLはすべて次のようになります。http://reference.wolfram.com/language/ref/Files/BarChart.en/i_5.txt

まずは、これらのリクエストをすべて生成する方法を見つける必要があります。彼らはすべて奇妙な値(i_1.txti_3.txtなど)のように見え、それはdivのIDに対応しています。

これらはあなたに見栄えのテキストを与えていないけれども、マークアップの多くを持っているとテキストがエスケープされています

<pre name='i_5_in' id='i_5_in' class='IFT'> 
    BarChart[{{1, 2, 3}, {1, 3, 2}, {5, 2}}, 
    ChartLabels -&gt; {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;}] 
</pre><div class='IFU'> 
<a name='408182431'></a>http://wolfram.com/xid/0cq0nbvj-g1a1u5</div> 

カップルの人が指摘したように、Javascriptを開始しているところclipboard.jsであり、これらの要求を処理することができます。要素のイベントリスナーをチェックするか、要求のイニシエータスタックをたどってトレースすることで、そこにアクセスできます。これには、それらをスクラップするPython関数を書くために使うことができるいくつかの行があります。 PyQuery(docs)というライブラリがあります。これにより、HTML上のjQueryライクなセレクタを使用して、これを高速化できます。

関連する問題