2017-06-15 31 views
0

我已經用beautifulsoup做了一些基本的文字拼圖,但是對於這個頁面(http://reference.wolfram.com/language/ref/BarChart.html),所討論的文本被格式化爲圖像。人們可以點擊每個單獨的命令(例如BarChart [{1,2,3}])複製並手動粘貼,但我想知道是否有合理的方法可以獲得全部143條命令,而不必爲每個人一段代碼。有什麼辦法可以使用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

如果您在與頁面進行交互時觀察瀏覽器的開發工具,則會看到懸停在其中一個圖像/文本元素上的請求會加載該元素的文本。所以你必須爲每個文本提出一個請求來獲得所有這些值。這些網址都是這樣的:http://reference.wolfram.com/language/ref/Files/BarChart.en/i_5.txt

首先,您應該找到一種方式來生成所有這些請求。它看起來像是所有奇數值(i_1.txt,i_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> 

作爲一對夫婦人指出,clipboard.js就是發起的JavaScript和處理這些請求可以找到。您可以通過檢查元素的事件偵聽器或通過跟蹤請求的啓動器堆棧來實現。這有一些線你可以用它來寫一個Python函數,它會刮掉它們。有一個名爲PyQuery的庫(docs),它允許您在HTML上使用類似jQuery的選擇器來加快速度。

相關問題