如何使用python从Web浏览器获取内容?

时间:2014-06-19 19:03:28

标签: python web-scraping python-webbrowser

我有一个网页: http://kff.org/womens-health-policy/state-indicator/ultrasound-requirements/#  我需要从这个网页中提取表格。

遇到的问题:我一直在使用BeautifulSoup并请求获取网址内容。这些方法的问题在于,即使在生成表之前,我也能够获取Web内容。

所以我得到空桌子      <表>          < THEAD>          < / THEAD>          < TBODY>          < / TBODY>      < /表>

我的方法:现在我正在尝试使用浏览器打开网址     webbrowser.open_new_tab(url)然后直接从浏览器中获取内容。这将使服务器更新表格,然后我将能够从页面获取内容。

问题:我不确定如何直接从Web浏览器获取信息。

现在我在Windows系统上使用Mozilla。

找到最近的链接website Link。但是它会打开哪些网站而不是内容

还有其他方法让表加载urllib2或beautifulsoup和请求吗?或者有没有办法直接从网页上获取加载的内容。

由于

2 个答案:

答案 0 :(得分:2)

表格没有被填充的原因是因为Python没有处理它用urllib2接收的页面 - 所以没有DOM,没有运行的Javascript,等等。

阅读完资料后,您可以在http://kff.org/datacenter.json?post_id=32781以JSON格式找到您正在寻找的信息。

答案 1 :(得分:2)

要添加到Santiclause答案,如果你想要抓取java脚本填充数据,你需要执行它。

为此你可以使用selenium包和webdriver,如Firefox或PhantomJS(无头)连接到页面,执行脚本并获取数据。

您案例的例子:

from selenium import webdriver
driver = webdriver.Firefox() # You can replace this with other web drivers
driver.get("http://kff.org/womens-health-policy/state-indicator/ultrasound-requirements/#")
source = driver.page_source # Here is your populated data.
driver.quit() # don't forget to quit the driver!

当然,如果您可以像用户Santiclause一样直接访问json,那么您应该这样做。您可以在检查网站上的元素时检查网络选项卡找到它,这需要一些游戏。