【问题标题】:Beatiful soup parse page table probelmBeautifulsoup 解析页表问题
【发布时间】:2019-08-15 09:20:12
【问题描述】:

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

我当前的代码:

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>

从这个结果中,我只想输出&lt;td&gt; ID。

【问题讨论】:

    标签: python html css beautifulsoup


    【解决方案1】:

    该页面的问题在于它的内容是动态生成的。当您获取页面的 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

    【讨论】:

    • 他想要得到的是“td”标签的“id”属性
    • 你认为 selenium 解决了这个问题吗?你从哪里得到这个 url?我如何在你的 url 中解析这些数据?
    • @bugsb 是的。我想最终目标是获取相应标签中的数据,而不是 id 本身。
    • @kami 是的,selenium 会解决这个问题,因为它会等待 javascript 加载数据。关于我是如何获取 URL 的,你可以查看开发者工具中的Network 标签找到 URL。
    【解决方案2】:

    也许这可能有效:

    result=requests.get("http://www.tsetmc.com/Loader.aspxParTree=151311&i=45050389997905274")
    
    c = result.content
    
    soup = BeautifulSoup(c , features='lxml')
    
    for tag in soup.find_all('td')[0:2]:
        print(tag.get('id'))
    

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多