我正在尝试使用这里来擦拭位于BeautifulSoup的滴答符号。目前,我尝试了以下几种方法:
import urllib
import BeautifulSoup
import re
url = r'https://investor.vanguard.com/mutual-funds/vanguard-mutual-funds-list'
html = urllib.urlopen(url).read()
soup = BeautifulSoup.BeautifulSoup(html)
table = soup.findAll('td', attrs = {'class': re.compile(r'\bticker left\b')})
然而,这并没有给我任何东西。有人能解释一下为什么我不能获得带有这个td
属性的所有class
标记吗?html将导致人们认为这是可能的,而且相对来说是无痛的。例如:
<td class="ticker left">VUSXX </td>
谢谢。
发布于 2014-06-04 04:28:43
继续我上面的评论..。您可以使用以下url返回所需的数据(从firefox extension报头获得)
https://api.vanguard.com/rs/ire/02/ind/mf/month-end.jsonp?callback=callback
--
您还可以使用Selenium,它使用Firefox浏览器。
1)安装Selneium http://docs.seleniumhq.org/download/
2)安装Selenium Python模块https://pypi.python.org/pypi/selenium
然后你可以使用以下脚本。它将打开firefox浏览器。得到结果。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import re
from bs4 import BeautifulSoup #use bs4 from now on.
browser = webdriver.Firefox()
browser.get('https://investor.vanguard.com/mutual-funds/vanguard-mutual-funds-list')
html = browser.page_source
soup = BeautifulSoup(html)
mydata = soup.find_all('tr')
而且,你可以在mydata
中找到你想要的东西
发布于 2014-06-04 01:28:41
这是因为您读取的页面是通过AJAX动态加载的。因此,Beautiful完成的读取不会捕获稍后动态加载的AJAX数据。您可以使用机器(Python中的浏览器)和BeautifulSoup来实现这一点。
或者,您可以在AJAX调用之后复制HTML页面的数据,然后使用BeautifulSoup解析它。
https://stackoverflow.com/questions/24027530
复制相似问题