从JS生成的站点解析

时间:2014-01-17 06:44:46

标签: python selenium-webdriver web-scraping

我正在尝试从JS生成的站点解析(623) 337-****。我的代码是:

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中有更快的方法吗

1 个答案:

答案 0 :(得分:1)

问题是某些内容是通过post page加载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-****

希望有所帮助。