bs4 beautiful soup 出于某种原因找不到 div's 和 div's

bs4 beautiful soup does not find div's with div's for some reason

HTML:

<div id="divTradeHaltResults"> 
<div class="genTable"
   <table>
    <tbody>
    <tr> 
  <td> 03/10/2020  </td> 
  <td> 15:11:45     </td>

代码:

url = r'https://www.nasdaqtrader.com/trader.aspx?id=TradeHalts'
r=requests.get(url)
soup = BeautifulSoup(r.content, "html.parser")
table = soup.find('div',{'id':'divTradeHaltResults'})
divclass=table.find('div',{'class':"genTable"})

divt=divclass.find('table')

结果:

divclass={None Type}None

我试过 'lxml' 解析器,但没有用。
我可以使用 Selenium 获取它,但它使用了太多资源。
通过检查多个 div 的
周围的所有其他问题 bs4 似乎存在固有问题。
有人解决了吗?我尝试了其他
的多种想法 人。

你得到 None 的原因是页面是通过 JavaScript 动态加载的,一旦页面本身加载就呈现。

因此,我已经能够追踪 table 的来源,JS 从哪里发送 XHR 请求来获取它。可以通过浏览器 Developer-ToolsNetwork-Tab.

下进行跟踪

否则你可以使用 selenium。我已经为您提供了这两种解决方案。

import requests
import pandas as pd


json = {
    "id": 2,
    "method": "BL_TradeHalt.GetTradeHalts",
    "params": "[]",
    "version": "1.1"
}

headers = {
    'Referer': 'https://www.nasdaqtrader.com/trader.aspx?id=TradeHalts'
}

r = requests.post(
    "https://www.nasdaqtrader.com/RPCHandler.axd", json=json, headers=headers).json()

df = pd.read_html(r["result"])[0]

df.to_csv("table1.csv", index=False)

输出:view-online

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from bs4 import BeautifulSoup
import pandas as pd


options = Options()
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)

driver.get(
    "https://www.nasdaqtrader.com/trader.aspx?id=TradeHalts")

df = pd.read_html(driver.page_source)[2]

# print(df)
df.to_csv("table.csv", index=False)
driver.quit()

输出:view-online