2016-09-03 65 views
0

我試圖抓取的網站主頁顯示四個選項卡,其中一個選項顯示「[Number] Available Jobs」。我有興趣刮取[Number]值。當我在Chrome中檢查頁面時,我可以看到標記中包含的值。如何從加載動態的頁面刮取值?

enter image description here

然而,沒有什麼包裹在<span>標籤,當我直接查看網頁的源文件。我打算使用Python requests模塊創建HTTP GET請求,然後使用regex從返回的內容中捕獲值。如果內容不包含我需要的數字,這顯然是不可能的。

我的問題是:

  1. 發生了什麼事嗎?如何將一個值動態加載到 頁面中並顯示出來,然後不會出現在HTML源代碼中?

  2. 如果該值未出現在頁面源中,我能做些什麼來 達到它?

+0

您可以使用硒:https://pypi.python.org/pypi/selenium – Javier

回答

0

1.A值可以使用AJAX動態加載,加載的AJAX異步,這意味着該網站的其他部分不會等待被渲染阿賈克斯,這就是爲什麼當你的DOM元素裝載了AJAX沒有出現在它裏面。

2.對於刮動態內容,你應該使用硒,here a tutorial

2

如果內容沒有出現在頁面的源代碼則用javascript可能產生。例如,該站點可能有一個列出作業的REST API,並且JavaScript代碼可以從API請求作業,並使用它在DOM中創建節點並將其附加到可用作業。這只是一種可能性。

廢止這些信息的一種方法是弄清楚javascript是如何工作的並且讓你的python scraper執行相同的操作(例如,如果它使用的是簡單的REST API,則只需要向相同的URL)。通常情況下,這不是那麼容易,所以另一種選擇是使用像selenium這樣的支持JavaScript的瀏覽器進行抓取。

我想提的最後一件事是that regular expressions are a fragile way to parse HTML,您通常應該更喜歡使用像BeautifulSoup這樣的庫。

0
  1. 對於動態加載的數據,您應該在網絡中查找xhr請求,並且如果您可以使這些數據比您的數據更有效率!
  2. 你可以幻影js,它是一個無頭瀏覽器,它捕捉與動態加載的內容的網頁的HTML。