{"id":8772,"date":"2023-05-29T20:57:42","date_gmt":"2023-05-29T12:57:42","guid":{"rendered":"\/?p=8772"},"modified":"2023-05-29T21:04:13","modified_gmt":"2023-05-29T13:04:13","slug":"%e7%9f%a5%e4%b9%8e%e7%9a%84%e5%ad%97%e4%bd%93%e5%8a%a0%e5%af%86","status":"publish","type":"post","link":"\/?p=8772","title":{"rendered":"\u77e5\u4e4e\u7684\u5b57\u4f53\u52a0\u5bc6"},"content":{"rendered":"<ol>\n<li>\n<p>\u83b7\u53d6\u5230base64\u5b57\u7b26\u4e32\u5e76\u5220\u9664\u5934\u90e8\u4fe1\u606f\uff0c\u5728\u8fd9\u91cc\u5c31\u662fdata:font\/opentype;base64, \u9017\u53f7\u4e5f\u8981\u5220\u9664\uff0c\u8fd9\u6837\u5c31\u83b7\u53d6\u5230\u4e86\u5b57\u4f53\u4fe1\u606f\u3002 \u6bd4\u5982\uff1aT1RUTwAJAIAAAwAQQ0ZGIBcEq......\u8fc7\u957f\u4e0d\u5c55\u793a \u3002<\/p>\n<\/li>\n<li>\n<p>\u8bbf\u95eehttp:\/\/www.motobit.com\/util\/base64-decoder-encoder.asp \u8fd9\u4e2a\u7f51\u7ad9\uff0c\u5c06\u7eaf\u5b57\u4f53\u4fe1\u606f\u5b57\u7b26\u4e32\u7c98\u8d34\u8fdb\u7f16\u8f91\u533a\u57df\uff0c\u7136\u540e\u4e0b\u65b9\u89e3\u7801\u9009\u9879\u9009\u62e9\u89e3\u7801base64\u5b57\u7b26\u4e32 \u548c\u5bfc\u51fa\u4e3a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5373\uff1a<br \/>\n<img src=\"https:\/\/lemon-guess.oss-cn-hangzhou.aliyuncs.com\/img\/SouthEast.png\" alt=\"\u8fd9\u91cc\u5199\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u7f51\u7ad9\u53ef\u89e3\u7801base64\u5e76\u5b58\u50a8\u4e3a\u4e8c\u8fdb\u5236\u6570\u636e\u7684 .bin \u6587\u4ef6\uff0c\u5c06\u4e0b\u8f7d\u7684\u4e8c\u8fdb\u5236\u6570\u636e\u7684 .bin \u6587\u4ef6\u540e\u7f00\u66f4\u6539\u4e3a .ttf<\/p>\n<\/li>\n<li>\n<p>\u767e\u5ea6\u5b57\u4f53\u7f16\u8f91\u5668<a href=\"https:\/\/kekee000.github.io\/fonteditor\/\">FontEditor (kekee000.github.io)<\/a><\/p>\n<\/li>\n<li>\n<p>\u53c2\u8003\u535a\u5ba2\uff1a<br \/>\n<a href=\"https:\/\/www.likecs.com\/show-308355464.html\">https:\/\/www.likecs.com\/show-308355464.html<\/a><br \/>\n<a href=\"http:\/\/e.betheme.net\/article\/show-157263.html?action=onClick\">http:\/\/e.betheme.net\/article\/show-157263.html?action=onClick<\/a><\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-python\"># -*- coding: UTF-8 -*-\n&quot;&quot;&quot;=========================================================\n@Project -&gt; File: aiqicSpider -&gt; zhihu\n@IDE: PyCharm\n@author: lxc\n@date: 2023\/5\/25 \u4e0b\u5348 4:04\n@Desc:\n1-\u529f\u80fd\u63cf\u8ff0\uff1a\n\n2-\u5b9e\u73b0\u6b65\u9aa4\n    1-\n&quot;&quot;&quot;\nimport os\nimport datetime\nfrom w3lib import html\nimport re\nfrom lxml import etree\nimport requests\nfrom utils.util import *\nfrom fontTools.ttLib import TTFont\nimport xml.etree.ElementTree as ET\nimport logging\nimport base64\nlogger = logging.getLogger(&#039;log&#039;)\n\ndef get_new_string(string):\n    &quot;&quot;&quot;\n    \u89e3\u5b57\u4f53\u52a0\u5bc6\u7684\u6d41\u7a0b\n    :param string:\u5b57\u4f53\u52a0\u5bc6\u7684\u5185\u5bb9\n    :return: \u6b63\u786e\u7684\u5185\u5bb9\n    &quot;&quot;&quot;\n    filePath = &#039;source\/zhihuxiaoshuo_decode.xml&#039;\n    tree = ET.parse(filePath)\n    # \u83b7\u53d6\u6240\u6709\u6df7\u6dc6\u5b57\u7b26\uff0851\u4e2a\uff09\n    # GlyphOrder = [t.get(&#039;name&#039;) for t in tree.findall(&#039;.\/GlyphOrder\/GlyphID&#039;)]\n    # \u83b7\u53d6\u6620\u5c04\u5173\u7cfb\u5b57\u5178\n    version = tree.find(&#039;.\/cmap\/tableVersion&#039;).get(&#039;version&#039;)\n    map_trees = tree.findall(f&#039;.\/cmap\/cmap_format_4[@platformID=&quot;{version}&quot;]\/map&#039;)\n    font_dict = {(r&#039;\\u&#039; + map_tree.get(&#039;code&#039;)[2:]): (r&#039;\\u&#039; + map_tree.get(&#039;name&#039;)[3:]) for map_tree in map_trees}\n    # \u5f00\u59cb\u8f6c\u6362\u6210\u6b63\u786e\u7684Unicode\u7f16\u7801(\u4ec5\u8f6c\u6362\u542b\u572851\u4e2a\u6df7\u6dc6\u5b57\u7b26\u5185\u7684\u6587\u5b57)\n    new_string = &#039;&#039;\n    for s in string:\n        unicode_s = zh_to_unicode(s)\n        new_unicode_s = font_dict.get(unicode_s, &#039;&#039;) if font_dict.get(unicode_s, &#039;&#039;) else unicode_s\n        new_string += new_unicode_s\n    new_string = unicode_to_zh(new_string)\n    return new_string\n\ndef base64_to_xml(base64str, filePath = &#039;source\/zhihuxiaoshuo_decode.ttf&#039;):\n    # \u5b58\u50a8\u7684ttf\u6587\u4ef6\u8def\u5f84\u53ca\u540d\u79f0\n    filePath = filePath\n    # \u5b57\u4f53\u6587\u4ef6\u7684base64\n    # \u5b58\u50a8\u6587\u4ef6\uff08\u4ee5\u4e8c\u8fdb\u5236\u65b9\u5f0f\uff09\n    # filePath \uff1a\u5b58\u50a8\u7684\u6587\u4ef6\u8def\u5f84\u53ca\u540d\u79f0\n    # data \uff1a\u9700\u8981\u5b58\u50a8\u7684\u6570\u636e\n    with open(filePath, &#039;wb&#039;) as f:\n        f.write(base64.b64decode(base64str))\n    font = TTFont(filePath)\n    font.saveXML(filePath.replace(&#039;.ttf&#039;, &#039;.xml&#039;))\ndef get_content_font(url=&#039;&#039;):\n    headers = {\n        &quot;Host&quot;: &quot;www.zhihu.com&quot;,\n        &quot;cache-control&quot;: &quot;max-age=0&quot;,\n        &quot;sec-ch-ua&quot;: &quot;\\&quot;Not.A\/Brand\\&quot;;v=\\&quot;8\\&quot;, \\&quot;Chromium\\&quot;;v=\\&quot;114\\&quot;, \\&quot;Microsoft Edge\\&quot;;v=\\&quot;114\\&quot;&quot;,\n        &quot;sec-ch-ua-mobile&quot;: &quot;?0&quot;,\n        &quot;sec-ch-ua-platform&quot;: &quot;\\&quot;Windows\\&quot;&quot;,\n        &quot;upgrade-insecure-requests&quot;: &quot;1&quot;,\n        &quot;user-agent&quot;: &quot;Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/114.0.0.0 Safari\/537.36 Edg\/114.0.0.0&quot;,\n        &quot;accept&quot;: &quot;text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8,application\/signed-exchange;v=b3;q=0.7&quot;,\n        &quot;sec-fetch-site&quot;: &quot;none&quot;,\n        &quot;sec-fetch-mode&quot;: &quot;navigate&quot;,\n        &quot;sec-fetch-user&quot;: &quot;?1&quot;,\n        &quot;sec-fetch-dest&quot;: &quot;document&quot;,\n        &quot;accept-language&quot;: &quot;zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6&quot;,\n        &quot;x-forwarded-for&quot;: &quot;4.2.2.2&quot;\n    }\n    cookies = {\n        &quot;_zap&quot;: &quot;a83827de-3b91-4fcb-8cac-b05c0ce2c722&quot;,\n        &quot;d_c0&quot;: &quot;AWBYhnhPphaPTjRW3tDn7abGKTptvpsXWg4=|1681898026&quot;,\n        &quot;YD00517437729195%3AWM_TID&quot;: &quot;tlc%2B8RbWlU1AEVVAUBKEfswCf0D76f6G&quot;,\n        &quot;YD00517437729195%3AWM_NI&quot;: &quot;1a48fqyfOV1Qek9xh7T6V2KYMug3eGp7rlxL%2B5wSQWZ7NWDVzL7Jbx%2BE3Ot54j5HRGPLDmfMEFCfsl84CRZR7dlymKR7lcyBszRqRaMzx04uYRMAwmsSykSvix7DGFOrVlk%3D&quot;,\n        &quot;YD00517437729195%3AWM_NIKE&quot;: &quot;9ca17ae2e6ffcda170e2e6ee8ac2688ef1feccdc799cb48ea3d85b828a9facc53c8888a7b9c739a9bc99d8d62af0fea7c3b92af3bffcd9e57bbbba81b7b45ba7b5f799eb3d98ea9ad3ca538faba9d4e84db4e9be8dfb48e9ebb9b4d45d9ae982b8c75eba94f9abe174e99bfdb0f73ff8b6fba9d14d94948c8ee547879a8d87f268fcec8db3d95af5bca49af04192e9a484fc4ab1a69e92d16b8fa6b8d1b77f9b8e83a2f667b18db78cd27eaba8f9a5c64e8dae9a8dea37e2a3&quot;,\n        &quot;__snaker__id&quot;: &quot;iUG6Tku5N70vX1Vy&quot;,\n        &quot;gdxidpyhxdE&quot;: &quot;ndOZ%2BuniZlLfR3P74HSwhp9%2FtNw7eCBbuae3759jtbki87e9StUKEJR75RRNsGUGzp2bJVKHg132UKnp%2FzuKC%5Cb7v%5C718AqQDwm0PSa0tDayzE7K4kcjlnMlTpaE3woJkn4pS1%2BYAamHHQlYkjz%2F9fMkiBHkcCuj1%2FzS9pWgsqEB594m%3A1684985764828&quot;,\n        &quot;captcha_session_v2&quot;: &quot;2|1:0|10:1684984938|18:captcha_session_v2|88:WXhPY0hIQ2RVTEI4Qi91TTV0dGQ4a25GTU13L1R4ZHI5ZVc4Zkd5MFZieHhvTVVqdTY1QjA3cHlORDdGUW05MA==|15966ce0b32650122e3711c7951a753abff1705e19797653ae407991ad84cd1f&quot;,\n        &quot;captcha_ticket_v2&quot;: &quot;2|1:0|10:1684984948|17:captcha_ticket_v2|704:eyJ2YWxpZGF0ZSI6IkNOMzFfdnJlUXdUQUR0VUd6TkhpbnAtSGEtLkJlUDIxeFlTQjRxa2tzNV9HdWJlcEVneGhnanZEeVJIaF9GUmFEWm5QVlJxRFlrWEFVa0NKcUtyT3NIaGYxQk55U3NibS4uQXZzYlhXOHJYeTE2b0EuQzZwYlg2UC5IQ21yUXdMd3dPZnpDZE9jeTRHOTU5TFJUQWdVNkdHNmJpUWFrODZBQ2tFS1EyOVFlVmlyR2NfSDhZLmRINEdiUmljRHZzY2MuOHE5RlQxcnZoVjhoUER5WG0uVFc2QlQxLk5ERTlqRDBQSWRYbG8tUWJUTVZZRTFCOElaU0Z6VWluSFZNNW9mWWJHQjBzZ2VjWWxNVlJOUGROQzVNSzBmVWlwWEdaQVBpLnFHUnpQV0NRalB1MXZsWjlyWjd0b0NKOUd3eHBDNFp3cGxUNlNjVnJBV3ZZRGZJdl9vLjQ0TlVSODRwOENURDhvaTFrbnN0UXVaQW9ReV9SLlctVFQ2dm00V1ZqcWg3aWNsTXlmWVNaVTlWclQ3MHdBQ2tNaVdoQ0h0cWNfMUVTQUxkZXpxZS1tODV6S25zbVB3cWxjck1tYmJfQjFwTEZ2TXNDNXVmeDgta3ppY05XRWFIZUQyUWFKZTB1NXhRSGxYWVdPQ25nV29LcTAyVXdKX1ZNU2RHSk5mLjlwMyJ9|2177d12942c4eff4c1b0baa54e8134edbdf1813ae1b86c35e82cc9dc1b90ba72&quot;,\n        &quot;q_c1&quot;: &quot;8dd23ed357234c70bd90121c81245e15|1684985081000|1684985081000&quot;,\n        &quot;tst&quot;: &quot;r&quot;,\n        &quot;z_c0&quot;: &quot;2|1:0|10:1684985158|4:z_c0|92:Mi4xLWpYUVJnQUFBQUFCWUZpR2VFLW1GaVlBQUFCZ0FsVk4tU0pjWlFERUtuZHFSTUV1UlBaSWlmTVpJbDBSbWRqUjl3|ddb60321ede5e0f5d84736a7f387bd2c147421df927de42add63619add23dc2c&quot;,\n        &quot;_xsrf&quot;: &quot;IzgYPBKsxbRtg2EWChUJjfXmPoSDHCZG&quot;,\n        &quot;Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49&quot;: &quot;1684907499,1684984858,1684994068,1685005668&quot;,\n        &quot;KLBRSID&quot;: &quot;c450def82e5863a200934bb67541d696|1685033161|1685033150&quot;\n    }\n    params = {\n        &quot;is_share_data&quot;: &quot;true&quot;,\n        &quot;vp_share_title&quot;: &quot;0&quot;\n    }\n    response = requests.get(url, headers=headers, cookies=cookies, params=params)\n    tree = etree.HTML(response.text)\n    title = &#039;&#039;.join(tree.xpath(&#039;\/\/*[@id=&quot;app&quot;]\/div\/h1\/text()&#039;))\n    content_tree = tree.xpath(&quot;\/\/div[@id=&#039;manuscript&#039;]&quot;)\n    doc = etree.tostring(content_tree[0])\n    html_content = html.remove_tags(doc)\n    content = html.replace_entities(html_content, keep=(&#039;\u00a3&#039;))\n    base64_string = &#039;&#039;.join(re.findall(&#039;src: url\\(data:font\/ttf;charset=utf-8;base64,(.*?)\\), url&#039;, response.text))\n    return title, content, base64_string\ndef zhxs_main(url=&#039;&#039;):\n    # \u83b7\u53d6\u6b63\u6587\u548c\u5b57\u4f53\n    try:\n        title, content, base64_string = get_content_font(url)\n    except Exception as e:\n        logger.exception(e)\n        logger.error(&quot;\u91c7\u96c6\uff1a\u83b7\u53d6\u6b63\u6587\u548c\u5b57\u4f53\u5931\u8d25\uff01\uff01\uff01\\n \u3010%s\u3011&quot; % url)\n        return\n    # \u5b58\u50a8\u5b57\u4f53\u6587\u4ef6\n    try:\n        base64_to_xml(base64_string)\n    except Exception as e:\n        logger.exception(e)\n        logger.error(&quot;\u5b58\u50a8\u5b57\u4f53\u6587\u4ef6\u5931\u8d25\uff01\uff01\uff01\\n \u3010%s\u3011&quot; % url)\n        return\n    # \u83b7\u53d6\u6b63\u786e\u5185\u5bb9\n    try:\n        new_content = get_new_string(content)\n    except Exception as e:\n        logger.exception(e)\n        logger.error(&quot;\u83b7\u53d6\u6b63\u786e\u5185\u5bb9\u5931\u8d25\uff01\uff01\uff01\\n \u3010%s\u3011&quot; % url)\n        return\n    # \u5b58\u50a8txt\u6587\u4ef6\n    try:\n        file_path = &#039;output\/&#039; + str(datetime.datetime.now())[:10]\n        if not os.path.exists(file_path):\n            os.mkdir(file_path)\n        file_name = file_path + &#039;\/&#039; + title + &#039;.txt&#039;\n        with open(file_name, &#039;w&#039;, encoding=&#039;utf-8&#039;) as f:\n            f.write(new_content)\n    except Exception as e:\n        logger.exception(e)\n        logger.error(&quot;\u5b58\u50a8txt\u6587\u4ef6\u5931\u8d25\uff01\uff01\uff01\\n \u3010%s\u3011&quot; % url)\n        return\n    return file_name\n\nif __name__ == &#039;__main__&#039;:\n    url = &#039;https:\/\/www.zhihu.com\/market\/paid_column\/1575901064246743040\/section\/1578384160636489728&#039;\n    zhxs_main(url)<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u83b7\u53d6\u5230base64\u5b57\u7b26\u4e32\u5e76\u5220\u9664\u5934\u90e8\u4fe1\u606f\uff0c\u5728\u8fd9\u91cc\u5c31\u662fdata:font\/opentype;base64, \u9017\u53f7\u4e5f\u8981\u5220\u9664\uff0c\u8fd9\u6837\u5c31\u83b7\u53d6\u5230\u4e86\u5b57\u4f53   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[134],"tags":[166,55],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/8772"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8772"}],"version-history":[{"count":3,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/8772\/revisions"}],"predecessor-version":[{"id":8776,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/8772\/revisions\/8776"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8772"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8772"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8772"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}