2014-01-17 3 views
1

Я пытаюсь разобрать (623) 337-**** с сайта, созданного JS. Мой код:Анализ из созданного 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

Sidenote: Есть ли более быстрый способ сделать это в Python

+0

Проверьте, что внутри 'content'. Регулярное выражение должно быть правильным. – Martol1ni

ответ

1

Проблема заключается в том, что часть содержания загружается динамически через пост страниц запросов нагрузки АЯКС.

Вы должны ждать, пока элемент не станет видимым (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