首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BeautifulSoup:按类属性刮表--为什么我得不到任何数据?

BeautifulSoup:按类属性刮表--为什么我得不到任何数据?
EN

Stack Overflow用户
提问于 2014-06-04 01:19:52
回答 2查看 785关注 0票数 0

我正在尝试使用这里来擦拭位于BeautifulSoup的滴答符号。目前,我尝试了以下几种方法:

代码语言:javascript
运行
复制
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将导致人们认为这是可能的,而且相对来说是无痛的。例如:

代码语言:javascript
运行
复制
<td class="ticker left">VUSXX              </td>

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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浏览器。得到结果。

代码语言:javascript
运行
复制
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中找到你想要的东西

票数 2
EN

Stack Overflow用户

发布于 2014-06-04 01:28:41

这是因为您读取的页面是通过AJAX动态加载的。因此,Beautiful完成的读取不会捕获稍后动态加载的AJAX数据。您可以使用机器(Python中的浏览器)和BeautifulSoup来实现这一点。

或者,您可以在AJAX调用之后复制HTML页面的数据,然后使用BeautifulSoup解析它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24027530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档