Python 如果网站有多个表,如何刮取特定的表?

Python 如果网站有多个表,如何刮取特定的表?,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我最近制作了一个脚本,从一个网站上刮取一些财务数据(),以便跟踪一个项目交易量的变化 然而,他们似乎稍微改变了HTML,我的脚本不再工作了 我曾经用它从“表20”中获取值 #Options for Chrome Driver (Selenium) options = webdriver.ChromeOptions() driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Program Files\Anaco

我最近制作了一个脚本,从一个网站上刮取一些财务数据(),以便跟踪一个项目交易量的变化

然而,他们似乎稍微改变了HTML,我的脚本不再工作了

我曾经用它从“表20”中获取值

#Options for Chrome Driver (Selenium)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Program Files\Anaconda\chromedriver\chromedriver.exe')
driver.get("https://www.cmegroup.com/trading/interest-rates/cleared-otc.html")

current_page = driver.page_source

#Grab all the information from website HTML

soup = BeautifulSoup(current_page, 'html.parser')
tbl = soup.find("div", {"id": "table20"})
然而,tbl现在是一个“非类型”,里面什么都没有

我也尝试过以下方法,但没有效果:

table_2 = soup.find(lambda tag: tag.name == 'table' and tag.has_attr('id') and tag['id'] == 'table20')

所以问题是,我怎样才能把表20中所有的货币价值都划掉呢

嗯,我看没有理由在这种情况下使用
selenium
,因为它会减慢您的任务

网站加载了
JavaScript
事件,该事件在页面加载后动态呈现其数据

请求
库将无法动态呈现
JavaScript
。因此,您可以使用
selenium
请求\u html
。事实上,有很多模块可以做到这一点

现在,我们在表上有另一个选项,用于跟踪数据的呈现位置。我能够找到用于从
后端
API
检索数据的请求,并将其呈现给用户端

您可以通过打开并检查
XHR/JS
请求来获取
XHR
请求,这取决于调用的类型,例如
fetch

导入请求
作为pd进口熊猫
r=请求。获取(“https://www.cmegroup.com/CmeWS/mvc/xsltTransformer.do?xlstDoc=/XSLT/md/irs_settlement_TOTALS.xsl&url=/md/Clearing/IRS?date=03/20/2020&exchange=XCME")
df=pd.read_html(r.content,header=0)[1][:-1]
df.iloc[:,:5].to_csv(“data.csv”,index=False)
输出:

输出样本:


好吧,我认为没有理由在这种情况下使用
selenium
,因为它会减慢您的任务

网站加载了
JavaScript
事件,该事件在页面加载后动态呈现其数据

请求
库将无法动态呈现
JavaScript
。因此,您可以使用
selenium
请求\u html
。事实上,有很多模块可以做到这一点

现在,我们在表上有另一个选项,用于跟踪数据的呈现位置。我能够找到用于从
后端
API
检索数据的请求,并将其呈现给用户端

您可以通过打开并检查
XHR/JS
请求来获取
XHR
请求,这取决于调用的类型,例如
fetch

导入请求
作为pd进口熊猫
r=请求。获取(“https://www.cmegroup.com/CmeWS/mvc/xsltTransformer.do?xlstDoc=/XSLT/md/irs_settlement_TOTALS.xsl&url=/md/Clearing/IRS?date=03/20/2020&exchange=XCME")
df=pd.read_html(r.content,header=0)[1][:-1]
df.iloc[:,:5].to_csv(“data.csv”,index=False)
输出:

输出样本:


@nut\u如果我的答案对您有帮助,请轻松更改日期
日期=2020年3月20日
。勾选复选标记即可接受。如果你愿意,也可以投票。@nut\u如果我的答案对你有帮助,你可以轻松更改日期为2020年3月20日。勾选复选标记即可接受。如果你喜欢,也可以投票。