首页 > 解决方案 > 美汤解析页表问题

问题描述

我想从此页面获取数据(数字)。有了这些数字,我想做一些数学运算。

我当前的代码:

import requests
from bs4 import BeautifulSoup

result = requests.get("http://www.tsetmc.com/Loader.aspx?ParTree=151311&i=45050389997905274")
c = result.content

soup = BeautifulSoup(c , features='lxml')
cld=soup.select("#d03")

print(cld)

================
output : []

从页面请求我得到这个结果:

<td id="d04" class="">2,105</td>
<td id="d03" class=""><span style="font-size:15px;font-weight:bold">2,147</span>&nbsp;&nbsp;<span style="font-size:11px;color:green">305&nbsp;&nbsp;(16.56%)</span></td>
<td id="d05" class="">1,842</td>

从这个结果中,我只想<td>输出 ID。

标签: pythonhtmlcssbeautifulsoup

解决方案


该页面的问题在于它的内容是动态生成的。当您获取页面的 html 时,并没有生成实际的元素(我想它们是由页面上的 javascript 填充的)。有两种方法可以解决这个问题。

  1. 尝试使用模拟浏览器的 selenium。实际上,您可以等待生成响应,然后获取所需的 html 元素。
  2. 另一种方法是查看页面正在执行的任何网络请求以获取数据。如果它没有加载到 html 中,那么肯定必须对其服务器进行另一个 API 调用来获取数据。

乍一看,我可以看到您需要的数据是通过这个 URL 获取的。(http://www.tsetmc.com/tsev2/data/instinfodata.aspx?i=45050389997905274&c=57+)。响应看起来像这样。

12:29:48,A ,2150,2147,2105,1842,2210,2105,2700,53654226,115204065144,1,20190814,122948;98/5/23 16:30:51,F,261391.50,<div class='pn'>4294.29</div>,9596315531133973,3376955600,11101143554708,345522,F,2046434489,11459858578563,282945,F,12927,3823488480,235,;8@240000@2148@2159@500@1,1@600@2145@2160@198067@2,10@1000000@2141@2161@2000@1,;61157,377398,660897;;;;0;

您可以通过我想的代码来详细了解解析逻辑。但看起来你只需要第二个元素2147


推荐阅读