模式匹配后如何提取以下几行

时间:2019-12-25 01:45:50

标签: python python-3.x selenium-webdriver

网络资源如下:

<div class="MT12">
    <table class="tblchart" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <th rowspan="2" width="100" align="left" valign="top">Date</th>
            <th rowspan="2" width="100" style="text-align:right;" valign="top">Open</th>
            <th rowspan="2" width="100" style="text-align:right;" valign="top">High</th>
            <th rowspan="2" width="100" style="text-align:right;" valign="top">Low</th>
            <th rowspan="2" width="100" style="text-align:right;" valign="top">Close</th>
            <th colspan="2" style="text-align:center;" valign="top">- SPREAD -</th>
        </tr>
        <tr>
            <th width="100" style="text-align:right;" valign="top">(High-Low)</th>
            <th width="100" style="text-align:right;" valign="top" class="last">(Open-Close)</th>
        </tr>
        <tr>
            <td align="left" valign="top">2019-12-24</td>
            <td valign="top" style="text-align:right;">12269.25</td>
            <td valign="top" class="b_12vv" style="text-align:right">12283.70</td>
            <td valign="top" style="text-align:right;">12202.10</td>
            <td valign="top" style="text-align:right;">12214.55</td>
            <td valign="top" style="text-align:right;">81.60</td>
            <td align="right" valign="top" class="last" style="text-align:right;">54.70</td>
        </tr>
        <tr>
            <td align="left" valign="top">2019-12-23</td>
            <td valign="top" style="text-align:right;">12235.45</td>
            <td valign="top" class="b_12vv" style="text-align:right">12287.15</td>
            <td valign="top" style="text-align:right;">12213.25</td>
            <td valign="top" style="text-align:right;">12262.75</td>
            <td valign="top" style="text-align:right;">73.90</td>
            <td align="right" valign="top" class="last" style="text-align:right;">-27.30</td>
        </tr>
        <tr>
            <td align="left" valign="top">2019-12-20</td>
            <td valign="top" style="text-align:right;">12266.45</td>
            <td valign="top" class="b_12vv" style="text-align:right">12293.90</td>
            <td valign="top" style="text-align:right;">12252.75</td>
            <td valign="top" style="text-align:right;">12271.80</td>
            <td valign="top" style="text-align:right;">41.15</td>
            <td align="right" valign="top" class="last" style="text-align:right;">-5.35</td>
        </tr>
    </table>
</div>

我想获得每个日期的以下数字: 例如,我必须获取特定日期(2019-12-24)的数字12269.25、12283.70、12202.10和12214.55。然后继续下一个给定的日期。

我正面临困难,因为我需要在页面中的每个日期之后选择接下来的4行(其xpath与上面所示的异常无关)。日期的范围可以从单个日期到100-200个日期。

任何人都可以使用相同的网络驱动程序代码段来帮助您。

非常感谢

1 个答案:

答案 0 :(得分:0)

这可以满足您的需求

from simplified_scrapy.simplified_doc import SimplifiedDoc 
html = '''<div class="MT12">
    <table class="tblchart" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <th rowspan="2" width="100" align="left" valign="top">Date</th>
            <th rowspan="2" width="100" style="text-align:right;" valign="top">Open</th>
            <th rowspan="2" width="100" style="text-align:right;" valign="top">High</th>
            <th rowspan="2" width="100" style="text-align:right;" valign="top">Low</th>
            <th rowspan="2" width="100" style="text-align:right;" valign="top">Close</th>
            <th colspan="2" style="text-align:center;" valign="top">- SPREAD -</th>
        </tr>
        <tr>
            <th width="100" style="text-align:right;" valign="top">(High-Low)</th>
            <th width="100" style="text-align:right;" valign="top" class="last">(Open-Close)</th>
        </tr>
        <tr>
            <td align="left" valign="top">2019-12-24</td>
            <td valign="top" style="text-align:right;">12269.25</td>
            <td valign="top" class="b_12vv" style="text-align:right">12283.70</td>
            <td valign="top" style="text-align:right;">12202.10</td>
            <td valign="top" style="text-align:right;">12214.55</td>
            <td valign="top" style="text-align:right;">81.60</td>
            <td align="right" valign="top" class="last" style="text-align:right;">54.70</td>
        </tr>
        <tr>
            <td align="left" valign="top">2019-12-23</td>
            <td valign="top" style="text-align:right;">12235.45</td>
            <td valign="top" class="b_12vv" style="text-align:right">12287.15</td>
            <td valign="top" style="text-align:right;">12213.25</td>
            <td valign="top" style="text-align:right;">12262.75</td>
            <td valign="top" style="text-align:right;">73.90</td>
            <td align="right" valign="top" class="last" style="text-align:right;">-27.30</td>
        </tr>
        <tr>
            <td align="left" valign="top">2019-12-20</td>
            <td valign="top" style="text-align:right;">12266.45</td>
            <td valign="top" class="b_12vv" style="text-align:right">12293.90</td>
            <td valign="top" style="text-align:right;">12252.75</td>
            <td valign="top" style="text-align:right;">12271.80</td>
            <td valign="top" style="text-align:right;">41.15</td>
            <td align="right" valign="top" class="last" style="text-align:right;">-5.35</td>
        </tr>
    </table>
</div>'''
doc = SimplifiedDoc(html)
table = doc.getElement(tag='table',value='tblchart')
trs = table.trs.notContains('<th') # get tr
for tr in trs:
  tds = tr.tds # get all td
  data = [td.text for td in tds]
  print (data[0],data[1],data[2],data[3],data[4])