BeautifulSoup:通过类属性抓取表格 - 为什么我没有数据?
我正在尝试使用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')})
但是,这并没有给我任何结果。有人能解释一下为什么我无法获取所有带有这个 谢谢。 这是因为你看到的页面是通过AJAX动态加载的。所以用Beautiful Soup读取的时候,抓取不到稍后动态加载的AJAX数据。 你可以使用Mechanize(Python中的一个浏览器)和BeautifulSoup来做到这一点。 或者,你可以在AJAX请求完成后,复制HTML页面的数据,然后用BeautifulSoup来解析这些数据。 接着我之前的评论... 你可以使用下面这个网址,它会返回你需要的数据(这个数据是通过Firefox浏览器的Live HTTP Header扩展获取的) https://api.vanguard.com/rs/ire/02/ind/mf/month-end.jsonp?callback=callback -- 你也可以使用Selenium,它是一个可以用来控制Firefox浏览器的工具。 1) 首先安装Selenium IDE,下载链接在这里:http://docs.seleniumhq.org/download/ 2) 然后安装Selenium的Python模块,下载链接在这里:https://pypi.python.org/pypi/selenium 接下来你可以使用下面的脚本,它会打开Firefox浏览器并获取结果。 而且,你可以在 标签吗?从HTML来看,似乎应该可以做到,而且应该很简单。例如:
<td class="ticker left">VUSXX </td>
2 个回答
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
中找到你想要的内容。撰写回答