在昨天課程中,講述為什麼要針對這個網頁進行擷取與實做爬蟲,在本日要做的事情是:
首先,先進入這個網站。
接著可以看到上面這個截圖,我們打開Chrome開發者控制台,並試著找到這個表格在哪,相關操作截圖如下:
這樣從上面截圖可以知道,這個收盤價的表格檔案下載表格HTML內容:
<table width="778" border="0" align="right" cellpadding="0" cellspacing="0">
<tbody><tr>
<td><table width="778" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td width="648" align="left" valign="middle" class="menu01">
您現在位置:<a href="../index/index.aspx">首頁</a> > <a href="stock_home.aspx">台股</a> > <a href="stock_2_1.aspx?findex=1">大盤動態</a> > <span style="color:#ff9933">收盤價下載</span> </td>
<td width="130"> </td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td height="10"><img src="../images/1_space.gif" width="1" height="1"></td>
</tr>
<tr>
<td height="35" valign="top"><img src="../images/title_buy04.gif" width="778" height="20"></td>
</tr>
<tr>
<td valign="top"><table width="778" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td><img src="../images/download_head2.gif" width="778" height="29"></td>
</tr>
<tr>
<td><table width="778" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td width="250" height="25" align="center" valign="middle" class="menu01">
<span id="lblDate01">2019-10-08</span> </td>
<td width="528" align="center" valign="middle" class="menu02">
<img src="../images/xls.gif" width="16" height="16">
<a id="lbtnDown01" class="menu02" href="javascript:__doPostBack('lbtnDown01','')">下載</a> </td>
</tr>
<tr>
<td height="1" colspan="2" background="../images/dot_line.gif"><img src="../images/1_space.gif" width="1" height="1"></td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td><table width="778" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td width="250" height="25" align="center" valign="middle" class="menu01">
<span id="lblDate02">2019-10-07</span> </td>
<td width="528" align="center" valign="middle" class="menu02">
<img src="../images/xls.gif" width="16" height="16">
<a id="lbtnDown02" class="menu02" href="javascript:__doPostBack('lbtnDown02','')">下載</a> </td>
</tr>
<tr>
<td height="1" colspan="2" background="../images/dot_line.gif"><img src="../images/1_space.gif" width="1" height="1"></td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td><table width="778" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td width="250" height="25" align="center" valign="middle" class="menu01"><span id="lblDate03" class="menu01">2019-10-04</span> </td>
<td width="528" align="center" valign="middle" class="menu02"><img src="../images/xls.gif" width="16" height="16">
<a id="lbtnDown03" href="javascript:__doPostBack('lbtnDown03','')">下載</a> </td>
</tr>
<tr>
<td height="1" colspan="2" background="../images/dot_line.gif"><img src="../images/1_space.gif" width="1" height="1"></td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td><table width="778" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td width="250" height="25" align="center" valign="middle" class="menu01">
<span id="lblDate04">2019-10-03</span> </td>
<td width="528" align="center" valign="middle" class="menu02">
<img src="../images/xls.gif" width="16" height="16">
<a id="lbtnDown04" href="javascript:__doPostBack('lbtnDown04','')">下載</a> </td>
</tr>
<tr>
<td height="1" colspan="2" background="../images/dot_line.gif"><img src="../images/1_space.gif" width="1" height="1"></td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td><table width="778" border="0" cellspacing="0" cellpadding="0">
<tbody><tr>
<td width="250" height="25" align="center" valign="middle" class="menu01">
<span id="lblDate05">2019-10-02</span> </td>
<td width="528" align="center" valign="middle" class="menu02">
<img src="../images/xls.gif" width="16" height="16">
<a id="lbtnDown05" href="javascript:__doPostBack('lbtnDown05','')">下載</a> </td>
</tr>
<tr>
<td height="1" colspan="2" background="../images/dot_line.gif"><img src="../images/1_space.gif" width="1" height="1"></td>
</tr>
</tbody></table></td>
</tr>
</tbody></table></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td>
註1:每日收盤價轉檔時間為PM4:30<br>
註2:成交量單位:上市櫃(張)、興櫃(股)<br>
註3:本文所載資料僅供參考,資料來源以<a href="https://www.twse.com.tw/" target="_blank">臺灣證券交易所</a>公告為準
</td>
</tr>
<tr>
<td>
</td>
</tr>
</tbody></table>
接著看起來這個表格的元素:<table width="778" border="0" align="right" cellpadding="0" cellspacing="0">.....</table>
是獨特的。
接著看其中一個檔案下載連結,可以發現裡面會觸發前端某一個JavaScript
函數。相關連結中放的觸發JS
如下:
javascript:__doPostBack('lbtnDown01','')
接著,找到了這段JS
函數,相關的節錄如下:
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
稍微按下下載連結,監控一下HTTP
是怎麼發送的。相關監控的HTTP
發送截圖如下:
看了表單參數,跟前一個案例研討一樣,有__EVENTVALIDATION
等相關ASPX
表單參數。
綜合上面的分析,可以得到爬蟲實做方法與擷取內容方法:
HTTP GET
方法請求這個收盤價檔案下載的網站__EVENTTARGET
與__EVENTARGUMENT
參數所對應的收盤價檔案。HTTP POST
方法分別去請求這些收盤價檔案回來。透過上面的分析,我們可以分別知道爬蟲該如何實做,以及回應回來的網站內容擷取方法,在明日案例研討中,將會實做爬蟲出來,並試著解析網站內容中對應的收盤價檔案連結請求方式。