{"id":1028,"date":"2025-06-02T17:36:05","date_gmt":"2025-06-04T10:08:04","guid":{"rendered":"https:\/\/badgameshow.com\/steven\/?p=1028"},"modified":"2025-06-04T17:36:05","modified_gmt":"2025-06-04T10:08:04","slug":"python%e8%82%a1%e7%a5%a8%e4%bb%a3%e7%a2%bc%e6%8a%93%e5%8f%96","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/steven\/python\/python%e8%82%a1%e7%a5%a8%e4%bb%a3%e7%a2%bc%e6%8a%93%e5%8f%96\/","title":{"rendered":"Python \u80a1\u7968\u4ee3\u78bc\u6293\u53d6\uff1a\u5b8c\u6574\u6559\u5b78\u8207\u6700\u4f73\u5be6\u8e10\uff082025 \u66f4\u65b0\uff09"},"content":{"rendered":"<p>&#8220;`html<\/p>\n<h1>Python \u80a1\u7968\u4ee3\u78bc\u6293\u53d6\uff1a\u5b8c\u6574\u6559\u5b78\u8207\u6700\u4f73\u5be6\u8e10\uff082025 \u66f4\u65b0\uff09<\/h1>\n<p>\u5728\u9019\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u5011\u5c07\u4ecb\u7d39\u5982\u4f55\u4f7f\u7528 Python \u722c\u87f2\u6280\u8853\u4f86\u6293\u53d6\u4e0a\u5e02\u80a1\u7968\u7684\u4ee3\u78bc\u3002\u96d6\u7136\u6709\u4e9b API \u53ef\u4ee5\u7372\u53d6\u80a1\u7968\u4ee3\u78bc\uff0c\u4f46\u901a\u5e38\u9700\u8981\u7533\u8acb\u4e26\u4e14\u53ef\u80fd\u9700\u8981\u4ed8\u8cbb\u3002\u9019\u6b21\u6211\u5011\u5c07\u5229\u7528 Python \u7684\u722c\u87f2\u529f\u80fd\uff0c\u514d\u8cbb\u6293\u53d6\u6240\u6709\u80a1\u7968\u4ee3\u78bc\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/steven\/wp-content\/uploads\/2021\/01\/python\u6293\u80a1\u7968\u4ee3\u78bc2.png\" alt=\"Python \u80a1\u7968\u4ee3\u78bc\u6293\u53d6\u7bc4\u4f8b\" title=\"\"><\/p>\n<h2>1. \u627e\u5c0b\u6240\u6709\u80a1\u7968\u4ee3\u78bc\u7db2\u7ad9<\/h2>\n<p>\u6211\u5011\u5c07\u4f7f\u7528\u4ee5\u4e0b\u7db2\u5740\u4f86\u6293\u53d6\u80a1\u7968\u4ee3\u78bc\uff1a[TWSE \u80a1\u7968\u4ee3\u78bc\u67e5\u8a62](http:\/\/isin.twse.com.tw\/isin\/C_public.jsp?strMode=2)\u3002\u9019\u500b\u7db2\u7ad9\u63d0\u4f9b\u4e86\u76ee\u524d\u6240\u6709\u4e0a\u5e02\u516c\u53f8\u7684\u80a1\u7968\u4ee3\u78bc\uff0c\u4e26\u4ee5\u7c21\u55ae\u7684 HTML \u8868\u683c\u5448\u73fe\uff0c\u4fbf\u65bc\u89e3\u6790\u3002<\/p>\n<h2>2. \u4f7f\u7528 Python \u89e3\u6790 HTML \u8868\u683c<\/h2>\n<p>\u6211\u5011\u5c07\u4f7f\u7528 `pandas` \u5957\u4ef6\u7684 `read_html` \u51fd\u6578\u4f86\u89e3\u6790 HTML \u8868\u683c\u3002\u9019\u500b\u51fd\u6578\u5c08\u9580\u7528\u65bc\u63d0\u53d6 HTML \u4e2d\u7684 `<\/p>\n<tr>` \u548c `<\/p>\n<td>` \u6a19\u7c64\u3002<\/p>\n<p>&#8220;`python<br \/>\nimport requests<br \/>\nimport pandas as pd<\/p>\n<p># \u7372\u53d6\u7db2\u9801\u5167\u5bb9<br \/>\nres = requests.get(&#8220;http:\/\/isin.twse.com.tw\/isin\/C_public.jsp?strMode=2&#8221;)<\/p>\n<p># \u89e3\u6790 HTML \u8868\u683c<br \/>\ndf = pd.read_html(res.text)[0]\nprint(df)<br \/>\n&#8220;`<\/p>\n<h3>\u7d50\u679c<\/h3>\n<p>\u9019\u6bb5\u7a0b\u5f0f\u78bc\u5c07\u8fd4\u56de\u4e00\u500b\u5305\u542b\u6240\u6709\u80a1\u7968\u4ee3\u78bc\u7684 DataFrame\uff0c\u4f46\u6211\u5011\u9700\u8981\u9032\u4e00\u6b65\u6e05\u7406\u6578\u64da\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/steven\/wp-content\/uploads\/2021\/01\/python\u6293\u80a1\u7968\u4ee3\u78bc4.png\" alt=\"\u89e3\u6790\u80a1\u7968\u4ee3\u78bc\u7684\u7d50\u679c\" title=\"\"><\/p>\n<h2>3. \u6709\u50f9\u8b49\u5238\u4ee3\u865f\u586b\u5165\u6b04\u4f4d<\/h2>\n<p>\u6211\u5011\u7684 DataFrame \u4e2d\u5305\u542b\u4e03\u500b\u6b04\u4f4d\uff0c\u6211\u5011\u9700\u8981\u5c07\u9019\u4e9b\u6b04\u4f4d\u91cd\u65b0\u547d\u540d\uff0c\u4ee5\u4fbf\u4ee5\u5f8c\u7684\u6578\u64da\u8655\u7406\u3002<\/p>\n<p>&#8220;`python<br \/>\ndf.columns = [&#8216;\u6709\u50f9\u8b49\u5238\u4ee3\u865f\u53ca\u540d\u7a31&#8217;, &#8216;\u570b\u969b\u8b49\u5238\u8fa8\u8b58\u865f\u78bc(ISIN Code)&#8217;, &#8216;\u4e0a\u5e02\u65e5&#8217;, &#8216;\u5e02\u5834\u5225&#8217;, &#8216;\u7522\u696d\u5225&#8217;, &#8216;CFICode&#8217;, &#8216;\u5099\u8a3b&#8217;]\n&#8220;`<\/p>\n<h2>4. \u904e\u6ffe\u80a1\u7968\u4ee3\u78bc<\/h2>\n<p>\u6211\u5011\u5c07\u63d0\u53d6\u51fa\u56db\u4f4d\u6578\u7684\u80a1\u7968\u4ee3\u78bc\u3002\u7531\u65bc\u80a1\u7968\u4ee3\u78bc\u548c\u540d\u7a31\u4e4b\u9593\u5b58\u5728\u7a7a\u767d\u5b57\u7b26\uff0c\u6211\u5011\u9700\u8981\u5c0d\u5b57\u7b26\u4e32\u9032\u884c\u5206\u5272\u3002<\/p>\n<p>&#8220;`python<br \/>\nimport re<\/p>\n<p>for code in df[&#8216;\u6709\u50f9\u8b49\u5238\u4ee3\u865f\u53ca\u540d\u7a31&#8217;]:<br \/>\n    stackCode = code.split(&#8216;\u3000&#8217;)<br \/>\n    if len(stackCode) == 2 and re.match(r&#8217;^\\d{4}$&#8217;, stackCode[0]):<br \/>\n        print(stackCode[0], stackCode[1])  # \u80a1\u7968\u4ee3\u78bc\u548c\u540d\u7a31<br \/>\n&#8220;`<\/p>\n<h2>5. \u6700\u7d42\u7a0b\u5f0f\u78bc<\/h2>\n<p>\u4ee5\u4e0b\u662f\u5b8c\u6574\u7684\u7a0b\u5f0f\u78bc\uff0c\u5c07\u6240\u6709\u6b65\u9a5f\u6574\u5408\u5728\u4e00\u8d77\uff1a<\/p>\n<p>&#8220;`python<br \/>\nimport requests<br \/>\nimport pandas as pd<br \/>\nimport re<\/p>\n<p># \u7372\u53d6\u7db2\u9801\u5167\u5bb9<br \/>\nres = requests.get(&#8220;http:\/\/isin.twse.com.tw\/isin\/C_public.jsp?strMode=2&#8221;)<br \/>\ndf = pd.read_html(res.text)[0]\ndf.columns = [&#8216;\u6709\u50f9\u8b49\u5238\u4ee3\u865f\u53ca\u540d\u7a31&#8217;, &#8216;\u570b\u969b\u8b49\u5238\u8fa8\u8b58\u865f\u78bc(ISIN Code)&#8217;, &#8216;\u4e0a\u5e02\u65e5&#8217;, &#8216;\u5e02\u5834\u5225&#8217;, &#8216;\u7522\u696d\u5225&#8217;, &#8216;CFICode&#8217;, &#8216;\u5099\u8a3b&#8217;]\n<p># \u5132\u5b58\u80a1\u7968\u4ee3\u78bc<br \/>\nstock_code_dict = {}<br \/>\nfor code in df[&#8216;\u6709\u50f9\u8b49\u5238\u4ee3\u865f\u53ca\u540d\u7a31&#8217;]:<br \/>\n    stackCode = code.split(&#8216;\u3000&#8217;)<br \/>\n    if len(stackCode) == 2 and re.match(r&#8217;^\\d{4}$&#8217;, stackCode[0]):<br \/>\n        stock_code_dict[stackCode[0]] = stackCode[1]\n<p>print(stock_code_dict)<br \/>\n&#8220;`<\/p>\n<h2>6. \u8f38\u51fa\u7d50\u679c<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/steven\/wp-content\/uploads\/2021\/01\/python\u6293\u80a1\u7968\u4ee3\u78bc1.png\" alt=\"\u80a1\u7968\u4ee3\u78bc\u8f38\u51fa\u7d50\u679c\" title=\"\"><\/p>\n<p>\u5728\u9019\u7bc7\u6587\u7ae0\u4e2d\uff0c\u6211\u5011\u5b78\u6703\u4e86\u5982\u4f55\u4f7f\u7528 Python \u722c\u53d6\u4e26\u89e3\u6790\u4e0a\u5e02\u80a1\u7968\u7684\u4ee3\u78bc\uff0c\u9019\u4e9b\u4ee3\u78bc\u53ef\u4ee5\u9032\u4e00\u6b65\u61c9\u7528\u65bc\u4ea4\u6613\u7b56\u7565\u7b49\u591a\u7a2e\u7528\u9014\u3002<\/p>\n<p>\u5982\u9700\u6df1\u5165\u5b78\u7fd2 Python \u7684\u76f8\u95dc\u77e5\u8b58\uff0c\u5efa\u8b70\u53c3\u8003 [Python \u7a0b\u5f0f\u8a2d\u8a08\u6559\u5b78](https:\/\/vocus.cc\/article\/5d9a2eaffd89780001d3b3b9) \u548c [Python \u722c\u87f2\u5be6\u4f5c](https:\/\/miner.tw\/python-web-scraping)\u3002<\/p>\n<h2>Q&#038;A\uff08\u5e38\u898b\u554f\u984c\u89e3\u7b54\uff09<\/h2>\n<h3>Q1\uff1a\u4ec0\u9ebc\u662f\u80a1\u7968\u4ee3\u78bc\uff1f<\/h3>\n<p>A1\uff1a\u80a1\u7968\u4ee3\u78bc\u662f\u7528\u4f86\u552f\u4e00\u6a19\u8b58\u80a1\u7968\u7684\u4e00\u7d44\u5b57\u6bcd\u6216\u6578\u5b57\uff0c\u901a\u5e38\u7531\u4ea4\u6613\u6240\u5206\u914d\u3002<\/p>\n<h3>Q2\uff1a\u4f7f\u7528 Python \u722c\u87f2\u6293\u53d6\u80a1\u7968\u4ee3\u78bc\u662f\u5426\u5408\u6cd5\uff1f<\/h3>\n<p>A2\uff1a\u4e00\u822c\u4f86\u8aaa\uff0c\u4f7f\u7528\u722c\u87f2\u6293\u53d6\u516c\u958b\u7db2\u7ad9\u7684\u6578\u64da\u662f\u5408\u6cd5\u7684\uff0c\u4f46\u8acb\u9075\u5b88\u7db2\u7ad9\u7684\u4f7f\u7528\u689d\u6b3e\u548c robots.txt \u898f\u7bc4\u3002<\/p>\n<h3>Q3\uff1a\u6211\u53ef\u4ee5\u4f7f\u7528\u9019\u4e9b\u80a1\u7968\u4ee3\u78bc\u4f86\u9032\u884c\u4ea4\u6613\u55ce\uff1f<\/h3>\n<p>A3\uff1a\u662f\u7684\uff0c\u9019\u4e9b\u80a1\u7968\u4ee3\u78bc\u53ef\u4ee5\u7528\u65bc\u5404\u7a2e\u91d1\u878d\u4ea4\u6613\u5e73\u53f0\uff0c\u4f46\u8acb\u78ba\u4fdd\u6578\u64da\u7684\u6e96\u78ba\u6027\u3002<br \/>\n&#8220;`<br \/>\n&#8212;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;`html Python \u80a1\u7968\u4ee3\u78bc\u6293&#8230;<\/p>\n","protected":false},"author":1,"featured_media":1033,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"aside","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Python\u80a1\u7968\u4ee3\u78bc\u6293\u53d6 \u4e0a\u5e02\u80a1\u7968\u4e00\u628a\u6293","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[18],"tags":[],"class_list":["post-1028","post","type-post","status-publish","format-aside","has-post-thumbnail","hentry","category-python","post_format-post-format-aside"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/badgameshow.com\/steven\/wp-content\/uploads\/2021\/01\/python\u6293\u80a1\u7968\u4ee3\u78bc2.png","jetpack-related-posts":[],"jetpack_shortlink":"https:\/\/wp.me\/pcFK27-gA","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts\/1028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/comments?post=1028"}],"version-history":[{"count":16,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts\/1028\/revisions"}],"predecessor-version":[{"id":13073,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/posts\/1028\/revisions\/13073"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/media\/1033"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/media?parent=1028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/categories?post=1028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/steven\/wp-json\/wp\/v2\/tags?post=1028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}