美丽的汤解析页表探针

时间:2019-08-15 09:20:12

标签: python html css beautifulsoup

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

我当前的代码:

{%extends "blogi/base.html"%}
{% load crispy_forms_tags %}
{%block content%}
    <div class="content-section">
        <form method="POST">
            {%csrf_token%}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Liity</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Rekkkaa</button>
            </div>
        </form>
        <div class="border-top pt-3">
            <a class="text-muted">Joko sinulla on tili? <a href="#">Kirjaudu tästä</a> </small>
        </div>
    </div>

{%endblock content%}

从页面请求中,我得到以下结果:

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> ID。

2 个答案:

答案 0 :(得分:0)

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

  1. 尝试使用模拟浏览器的硒。实际上,您可以等待响应生成,然后获取所需的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

答案 1 :(得分:0)

也许这可能有效:

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'))