2014-01-17 62 views
1

我想從JS生成的網站解析(623) 337-****。我的代碼是:從JS生成的網站解析

from selenium import webdriver 
import re 
browser = webdriver.Firefox() 
browser.get('http://www.spokeo.com/search?q=Joe+Henderson,+Phoenix,+AZ&sao7=t104#:18643819031') 
content = browser.page_source 
browser.quit() 
m_obj = re.search(r"(\(\d{3}\)\s\d{3}-\*{4})", content) 
if m_obj:  
    print m_obj.group(0) 

出於某種原因,不`噸打印任何東西。任何幫助apreciated

旁註:有沒有做到這一點在Python

+0

檢查'content'裏面的內容。正則表達式應該是正確的。 – Martol1ni

回答

1

更快的方法的問題是,一些內容被通過後頁面加載Ajax請求動態加載。

你應該等到元素變得可見(documentation) - 然後獲取頁面的源代碼:

import re 

from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 
from selenium import webdriver 
from selenium.webdriver.support.wait import WebDriverWait 


browser = webdriver.Firefox() 
browser.get('http://www.spokeo.com/search?q=Joe+Henderson,+Phoenix,+AZ&sao7=t104#:18643819031') 

WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "profile_details_section_header"))) 
content = browser.page_source 

m_obj = re.search(r"(\(\d{3}\)\s\d{3}-\*{4})", content) 
if m_obj:  
    print m_obj.group(0) 

browser.quit() 

或者你可以撥打time.sleep()browser.implicitly_wait()代替 - 儘管這聽起來並不完全正確。

打印(623) 337-****

希望有所幫助。

+0

+1等待選項,而不是天真(儘管它功能)睡覺:) –

+0

@JonClements謝謝,只是意識到,天真看起來不乾淨,不錯。 – alecxe