如何使用Python从网页获取内容?
我有一个网页:http://kff.org/womens-health-policy/state-indicator/ultrasound-requirements/#,我需要从这个网页中提取一个表格。
遇到的问题:我一直在使用BeautifulSoup和requests来获取这个网址的内容。问题是,这些方法让我在表格生成之前就获取到了网页内容。
所以我得到的是一个空表格: < table> < thead> < /thead> < tbody> < /tbody> < /table>
我的方法:现在我尝试在浏览器中打开这个网址,使用 webbrowser.open_new_tab(url),然后直接从浏览器获取内容。这样可以让服务器更新表格,然后我就能获取到页面的内容。
问题:我不太确定如何直接从网页浏览器获取信息。
现在我在Windows系统上使用Mozilla浏览器。
找到的最接近的链接是这个网站链接。但是它只能告诉我哪些网站被打开了,而不是内容。
有没有其他方法可以让表格在urllib2或BeautifulSoup和requests中加载?或者有没有办法直接从网页获取加载后的内容。
谢谢
2 个回答
表格没有被填充的原因是因为Python使用urllib2获取页面时,并不会处理这个页面,也就是说它不会生成DOM(文档对象模型),也不会执行任何Javascript代码等等。
经过查看源代码,似乎你想要的信息可以在这个链接找到:http://kff.org/datacenter.json?post_id=32781,它的格式是JSON。
为了补充Santiclause的回答,如果你想抓取那些由JavaScript生成的数据,你需要一个能够执行这些脚本的工具。
为此,你可以使用selenium这个工具包和像Firefox或PhantomJS这样的浏览器驱动(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数据,那就最好了。你可以通过在网站上检查元素时查看网络选项卡来找到它,这需要你多尝试几次。