拉网助手

2024-05-18 05:38:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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')

在这里,我试图通过以下方式将其直接读入熊猫数据帧:

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

但是,我得到了这个错误:


  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

任何帮助都将不胜感激。你知道吗


Tags: inimportpandasreadlibpackageshtmlline
2条回答

这个数据来自一个API,它是https://api.nasdaq.com/api/quote/QQQ/historical?assetclass=etf&fromdate=2019-09-11&limit=18&todate=2019-10-11

您可以使用直接获取它:

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'])

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

相关问题 更多 >