Python 如果网站有多个表,如何刮取特定的表?
我最近制作了一个脚本,从一个网站上刮取一些财务数据(),以便跟踪一个项目交易量的变化 然而,他们似乎稍微改变了HTML,我的脚本不再工作了 我曾经用它从“表20”中获取值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
#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日。勾选复选标记即可接受。如果你喜欢,也可以投票。