我正在尝试使用beautifulsoup从https://www.zacks.com/stock/research/MMM/earnings-announcements下载收益公告数据。当我看表时,我感兴趣的表(收益公告表)只显示“正在加载数据…”。但是,如果我把汤的全部内容打印出来,我确实能看到我要找的信息。我可以将这些数据隔离为一个“脚本”元素,但其中包含了许多其他不需要的信息。我如何选择并解析我要查找的特定数据,即“收益公告表”表的内容,如下所示:
“变量对象={ “收益公告表”: [[“10/25/2016”,“9/2016”,“$2.14”,“--”,”--“,“开张前”],…”
以下是我目前所掌握的情况:
from urllib import request
from urllib import error
from bs4 import BeautifulSoup
def download_parse_earnings(symbol):
request_string = "https://www.zacks.com/stock/research/%s/earnings-announcements" % symbol
print(request_string)
try:
web = request.urlopen(request_string)
except error.HTTPError:
return
soup = BeautifulSoup(web.read(), 'lxml')
data = soup.find_all("script")[28].string
print(data)
一种方法是启动Selenium并使用它的Javascript引擎。这并不简单,我在这里提供了一个替代方案,它是一个完全的黑客攻击,但它应该适用于您感兴趣的页面。在
假设页面是自动生成的,我们观察到您需要的数据在其中(从您的程序继续):
这是利用Javascript对象是JSON的事实,因此我们直接从源代码读取。结果就是这样一个列表:
^{pr2}$第一个元素对应于表的第一行,即标题。你现在只需要清理数据。在
不使用Selenium,但仍然使用json作为第一个答案,您可以使用BS挖掘出所需的内容。在
这样,javascript就可以作为脚本.text. 您仍然需要做一些稍微聪明的事情来提取Rubik's答案中显示的行。但没有什么是不可能的。在
相关问题 更多 >
编程相关推荐