我使用Ghost和BeautifulSoup来解析HTML页面。我遇到的问题是这个页面的内容是动态的(用angularJS创建)。一开始html只显示"请等待!页面加载"。几秒钟后,html的内容出现。使用Ghost和BeatifulSoup我只获得加载页面的HTML代码,只有2个小div。 URL保持不变。是否有可能等到真实的"内容已加载?
答案 0 :(得分:2)
使用phantomjs打开该页面。 使用phantomjs文件系统模块Api将其另存为本地文件。 稍后使用此本地文件句柄创建BeautifulSoup对象,然后解析页面。 见http://www.kochi-coders.com/2014/05/06/scraping-a-javascript-enabled-web-page-using-beautiful-soup-and-phantomjs/
答案 1 :(得分:2)
将页面加载到真实的浏览器中(无标题PhantomJS
也是一个选项),由selenium
wait自动显示所需内容,获取.page_source
并将其传递给BeautifulSoup
:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.PhantomJS()
driver.get("your url here")
# waiting for the page to load - TODO: change
wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.ID, "content")))
data = driver.page_source
driver.close()
soup = BeautifulSoup(data, "html.parser")