python - 美汤解析页表问题
问题描述
我想从此页面获取数据(数字)。有了这些数字,我想做一些数学运算。
我当前的代码:
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> <span style="font-size:11px;color:green">305 (16.56%)</span></td>
<td id="d05" class="">1,842</td>
从这个结果中,我只想<td>
输出 ID。
解决方案
该页面的问题在于它的内容是动态生成的。当您获取页面的 html 时,并没有生成实际的元素(我想它们是由页面上的 javascript 填充的)。有两种方法可以解决这个问题。
- 尝试使用模拟浏览器的 selenium。实际上,您可以等待生成响应,然后获取所需的 html 元素。
- 另一种方法是查看页面正在执行的任何网络请求以获取数据。如果它没有加载到 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
。
推荐阅读
- zend-framework - 带有可选参数的 Zend Expressive Route
- java - 如何正确覆盖学生类的equals方法,以便HashSet可以区分学生类的重复对象
- php - 如何修复接口类上 PHPDoc 的错误
- python - 如何将 dict 值分组到单个数组中以绘制它
- jquery - 使用 bootstrap3 在内容选项卡和导航选项卡上切换活动状态
- php - Youtube 数据 PHP API - 服务错误“无效凭据”
- c# - 在 asp.net 中显示时,阿拉伯字体未应用于水晶报表查看器?
- android - StrictMode:如何在 Android 中为 targetSdk >= 28 禁用“检测到未标记的套接字”
- c# - C# 将 Func 方法签名转换为新的 Func 方法签名
- python-3.x - 无法安装确切版本的 kbcStorage 库