【问题标题】:Parse from a JS generated site从 JS 生成的站点解析
【发布时间】:2014-01-17 06:44:45
【问题描述】:

我正在尝试从 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)

由于某种原因,它不打印任何东西。感谢任何帮助

旁注:在python中有没有更快的方法来做到这一点

【问题讨论】:

  • 检查 content 里面的内容。正则表达式应该是正确的。

标签: python selenium-webdriver web-scraping


【解决方案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-****

希望对您有所帮助。

【讨论】:

  • +1 用于等待选项,而不是天真的(尽管它是功能性的)睡眠 :)
  • @JonClements 谢谢,刚刚意识到天真看起来并不干净和漂亮。
猜你喜欢
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 2017-01-01
  • 2019-11-26
  • 2021-12-27
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
相关资源
最近更新 更多