iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
0
AI & Data

量化投資與機器學習研究系列 第 15

15.各券商分點地址、經緯度(做地緣券商)

  • 分享至 

  • xImage
  •  

台灣證券交易所有各分點資訊
總公司
分公司

查各分點的經緯度
爬各個地址的經緯度,不一定要用google map api 也可以用國土資訊系統
因為量不多不用申請帳號,使用爬蟲的方式一筆一筆查
其中

  1. 退號程度: (預設為不退號,可任意選擇前後退號之模糊程度)

少數地址原先查不到,可以用退號的方式查
針對這個網站查不到的可以再用google map補上

import scrapy
import pandas as pd
from scrapy import FormRequest

brokerList_url = 'http://www.twse.com.tw/brokerService/brokerList?response=html&lang=zh'
branchList_url = 'http://www.twse.com.tw/brokerService/branchList.html'


class StockCodeSpider(scrapy.Spider):
    name = 'broker_list'
    start_urls = [brokerList_url, branchList_url]

    custom_settings = {
        'DOWNLOAD_DELAY': 1,
        'CONCURRENT_REQUESTS': 1,
        'MONGODB_COLLECTION': name,
        'MONGODB_ITEM_CACHE': 1,
        'MONGODB_UNIQ_KEY': [("證券商代號", 1)],
    }

    def parse(self, response):
        data = pd.read_html(response.text)
        data = data[0]
        del data['分公司']
        if response.url == brokerList_url:
            data['公司'] = '總公司'
        else:
            data['公司'] = '分公司'

        url = 'https://moisagis.moi.gov.tw/moiap/gis2010/content/user/matchservice/singleMatch.cfm'

        for info in data.to_dict('records'):
            yield FormRequest(url, meta={'info': info},
                              formdata={
                                  'address': info['地址'],
                                  'matchRange': '0',
                                  'fuzzyNum': '02',
                                  'roadEQstreet': 'true',
                                  'subnumEQnum': 'true',
                                  'isLockTown': 'false',
                                  'isLockVillage': 'false',
                                  'ex_coor': 'EPSG:4326',
                                  'U02DataYear': '2015',
                                  'output_xml': '1'
                              },
                              callback=self.parse_info, dont_filter=True)

    def parse_info(self, response):
        item = response.meta['info']
        ths = [th.text() for th in response.dom('tr').eq(0)('th').items()]
        tds = [td.text() for td in response.dom('.bwhite').eq(0)('td').items()]
        item.update(dict(zip(ths, tds)))

        yield item

爬出來的資料如下

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>證券商代號</th>
      <th>X</th>
      <th>Y</th>
      <th>一級發布區</th>
      <th>二級發布區</th>
      <th>公司</th>
      <th>地址</th>
      <th>最小統計區</th>
      <th>村里</th>
      <th>比對代碼</th>
      <th>比對說明</th>
      <th>縣市</th>
      <th>證券商名稱</th>
      <th>鄉鎮</th>
      <th>開業日</th>
      <th>電話</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>9A00</td>
      <td>121.513134666134</td>
      <td>25.0468585626746</td>
      <td>A6305-01-003</td>
      <td>A6305-01</td>
      <td>總公司</td>
      <td>重慶南路1段2號7樓、18樓及20樓</td>
      <td>A6305-0013-00</td>
      <td>光復里</td>
      <td>AL0-F2-0-2018M06</td>
      <td>完全比對</td>
      <td>臺北市</td>
      <td>永豐金</td>
      <td>中正區</td>
      <td>771108</td>
      <td>02-2311-4345</td>
    </tr>
    <tr>
      <th>1</th>
      <td>9A9x</td>
      <td>121.307920753094</td>
      <td>24.990936314534</td>
      <td>A6801-87-008</td>
      <td>A6801-87</td>
      <td>分公司</td>
      <td>南華街77號3樓之1、3樓之2</td>
      <td>A6801-1397-00</td>
      <td>南華里</td>
      <td>AL0-F2-0-2018M06</td>
      <td>完全比對</td>
      <td>桃園市</td>
      <td>永豐金-桃園</td>
      <td>桃園區</td>
      <td>841201</td>
      <td>03-335-2581</td>
    </tr>

之前爬過上市櫃公司資訊,同樣查出經緯度,就可以做出公司附近的券商分點是否有在買的特徵。
個人覺得地緣券商實在是個很扯的特徵,這個這麼好查,買給你看也太明顯了,真的有什麼內線要低調偷偷買吧,但如果是很多員工在買就比較說得通了(員工有辦法知道公司狀況嗎?),如果是刻意買給大家看炒一波就合理了。


上一篇
14.爬公司資訊,地址、資本額(做地緣券商)
下一篇
16.rolling移動窗口計算
系列文
量化投資與機器學習研究30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言