2017-06-16 78 views
1

我有一個閃存卡製作程序,用於從這裏獲取信息的西班牙語:http://www.spanishdict.com/examples/zorro(這只是一個示例)。我已經設置好了,所以它的翻譯很好,但現在我想添加示例。不過,我注意到,該頁面上的示例是動態生成的,所以我安裝了Beautiful Soup和HTML5解析器。我對特別感興趣的標籤是:Python - 使用DOM獲取HTML

<span class="megaexamples-pair-part">Los perros siguieron el rastro del <span 
class="megaexamples-highlight">zorro</span>. </span> 

我使用的嘗試和檢索它的代碼是:

soup = BeautifulSoup(urlopen("http://www.spanishdict.com/examples/zorro").read(), 'html5lib') 
example = soup.findAll("span", {"class": "megaexamples-pair-part"}) 

但是,不管什麼辦法,我擺動它,我可以」 t似乎讓它拉下動態生成的代碼。我已經確認我通過搜索megaexamples-container來獲取頁面,這很好(你可以通過右鍵單擊google chrome並點擊查看頁面源代碼來查看)。

任何想法?

+0

內容可以由JavaScript加載後產生:

現在你可以用類似解析它。 [檢查這個答案。](https://stackoverflow.com/questions/13960567/reading-dynamically-generated-web-pages-using-python) –

回答

0

我用佩德羅的答案讓我朝着正確的方向前進。這是我做過什麼來得到它的工作:

  1. 下載硒PIP安裝硒
  2. 下載的驅動程序要仿真瀏覽器。你可以從this page下載它們。驅動程序必須位於PATH變量中,否則您需要在webdriver的構造函數中指定路徑。
  3. 進口硒硒進口的webdriver
  4. 現在使用下面的代碼:
browser = webdriver.Chrome() 
browser.get(raw_input("Enter URL: ")) 
html_source = browser.page_source 

注意:如果你沒有把你的驅動程序路徑,你必須調用構造函數與瀏覽器= webdriver.Chrome(<PATH_TO_DRIVER_HERE>)

注2:您可以使用類似webdriver.Firefox ()如果你想要一個不同的瀏覽器。湯= BeautifulSoup(html_source, 'html5lib')

1

你在做什麼只是拉HTML頁面,它可能通過JavaScript調用從服務器加載更多的數據。

你有2種選擇:

  • 使用的webdriver如selenium來控制正確加載整個頁面網頁瀏覽器(然後你可以用BeautifulSoup解析它或找到selenium自己的工具元素)。由於瀏覽器的使用,這會導致一些開銷。

  • 使用瀏覽器的開發人員工具(通常通過F12訪問)的網絡選項卡分析來自動態加載的傳入和傳出請求,並使用requests模塊複製它們。這樣更高效,但也可能更棘手。

請記住,只有當您擁有網站所有者的許可時纔會這樣做。在許多情況下,它違背了ToS。