<p>表中的数据似乎是通过JavaScript上传的</p>
<p>这就是为什么,如果您试图使用<code>requests</code>库获取此信息,返回时不会收到表的数据<code>requests</code>根本不支持JS。因此,这里的问题不在<code>BeautifulSoup</code></p>
< >擦除JS驱动的数据,考虑使用^ {CD4>}和<a href="https://chromedriver.chromium.org/downloads" rel="nofollow noreferrer">chromedriver</a>。本例中的解决方案如下所示:</p>
<pre class="lang-py prettyprint-override"><code># import libraries
from bs4 import BeautifulSoup
from selenium import webdriver
# create a webdriver
chromedriver_path = 'C:\\path\\to\\chromedriver.exe'
driver = webdriver.Chrome(chromedriver_path)
# go to the page and get its source
driver.get('http://www.mcxindia.com/market-data/spot-market-price')
soup = BeautifulSoup(driver.page_source, 'html.parser')
# fetch mentioned data
table = soup.find('table', {'id': 'tblSMP'})
for tr in table.tbody.find_all('tr'):
row = [td.text for td in tr.find_all('td')]
print(row)
# close the webdriver
driver.quit()
</code></pre>
<p>上述脚本的输出为:</p>
<pre><code>['ALMOND', '1 KGS', 'DELHI', '558.00', '=']
['ALUMINIUM', '1 KGS', 'THANE', '137.60', '=']
['CARDAMOM', '1 KGS', 'VANDANMEDU', '2,525.00', '=']
['CASTORSEED', '100 KGS', 'DEESA', '3,626.00', '▼']
['CHANA', '100 KGS', 'DELHI', '4,163.00', '▲']
['COPPER', '1 KGS', 'THANE', '388.30', '=']
['COTTON', '1 BALES', 'RAJKOT', '15,790.00', '▲']
['CPO', '10 KGS', 'KANDLA', '630.10', '▼']
['CRUDEOIL', '1 BBL', 'MUMBAI', '2,418.00', '▲']
['GOLD', '10 GRMS', 'AHMEDABAD', '40,989.00', '=']
['GOLDGUINEA', '8 GRMS', 'AHMEDABAD', '32,923.00', '=']
['GOLDM', '10 GRMS', 'AHMEDABAD', '40,989.00', '=']
['GOLDPETAL', '1 GRMS', 'MUMBAI', '4,129.00', '=']
['GUARGUM', '100 KGS', 'JODHPUR', '5,880.00', '=']
['GUARSEED', '100 KGS', 'JODHPUR', '3,660.00', '=']
</code></pre>
<p>UPD:我必须说明上面的代码回答了查看此特定表的问题。然而,有时网站将数据存储在“application/json”或类似的标记中,这些标记可以通过“requests”库访问(因为它们不需要JS)</p>
<p><strong>正如<a href="https://stackoverflow.com/users/7658985/%CE%B1%D4%8B%C9%B1%D2%BD%D4%83-%CE%B1%D0%BC%D1%94%D1%8F%CE%B9c%CE%B1%CE%B7">αԋɱҽԃ αмєяιcαη</a>发现的,当前网站包含这样的标签。请核对他的答案。在这种情况下,使用<code>requests</code>确实比使用<code>selenium</code>要好。</strong></p>