首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网络抓取帮助

网络抓取帮助
EN

Stack Overflow用户
提问于 2019-10-11 05:23:52
回答 2查看 105关注 0票数 1

我必须从这个网页中提取一些信息。我知道有更简单的方法来获取这些信息,但这就是我的任务。到目前为止,我一直在尝试这样做:

代码语言:javascript
复制
import pandas as pd
import requests
from bs4 import BeautifulSoup

url = 'https://www.nasdaq.com/market-activity/funds-and-etfs/qqq/historical'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')

在这里,我尝试使用以下命令将其直接读取到熊猫DataFrame中:

df = pd.read_html(str(soup.select('historical-data__table')))

然而,我得到了这个错误:

代码语言:javascript
复制
  File "<ipython-input-94-f3a234b1eafd>", line 1, in <module>
    df = pd.read_html(str(soup.select('historical-data__table')))

  File "C:\Anaconda3\lib\site-packages\pandas\io\html.py", line 1094, in read_html
    displayed_only=displayed_only)

  File "C:\Anaconda3\lib\site-packages\pandas\io\html.py", line 916, in _parse
    raise_with_traceback(retained)

  File "C:\Anaconda3\lib\site-packages\pandas\compat\__init__.py", line 420, in raise_with_traceback
    raise exc.with_traceback(traceback)

ValueError: No tables found

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-11 06:53:45

此数据来自https://api.nasdaq.com/api/quote/QQQ/historical?assetclass=etf&fromdate=2019-09-11&limit=18&todate=2019-10-11接口

您可以使用python-requests直接获取它:

代码语言:javascript
复制
import requests

response = requests.get(
    'https://api.nasdaq.com/api/quote/QQQ/historical',
    params = {
        'assetclass':'etf',
        'fromdate':'2019-09-11',
        'todate': '2019-10-11',
        'limit': 18
    }
)
print(response.json()['data']['tradesTable']['rows'])
票数 1
EN

Stack Overflow用户

发布于 2019-10-11 05:32:13

我只是按原样尝试了您的脚本,并查看了输出。看起来你正在寻找的内容没有被拉取,这表明它是通过javascript动态生成的。美汤不具备处理动态内容的能力,因为它只能读取立即加载的数据,这与javascript不同,javascript可以在文档准备就绪时加载内容。我会调查一下硒。

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

https://stackoverflow.com/questions/58331291

复制
相关文章

相似问题

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