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-Tools
在 Network-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
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-Tools
在 Network-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