<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>下里巴人的博客</title>
  
  <subtitle>变成光，而不是被照亮</subtitle>
  <link href="http://www.messi.ltd/atom.xml" rel="self"/>
  
  <link href="http://www.messi.ltd/"/>
  <updated>2023-03-09T11:55:11.117Z</updated>
  <id>http://www.messi.ltd/</id>
  
  <author>
    <name>下里巴人</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>三创项目-筛选算法及其优化</title>
    <link href="http://www.messi.ltd/posts/55be8a54.html"/>
    <id>http://www.messi.ltd/posts/55be8a54.html</id>
    <published>2023-03-09T11:07:06.000Z</published>
    <updated>2023-03-09T11:55:11.117Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言：</strong></p><p>本篇文章主要记录一下本次慧发发项目中，实现根据货物目的地自动判定物流园选择的矩阵并进行优化的过程。</p></blockquote><h1 id="算法原理"><a href="#算法原理" class="headerlink" title="算法原理"></a>算法原理</h1><p>原理图如下：</p><img src="https://pic1.zhimg.com/80/v2-1cbbe8757e83f5de71c7490447c2e220_1440w.webp"><p>我们需要完成的是，在一张表中，显示出所有符合要求的方案，也就是输入货物目的地，最终输出 Cij，以便后续的规划算法。</p><h1 id="算法实现"><a href="#算法实现" class="headerlink" title="算法实现"></a>算法实现</h1><h2 id="第一版算法如下"><a href="#第一版算法如下" class="headerlink" title="第一版算法如下"></a>第一版算法如下</h2><h3 id="Models"><a href="#Models" class="headerlink" title="Models"></a>Models</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="comment">#初始化货物类</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Goods</span>:</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self,destination,deadline,weight,volume</span>):</span><br><span class="line">        <span class="comment">#定义了该批货品的目的地</span></span><br><span class="line">        self.destination = destination</span><br><span class="line">        <span class="comment">#定义了货品的发货截止日期</span></span><br><span class="line">        self.deadline = deadline</span><br><span class="line">        <span class="comment">#定义了货品的重量</span></span><br><span class="line">        self.weight = weight</span><br><span class="line">        <span class="comment">#定义了货品的体积</span></span><br><span class="line">        self.volume = volume</span><br><span class="line"></span><br><span class="line"><span class="comment">#初始化物流园类</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Logistics</span>:</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self,name,Latitude_and_longitude,rates</span>):</span><br><span class="line">        <span class="comment">#定义了物流园的名称</span></span><br><span class="line">        self.name = name</span><br><span class="line">        <span class="comment">#定义了经纬度</span></span><br><span class="line">        self.Latitude_and_longitude = Latitude_and_longitude</span><br><span class="line">        <span class="comment">#定义了物流园中的商户（多个，类型为列表）</span></span><br><span class="line">        self.commercial_tenants = []</span><br><span class="line">        <span class="comment">#定义了物流园的进场费</span></span><br><span class="line">        self.rates = rates</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">add_commercial_tenant</span>(<span class="params">self,commercial_tenant</span>):</span><br><span class="line">        <span class="comment">#定义添加物流园专线的方法</span></span><br><span class="line">        self.commercial_tenants.append(commercial_tenant)</span><br><span class="line"></span><br><span class="line"><span class="comment">#初始化物流园专线</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Commercial_tenant</span>:</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self,site,price,time_consuming,interval</span>):</span><br><span class="line">        <span class="comment">#定义了物流园的目的地</span></span><br><span class="line">        self.site = site</span><br><span class="line">        <span class="comment">#定义了发货单价</span></span><br><span class="line">        self.price = price</span><br><span class="line">        <span class="comment">#定义了发货耗时</span></span><br><span class="line">        self.time_consuming = time_consuming</span><br><span class="line">        <span class="comment">#定义了发货间隔</span></span><br><span class="line">        self.interval = interval</span><br><span class="line"></span><br><span class="line"><span class="comment">#创建两个物流商户实例</span></span><br><span class="line">chengdu_site1 = Commercial_tenant(<span class="string">&#x27;chengdu&#x27;</span>,<span class="number">15</span>,<span class="number">4</span>,<span class="number">3</span>)</span><br><span class="line">changsha_site1 = Commercial_tenant(<span class="string">&#x27;changsha&#x27;</span>,<span class="number">12</span>,<span class="number">4</span>,<span class="number">2</span>)</span><br><span class="line">wuhan_site1 = Commercial_tenant(<span class="string">&#x27;wuhan&#x27;</span>,<span class="number">8</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line">nanchang_site1 = Commercial_tenant(<span class="string">&#x27;nanchang&#x27;</span>,<span class="number">15</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line"></span><br><span class="line">chengdu_site2 = Commercial_tenant(<span class="string">&#x27;chengdu&#x27;</span>,<span class="number">7</span>,<span class="number">4</span>,<span class="number">3</span>)</span><br><span class="line">changsha_site2 = Commercial_tenant(<span class="string">&#x27;changsha&#x27;</span>,<span class="number">16</span>,<span class="number">4</span>,<span class="number">2</span>)</span><br><span class="line">luoyang_site2 = Commercial_tenant(<span class="string">&#x27;luoyang&#x27;</span>,<span class="number">8</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line">zhenzhou_site2 = Commercial_tenant(<span class="string">&#x27;zhenzhou&#x27;</span>,<span class="number">15</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line"></span><br><span class="line">chengdu_site3 = Commercial_tenant(<span class="string">&#x27;chengdu&#x27;</span>,<span class="number">41</span>,<span class="number">4</span>,<span class="number">3</span>)</span><br><span class="line">changsha_site3 = Commercial_tenant(<span class="string">&#x27;changsha&#x27;</span>,<span class="number">17</span>,<span class="number">4</span>,<span class="number">2</span>)</span><br><span class="line">nanyang_site3 = Commercial_tenant(<span class="string">&#x27;nanyang&#x27;</span>,<span class="number">8</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line">hefei_site4 = Commercial_tenant(<span class="string">&#x27;heifei&#x27;</span>,<span class="number">15</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line"></span><br><span class="line">chengdu_site4 = Commercial_tenant(<span class="string">&#x27;chengdu&#x27;</span>,<span class="number">21</span>,<span class="number">4</span>,<span class="number">3</span>)</span><br><span class="line">changsha_site4 = Commercial_tenant(<span class="string">&#x27;changsha&#x27;</span>,<span class="number">13</span>,<span class="number">4</span>,<span class="number">2</span>)</span><br><span class="line">beijin_site4 = Commercial_tenant(<span class="string">&#x27;beijin&#x27;</span>,<span class="number">8</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line">nancahng_site4 = Commercial_tenant(<span class="string">&#x27;nanchang&#x27;</span>,<span class="number">15</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">#创建一个物流园实例</span></span><br><span class="line">wuliuyuan1 = Logistics(<span class="number">1</span>,<span class="string">&#x27;13.173;31.321&#x27;</span>,<span class="number">15</span>)</span><br><span class="line">wuliuyuan2 = Logistics(<span class="number">2</span>,<span class="string">&#x27;12.125;35.321&#x27;</span>,<span class="number">10</span>)</span><br><span class="line">wuliuyuan3 = Logistics(<span class="number">3</span>,<span class="string">&#x27;13.553;34,321&#x27;</span>,<span class="number">15</span>)</span><br><span class="line">wuliuyuan4 = Logistics(<span class="number">4</span>,<span class="string">&#x27;12.123;34.111&#x27;</span>,<span class="number">10</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">#将物流园专线添加至实例中</span></span><br><span class="line">wuliuyuan1.add_commercial_tenant(chengdu_site1)</span><br><span class="line">wuliuyuan1.add_commercial_tenant(changsha_site1)</span><br><span class="line">wuliuyuan1.add_commercial_tenant(wuhan_site1)</span><br><span class="line">wuliuyuan1.add_commercial_tenant(nanchang_site1)</span><br><span class="line"></span><br><span class="line">wuliuyuan2.add_commercial_tenant(chengdu_site2)</span><br><span class="line">wuliuyuan2.add_commercial_tenant(changsha_site2)</span><br><span class="line">wuliuyuan2.add_commercial_tenant(luoyang_site2)</span><br><span class="line">wuliuyuan2.add_commercial_tenant(zhenzhou_site2)</span><br><span class="line"></span><br><span class="line">wuliuyuan3.add_commercial_tenant(chengdu_site3)</span><br><span class="line">wuliuyuan3.add_commercial_tenant(changsha_site3)</span><br><span class="line">wuliuyuan3.add_commercial_tenant(nanyang_site3)</span><br><span class="line">wuliuyuan3.add_commercial_tenant(hefei_site4)</span><br><span class="line"></span><br><span class="line">wuliuyuan4.add_commercial_tenant(chengdu_site4)</span><br><span class="line">wuliuyuan4.add_commercial_tenant(changsha_site4)</span><br><span class="line">wuliuyuan4.add_commercial_tenant(beijin_site4)</span><br><span class="line">wuliuyuan4.add_commercial_tenant(nancahng_site4)</span><br><span class="line"></span><br><span class="line"><span class="comment">#添加货物实例destination,deadline,weight,volume</span></span><br><span class="line">huowu1 = Goods(<span class="string">&#x27;chengdu&#x27;</span>,<span class="string">&#x27;2023/3/10&#x27;</span>,<span class="number">1</span>,<span class="number">1</span>)</span><br><span class="line">huowu2 = Goods(<span class="string">&#x27;changsha&#x27;</span>,<span class="string">&#x27;2023/3/10&#x27;</span>,<span class="number">1</span>,<span class="number">1</span>)</span><br><span class="line">huowu3 = Goods(<span class="string">&#x27;nanyang&#x27;</span>,<span class="string">&#x27;2023/3/10&#x27;</span>,<span class="number">1</span>,<span class="number">1</span>)</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="Sizer"><a href="#Sizer" class="headerlink" title="Sizer"></a>Sizer</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> Models <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">import</span> math</span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"><span class="keyword">import</span> datetime</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment"># 初始化一个i*j的二维列表，i为物流园实例数，j为此次货物实例数，值均为M（无限大）</span></span><br><span class="line">table = [[math.inf <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">4</span>)] <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">3</span>)]</span><br><span class="line"></span><br><span class="line"><span class="comment">#货物目的地列表</span></span><br><span class="line">V = [huowu1.destination,huowu2.destination,huowu3.destination]</span><br><span class="line"><span class="comment">#定义了一个时间格式化的函数</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">format_time</span>(<span class="params">x</span>):</span><br><span class="line"></span><br><span class="line">    formattime = datetime.datetime.strptime(x,<span class="string">r&#x27;%Y/%m/%d&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> formattime</span><br><span class="line"><span class="comment">#货物截止时间列表</span></span><br><span class="line">T = <span class="built_in">list</span>(<span class="built_in">map</span>(format_time,[huowu1.deadline,huowu2.deadline,huowu3.deadline]))</span><br><span class="line"><span class="comment">#货物目的地对应截止日期的字典</span></span><br><span class="line">V_T = <span class="built_in">dict</span>(<span class="built_in">zip</span>(V,T))</span><br><span class="line"><span class="comment">#每个物流园商户具有的地点列表</span></span><br><span class="line">S1_site = [s.site <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan1.commercial_tenants]</span><br><span class="line">S2_site = [s.site <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan2.commercial_tenants]</span><br><span class="line">S3_site = [s.site <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan3.commercial_tenants]</span><br><span class="line">S4_site = [s.site <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan4.commercial_tenants]</span><br><span class="line"><span class="comment">#定义每个物流园商户具有的价格列表</span></span><br><span class="line">S1_price = [s.price <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan1.commercial_tenants]</span><br><span class="line">S2_price = [s.price <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan2.commercial_tenants]</span><br><span class="line">S3_price = [s.price <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan3.commercial_tenants]</span><br><span class="line">S4_price = [s.price <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan4.commercial_tenants]</span><br><span class="line"><span class="comment">#定义了每个物流园商户对应的地点和价格字典</span></span><br><span class="line">S_P1 = <span class="built_in">dict</span>(<span class="built_in">zip</span>(S1_site,S1_price))</span><br><span class="line">S_P2 = <span class="built_in">dict</span>(<span class="built_in">zip</span>(S2_site,S2_price))</span><br><span class="line">S_P3 = <span class="built_in">dict</span>(<span class="built_in">zip</span>(S3_site,S3_price))</span><br><span class="line">S_P4 = <span class="built_in">dict</span>(<span class="built_in">zip</span>(S4_site,S4_price))</span><br><span class="line"><span class="comment">#定义总地点列表</span></span><br><span class="line">S_site = [S1_site,S2_site,S3_site,S4_site]</span><br><span class="line"><span class="comment">#定义总地点价格对应列表</span></span><br><span class="line">S_P = [S_P1,S_P2,S_P3,S_P4]</span><br><span class="line"><span class="keyword">for</span> s , m <span class="keyword">in</span> <span class="built_in">zip</span>(S_site,S_P):</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">set</span>(s) &amp; <span class="built_in">set</span>(V) != []:</span><br><span class="line"></span><br><span class="line">        intersection = <span class="built_in">list</span>(<span class="built_in">set</span>(s) &amp; <span class="built_in">set</span>(V))</span><br><span class="line"></span><br><span class="line">        <span class="keyword">for</span> i <span class="keyword">in</span> intersection:</span><br><span class="line"></span><br><span class="line">            <span class="keyword">if</span> i == <span class="string">&#x27;nanyang&#x27;</span>:</span><br><span class="line"></span><br><span class="line">                row = <span class="number">0</span></span><br><span class="line"></span><br><span class="line">                col = S_site.index(s)</span><br><span class="line">                </span><br><span class="line">                value = m[i]</span><br><span class="line"></span><br><span class="line">                table[row][col] = value</span><br><span class="line"></span><br><span class="line">            <span class="keyword">elif</span> i == <span class="string">&#x27;changsha&#x27;</span>:</span><br><span class="line"></span><br><span class="line">                row = <span class="number">1</span></span><br><span class="line"></span><br><span class="line">                col = S_site.index(s)</span><br><span class="line"></span><br><span class="line">                value = m[i]</span><br><span class="line"></span><br><span class="line">                table[row][col] = value</span><br><span class="line"></span><br><span class="line">            <span class="keyword">elif</span> i == <span class="string">&#x27;chengdu&#x27;</span>:</span><br><span class="line"></span><br><span class="line">                row = <span class="number">2</span></span><br><span class="line"></span><br><span class="line">                col =  S_site.index(s)</span><br><span class="line"></span><br><span class="line">                value = m[i]</span><br><span class="line"></span><br><span class="line">                table[row][col] = value</span><br><span class="line">            </span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                <span class="keyword">pass</span></span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line"></span><br><span class="line">        <span class="keyword">pass</span></span><br><span class="line"><span class="built_in">print</span>(table)</span><br></pre></td></tr></table></figure><h2 id="缺陷"><a href="#缺陷" class="headerlink" title="缺陷"></a>缺陷</h2><ul>   <li>数据结构简单，为列表，导致逻辑过于繁杂</li>   <li>代码死板，无法实现自动化</li></ul><p>根据老师建议，做出如下调整：</p><ul>   <li>数据结构替换为DataFrame</li>   <li>重构代码，实现自动化</li></ul><h3 id="Models-1"><a href="#Models-1" class="headerlink" title="Models"></a>Models</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="comment">#初始化货物类</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Goods</span>:</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self,destination,deadline,weight,volume</span>):</span><br><span class="line">        <span class="comment">#定义了该批货品的目的地</span></span><br><span class="line">        self.destination = destination</span><br><span class="line">        <span class="comment">#定义了货品的发货截止日期</span></span><br><span class="line">        self.deadline = deadline</span><br><span class="line">        <span class="comment">#定义了货品的重量</span></span><br><span class="line">        self.weight = weight</span><br><span class="line">        <span class="comment">#定义了货品的体积</span></span><br><span class="line">        self.volume = volume</span><br><span class="line"></span><br><span class="line"><span class="comment">#初始化物流园类</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Logistics</span>:</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self,name,Latitude_and_longitude,rates</span>):</span><br><span class="line">        <span class="comment">#定义了物流园的名称</span></span><br><span class="line">        self.name = name</span><br><span class="line">        <span class="comment">#定义了经纬度</span></span><br><span class="line">        self.Latitude_and_longitude = Latitude_and_longitude</span><br><span class="line">        <span class="comment">#定义了物流园中的商户（多个，类型为列表）</span></span><br><span class="line">        self.commercial_tenants = []</span><br><span class="line">        <span class="comment">#定义了物流园的进场费</span></span><br><span class="line">        self.rates = rates</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">add_commercial_tenant</span>(<span class="params">self,commercial_tenant</span>):</span><br><span class="line">        <span class="comment">#定义添加物流园专线的方法</span></span><br><span class="line">        self.commercial_tenants.append(commercial_tenant)</span><br><span class="line"></span><br><span class="line"><span class="comment">#初始化物流园专线</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Commercial_tenant</span>:</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">__init__</span>(<span class="params">self,site,price,time_consuming,interval</span>):</span><br><span class="line">        <span class="comment">#定义了物流园的目的地</span></span><br><span class="line">        self.site = site</span><br><span class="line">        <span class="comment">#定义了发货单价</span></span><br><span class="line">        self.price = price</span><br><span class="line">        <span class="comment">#定义了发货耗时</span></span><br><span class="line">        self.time_consuming = time_consuming</span><br><span class="line">        <span class="comment">#定义了发货间隔</span></span><br><span class="line">        self.interval = interval</span><br><span class="line"></span><br><span class="line"><span class="comment">#创建两个物流商户实例</span></span><br><span class="line">chengdu_site1 = Commercial_tenant(<span class="string">&#x27;chengdu&#x27;</span>,<span class="number">15</span>,<span class="number">4</span>,<span class="number">3</span>)</span><br><span class="line">changsha_site1 = Commercial_tenant(<span class="string">&#x27;changsha&#x27;</span>,<span class="number">12</span>,<span class="number">4</span>,<span class="number">2</span>)</span><br><span class="line">wuhan_site1 = Commercial_tenant(<span class="string">&#x27;wuhan&#x27;</span>,<span class="number">8</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line">nanchang_site1 = Commercial_tenant(<span class="string">&#x27;nanchang&#x27;</span>,<span class="number">15</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line"></span><br><span class="line">chengdu_site2 = Commercial_tenant(<span class="string">&#x27;chengdu&#x27;</span>,<span class="number">7</span>,<span class="number">4</span>,<span class="number">3</span>)</span><br><span class="line">changsha_site2 = Commercial_tenant(<span class="string">&#x27;changsha&#x27;</span>,<span class="number">16</span>,<span class="number">4</span>,<span class="number">2</span>)</span><br><span class="line">luoyang_site2 = Commercial_tenant(<span class="string">&#x27;luoyang&#x27;</span>,<span class="number">8</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line">zhenzhou_site2 = Commercial_tenant(<span class="string">&#x27;zhenzhou&#x27;</span>,<span class="number">15</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line"></span><br><span class="line">chengdu_site3 = Commercial_tenant(<span class="string">&#x27;chengdu&#x27;</span>,<span class="number">41</span>,<span class="number">4</span>,<span class="number">3</span>)</span><br><span class="line">changsha_site3 = Commercial_tenant(<span class="string">&#x27;changsha&#x27;</span>,<span class="number">17</span>,<span class="number">4</span>,<span class="number">2</span>)</span><br><span class="line">nanyang_site3 = Commercial_tenant(<span class="string">&#x27;nanyang&#x27;</span>,<span class="number">8</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line">hefei_site4 = Commercial_tenant(<span class="string">&#x27;heifei&#x27;</span>,<span class="number">15</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line"></span><br><span class="line">chengdu_site4 = Commercial_tenant(<span class="string">&#x27;chengdu&#x27;</span>,<span class="number">21</span>,<span class="number">4</span>,<span class="number">3</span>)</span><br><span class="line">changsha_site4 = Commercial_tenant(<span class="string">&#x27;changsha&#x27;</span>,<span class="number">13</span>,<span class="number">4</span>,<span class="number">2</span>)</span><br><span class="line">beijin_site4 = Commercial_tenant(<span class="string">&#x27;beijin&#x27;</span>,<span class="number">8</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line">nancahng_site4 = Commercial_tenant(<span class="string">&#x27;nanchang&#x27;</span>,<span class="number">15</span>,<span class="number">3</span>,<span class="number">2</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">#创建一个物流园实例</span></span><br><span class="line">wuliuyuan1 = Logistics(<span class="number">1</span>,<span class="string">&#x27;13.173;31.321&#x27;</span>,<span class="number">15</span>)</span><br><span class="line">wuliuyuan2 = Logistics(<span class="number">2</span>,<span class="string">&#x27;12.125;35.321&#x27;</span>,<span class="number">10</span>)</span><br><span class="line">wuliuyuan3 = Logistics(<span class="number">3</span>,<span class="string">&#x27;13.553;34,321&#x27;</span>,<span class="number">15</span>)</span><br><span class="line">wuliuyuan4 = Logistics(<span class="number">4</span>,<span class="string">&#x27;12.123;34.111&#x27;</span>,<span class="number">10</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">#将物流园专线添加至实例中</span></span><br><span class="line">wuliuyuan1.add_commercial_tenant(chengdu_site1)</span><br><span class="line">wuliuyuan1.add_commercial_tenant(changsha_site1)</span><br><span class="line">wuliuyuan1.add_commercial_tenant(wuhan_site1)</span><br><span class="line">wuliuyuan1.add_commercial_tenant(nanchang_site1)</span><br><span class="line"></span><br><span class="line">wuliuyuan2.add_commercial_tenant(chengdu_site2)</span><br><span class="line">wuliuyuan2.add_commercial_tenant(changsha_site2)</span><br><span class="line">wuliuyuan2.add_commercial_tenant(luoyang_site2)</span><br><span class="line">wuliuyuan2.add_commercial_tenant(zhenzhou_site2)</span><br><span class="line"></span><br><span class="line">wuliuyuan3.add_commercial_tenant(chengdu_site3)</span><br><span class="line">wuliuyuan3.add_commercial_tenant(changsha_site3)</span><br><span class="line">wuliuyuan3.add_commercial_tenant(nanyang_site3)</span><br><span class="line">wuliuyuan3.add_commercial_tenant(hefei_site4)</span><br><span class="line"></span><br><span class="line">wuliuyuan4.add_commercial_tenant(chengdu_site4)</span><br><span class="line">wuliuyuan4.add_commercial_tenant(changsha_site4)</span><br><span class="line">wuliuyuan4.add_commercial_tenant(beijin_site4)</span><br><span class="line">wuliuyuan4.add_commercial_tenant(nancahng_site4)</span><br></pre></td></tr></table></figure><h3 id="Sizer2"><a href="#Sizer2" class="headerlink" title="Sizer2"></a>Sizer2</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">from</span> Models <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">import</span> math</span><br><span class="line"><span class="keyword">import</span> pandas <span class="keyword">as</span> pd</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">create_df</span>():</span><br><span class="line"></span><br><span class="line">    table = [[math.inf <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">4</span>)] <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="built_in">len</span>(destination))]</span><br><span class="line"></span><br><span class="line">    df = pd.DataFrame(table,columns=[<span class="string">&#x27;P1&#x27;</span>,<span class="string">&#x27;P2&#x27;</span>,<span class="string">&#x27;P3&#x27;</span>,<span class="string">&#x27;P4&#x27;</span>],index=destination)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> df</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&quot;__main__&quot;</span>:</span><br><span class="line"></span><br><span class="line">    <span class="comment">#添加货物实例destination,deadline,weight,volume</span></span><br><span class="line">    destination = <span class="built_in">input</span>(<span class="built_in">str</span>(<span class="string">&#x27;请输入您此次货物的目的地，用英文,分隔：&#x27;</span><span class="string">&#x27;请输入您此次货物的目的地，用英文,分隔：&#x27;</span>)).split(<span class="string">&#x27;,&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    deadline = <span class="built_in">input</span>(<span class="built_in">str</span>(<span class="string">&#x27;请输入对应货物的截止日期，格式形如：2023/3/21，用英文,分隔：&#x27;</span>)).split(<span class="string">&#x27;,&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    weight = <span class="built_in">input</span>(<span class="built_in">str</span>(<span class="string">&#x27;请输入货物对应的重量，单位kg，以英文,分隔：&#x27;</span>)).split(<span class="string">&#x27;,&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    volume = <span class="built_in">input</span>(<span class="built_in">str</span>(<span class="string">&#x27;请输入货物的体积，单位m³，以英文,分隔：&#x27;</span>)).split(<span class="string">&#x27;,&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="comment">#循环创建动态对象</span></span><br><span class="line">    <span class="keyword">for</span> a , b , c , d , goods_name <span class="keyword">in</span> <span class="built_in">zip</span>(destination,deadline,weight,volume,destination):</span><br><span class="line"></span><br><span class="line">        <span class="built_in">locals</span>()[goods_name] = Goods(a,b,c,d)</span><br><span class="line"></span><br><span class="line">    df = create_df()</span><br><span class="line"></span><br><span class="line">    <span class="comment">#每个物流园商户具有的地点列表</span></span><br><span class="line">    S1_site = [s.site <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan1.commercial_tenants]</span><br><span class="line">    S2_site = [s.site <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan2.commercial_tenants]</span><br><span class="line">    S3_site = [s.site <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan3.commercial_tenants]</span><br><span class="line">    S4_site = [s.site <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan4.commercial_tenants]</span><br><span class="line">    <span class="comment">#定义每个物流园商户具有的价格列表</span></span><br><span class="line">    S1_price = [s.price <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan1.commercial_tenants]</span><br><span class="line">    S2_price = [s.price <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan2.commercial_tenants]</span><br><span class="line">    S3_price = [s.price <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan3.commercial_tenants]</span><br><span class="line">    S4_price = [s.price <span class="keyword">for</span> s <span class="keyword">in</span> wuliuyuan4.commercial_tenants]</span><br><span class="line">    <span class="comment">#定义了每个物流园商户对应的地点和价格字典</span></span><br><span class="line">    S_P1 = <span class="built_in">dict</span>(<span class="built_in">zip</span>(S1_site,S1_price))</span><br><span class="line">    S_P2 = <span class="built_in">dict</span>(<span class="built_in">zip</span>(S2_site,S2_price))</span><br><span class="line">    S_P3 = <span class="built_in">dict</span>(<span class="built_in">zip</span>(S3_site,S3_price))</span><br><span class="line">    S_P4 = <span class="built_in">dict</span>(<span class="built_in">zip</span>(S4_site,S4_price))</span><br><span class="line">    <span class="comment">#定义总地点列表</span></span><br><span class="line">    S_site = [S1_site,S2_site,S3_site,S4_site]</span><br><span class="line">    <span class="comment">#定义总地点价格对应列表</span></span><br><span class="line">    S_P = [S_P1,S_P2,S_P3,S_P4]</span><br><span class="line">    <span class="keyword">for</span> s <span class="keyword">in</span> S_site:</span><br><span class="line"></span><br><span class="line">        intersection = <span class="built_in">list</span>(<span class="built_in">set</span>(s) &amp; <span class="built_in">set</span>(destination))</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span> intersection != []:</span><br><span class="line"></span><br><span class="line">            <span class="keyword">for</span> p , num <span class="keyword">in</span> <span class="built_in">zip</span>([<span class="string">&#x27;P1&#x27;</span>,<span class="string">&#x27;P2&#x27;</span>,<span class="string">&#x27;P3&#x27;</span>,<span class="string">&#x27;P4&#x27;</span>],S_P):</span><br><span class="line"></span><br><span class="line">                <span class="keyword">for</span> i <span class="keyword">in</span> intersection:</span><br><span class="line"></span><br><span class="line">                    df[p][i] = num.get(i)</span><br><span class="line"></span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line"></span><br><span class="line">            <span class="keyword">pass</span></span><br><span class="line">    <span class="built_in">print</span>(df)</span><br><span class="line"></span><br><span class="line">        </span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前言：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;</summary>
      
    
    
    
    <category term="python" scheme="http://www.messi.ltd/categories/python/"/>
    
    
    <category term="慧发发" scheme="http://www.messi.ltd/tags/%E6%85%A7%E5%8F%91%E5%8F%91/"/>
    
    <category term="python" scheme="http://www.messi.ltd/tags/python/"/>
    
    <category term="pandas" scheme="http://www.messi.ltd/tags/pandas/"/>
    
  </entry>
  
  <entry>
    <title>MySQL逐步安装及基础指令(正在持续更新)</title>
    <link href="http://www.messi.ltd/posts/c9a9b63e.html"/>
    <id>http://www.messi.ltd/posts/c9a9b63e.html</id>
    <published>2023-01-22T11:16:39.000Z</published>
    <updated>2023-03-09T11:19:20.559Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言:</strong></p>因为博主最近开始了简单的基于Flask框架的网站搭建学习，因为涉及的知识点比较多，mysql是其中用到的数据库技术，因此，这篇博文是用来记录安装及配置mysql的，也会记录一些基础语句。</blockquote><p>#安装Mysql<br>##下载安装包</p><p>我在这里提供一下下载安装包的<a href="https://downloads.mysql.com/archives/community">下载网址</a>，大家可以直接进入选择合适自己的版本安装。（目前最新的版本已经达到了8.x，但是我下载的是5.7.31，这是一个兼容性较高的版本，因此接下来都是基于此版本的过程哦</p><img src="https://pic3.zhimg.com/80/v2-842c6a65316f3af8b3c48f68b7b0127e_1440w.webp">##解压压缩包<p>我们下载好安装包好，将其解压在一个我们可以记住的路径<mark class="hl-label red">（路径中不要包含中文）</mark> 内，博主自己就是解压在D盘目录下的Mysql文件夹中。<h1 id="配置Mysql"><a href="#配置Mysql" class="headerlink" title="配置Mysql"></a>配置Mysql</h1><h2 id="初始化你的Mysql"><a href="#初始化你的Mysql" class="headerlink" title="初始化你的Mysql"></a>初始化你的Mysql</h2><h3 id="添加配置文件"><a href="#添加配置文件" class="headerlink" title="添加配置文件"></a>添加配置文件</h3><p>在你的解压目录中，新建一个名为my.txt的文本文件，将以下配置<mark class="hl-label red">（#内容不要复制）</mark> 加入该文件中：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">[mysqld]</span><br><span class="line"></span><br><span class="line">#设置本地端口号</span><br><span class="line">port=3306</span><br><span class="line"></span><br><span class="line">#你解压之后的文件路径</span><br><span class="line">basedir=D:\\mysql\\mysql-5.7.31-winx64</span><br><span class="line"></span><br><span class="line">#你将来用于存放数据的文件夹路径</span><br><span class="line">datadir=D:\\mysql\\mysql-5.7.31-winx64\\data</span><br></pre></td></tr></table></figure><div class="note danger modern"><p>填充好了之后，将你的配置文件改为<mark class="hl-label red">my.ini</mark> </p></div><h3 id="终端执行初始化"><a href="#终端执行初始化" class="headerlink" title="终端执行初始化"></a>终端执行初始化</h3><p>在你的目录中找到bin文件夹，其中有一个名为mysqld.exe的文件，复制它的路径。接下来，以管理员方式打开你的cmd，在终端中输入以下命令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;你刚刚复制的路径，去掉引号&gt; --initialize-insecure</span><br></pre></td></tr></table></figure><p>终端执行完命令之后不会有反应，这时候我们打开目录观察：</p><img src="https://pic4.zhimg.com/80/v2-0e2b9d55f460fed2f9ee8e1996fe0f0f_1440w.webp"><p>我们发现目录下多了一个data文件夹，就说明我们初始化完成啦！</p><h2 id="制作windows服务，以便开启关闭"><a href="#制作windows服务，以便开启关闭" class="headerlink" title="制作windows服务，以便开启关闭"></a>制作windows服务，以便开启关闭</h2><h3 id="制作服务"><a href="#制作服务" class="headerlink" title="制作服务"></a>制作服务</h3><p>以管理员身份打开cmd，执行以下命令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;你刚刚复制的路径，去掉引号&gt; --install mysql57</span><br></pre></td></tr></table></figure><h3 id="启动、关闭服务"><a href="#启动、关闭服务" class="headerlink" title="启动、关闭服务"></a>启动、关闭服务</h3><p>以下分别为开启服务与关闭服务的指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">net</span> <span class="built_in">start</span> mysql57</span><br><span class="line"></span><br><span class="line"><span class="built_in">net</span> stop mysql57</span><br></pre></td></tr></table></figure><h1 id="链接Mysql"><a href="#链接Mysql" class="headerlink" title="链接Mysql"></a>链接Mysql</h1><h2 id="用Mysql自带工具链接"><a href="#用Mysql自带工具链接" class="headerlink" title="用Mysql自带工具链接"></a>用Mysql自带工具链接</h2><p>在bin目录下找到mysql.exe<mark class="hl-label red">（不是之前的mysqld.exe）</mark> ，复制其路径，确保服务已启动的状态下，在cmd中输入以下指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&lt;你刚刚复制的路径&gt; -u root -p</span><br></pre></td></tr></table></figure><p>这时会要求你输入密码，我们默认是没有的，我们直接回车就行：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">Welcome to the MySQL monitor.  Commands end with ; or \g.</span><br><span class="line">Your MySQL connection id is <span class="number">4</span></span><br><span class="line">Server version: <span class="number">5</span>.<span class="number">7</span>.<span class="number">31</span> MySQL Community Server (GPL)</span><br><span class="line"></span><br><span class="line">Copyright (c) <span class="number">2000</span>, <span class="number">2020</span>, Oracle and/or its affiliates. All rights reserved.</span><br><span class="line"></span><br><span class="line">Oracle is a registered trademark of Oracle Corporation and/or its</span><br><span class="line">affiliates. Other names may be trademarks of their respective</span><br><span class="line">owners.</span><br><span class="line"></span><br><span class="line"><span class="built_in">Type</span> &#x27;<span class="built_in">help</span>;&#x27; or &#x27;\h&#x27; <span class="keyword">for</span> <span class="built_in">help</span>. <span class="built_in">Type</span> &#x27;\c&#x27; to clear the current input statement.</span><br><span class="line"></span><br><span class="line">mysql&gt;</span><br></pre></td></tr></table></figure><p>这时候就代表我们链接成功啦！</p><h3 id="设置环境变量"><a href="#设置环境变量" class="headerlink" title="设置环境变量"></a>设置环境变量</h3><p>我们会发现，每次链接如果都要输入这个奇长无比的文件路径太过麻烦，那我们可以以将xxxxx\bin\这一串设为环境变量，在系统变量中找到Path</p><img src="https://pic2.zhimg.com/80/v2-83fb3d20625e2e9baa5f661bfc5cd509_1440w.webp"><p>在里面新建如下变量：</p><img src="https://pic1.zhimg.com/80/v2-cb9840b9e5be6b4e05f5473ee86a6484_1440w.webp"><p>设置完成后，我们以后链接指令就简化为：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mysql -u root -p</span><br></pre></td></tr></table></figure><h1 id="一些基础指令-不同版本语法可能有变"><a href="#一些基础指令-不同版本语法可能有变" class="headerlink" title="一些基础指令(不同版本语法可能有变)"></a>一些基础指令(不同版本语法可能有变)</h1><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"><span class="keyword">exit</span>; #退出链接</span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> password = password(&quot;xxxxxx&quot;) #设置密码</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前言:&lt;/strong&gt;&lt;/p&gt;因为博主</summary>
      
    
    
    
    <category term="sql" scheme="http://www.messi.ltd/categories/sql/"/>
    
    
    <category term="sql" scheme="http://www.messi.ltd/tags/sql/"/>
    
  </entry>
  
  <entry>
    <title>在Vscode中使用Sql server</title>
    <link href="http://www.messi.ltd/posts/4b4f0ed4.html"/>
    <id>http://www.messi.ltd/posts/4b4f0ed4.html</id>
    <published>2022-12-12T09:55:21.000Z</published>
    <updated>2023-01-22T11:17:56.386Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言:</strong></p>因为个人的原因，需要提前学习sql数据库技术，所以就开个分类，专门记录我的sql学习记录啦(*^▽^*)</blockquote><h1 id="这么做的原因"><a href="#这么做的原因" class="headerlink" title="这么做的原因"></a>这么做的原因</h1><div class="note primary modern"><p>我下载的是2019版的Sql server，具体的安装过程就不赘述了，点击<a href="https://blog.csdn.net/weixin_43790591/article/details/104149800">这里</a>，按照这位博主的步骤装就可以啦。</p></div><div class="note default simple"><p>写这篇文章的原因在于，在上面的下载过程后，我们默认使用的客户端是：Microsoft SQL Server Management Studio 我的使用体验是操作繁琐，页面简陋（如下图），最要命的是没有代码补全功能！！！这对我这种懒人是最不可接受的！！（doge。</p></div><img src="https://www.quackit.com/pix/sql_server/sql_server_2016/tutorial/sql_server_management_studio_7.png"><div class="note default simple"><p>于是在一番搜索之后，我发现了vscode中也可以完成sql的编写，吹爆vscode！！下面就是如何在vscode中进行sql的编写记录。</p></div><h1 id="设置数据库"><a href="#设置数据库" class="headerlink" title="设置数据库"></a>设置数据库</h1><p>打开Microsoft SQL Server Management Studio，在登录页面记住一下这个<mark class="hl-label red">服务器名</mark> ：</p><img src="https://pic2.zhimg.com/80/v2-2bae523fdcecb25e5768c7eacc734b69_1440w.webp"><p>找到安全性，找到用户名<mark class="hl-label red">sa</mark> ，右击属性：</p><img src="https://pic4.zhimg.com/80/v2-74d1047fd617129301e1c6b77fa01a1f_1440w.webp"><p>取消<mark class="hl-label red">强制实施密码策略</mark> ，并且设置好自己的密码。<img src="https://pic2.zhimg.com/80/v2-5cf05ae35138dfd3da064ca81b96f1bd_1440w.webp"><h1 id="下载插件"><a href="#下载插件" class="headerlink" title="下载插件"></a>下载插件</h1><p>在Vscode中搜索以下插件：<strong><em>SQL Server(mssql)</strong></em></p><img src="https://img-blog.csdnimg.cn/20200627114119330.png"><h1 id="连接本地数据库"><a href="#连接本地数据库" class="headerlink" title="连接本地数据库"></a>连接本地数据库</h1><p>这时，新建一个<strong><em>.sql</strong></em></p>文件，新建完成之后，右上角就会出现一个绿色的执行按钮：</p><img src="https://pic4.zhimg.com/80/v2-c9606335ebbf8e5bf3e9074ddf7b617f_1440w.webp"><p>点击它，选择新建，就是我用箭头标出来的那个：</p><img src="https://pic1.zhimg.com/80/v2-5d99b87d053497d01b982a2119859b50_1440w.webp"><p>输入你刚刚记下的<mark class="hl-label red">服务器名</mark> ,回车</p><img src="https://pic2.zhimg.com/80/v2-4aabf628eff0fa6c53fbe9762f229829_1440w.webp"><p>输入你想要新建查询的库的名字，回车</p><img src="https://pic3.zhimg.com/80/v2-c9c57ff6fe15b42d9aa82edc6ca825c2_1440w.webp"><p>选择登陆，回车</p><img src="https://pic4.zhimg.com/80/v2-d525be34edd02b7f2d0c3520a476c3af_1440w.webp"><p>输入<mark class="hl-label red">sa</mark> ，回车</p><img src="https://pic2.zhimg.com/80/v2-b1c97c48c924dd9cdec1e0b4504c0cd9_1440w.webp"><p>输入密码，回车</p><img src="https://pic1.zhimg.com/80/v2-43daeaf77377dde3a5fefe5d747ef9f0_1440w.webp"><p>继续回车，默认记住密码</p><img src="https://pic2.zhimg.com/80/v2-31678731c17229605b3ae419851b1505_1440w.webp"><div class="note success modern"><p>到这里，就已经大功告成啦！这个新建的文件就相当于你新建的查询，可以开始编写你的sql语句了！</p></div>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前言:&lt;/strong&gt;&lt;/p&gt;因为个人</summary>
      
    
    
    
    <category term="sql" scheme="http://www.messi.ltd/categories/sql/"/>
    
    
    <category term="sql" scheme="http://www.messi.ltd/tags/sql/"/>
    
  </entry>
  
  <entry>
    <title>爬虫-requests爬取b站弹幕并绘制词云图（保姆级）</title>
    <link href="http://www.messi.ltd/posts/77ed9928.html"/>
    <id>http://www.messi.ltd/posts/77ed9928.html</id>
    <published>2022-12-02T03:24:02.000Z</published>
    <updated>2022-12-02T04:33:58.282Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言：</strong></p><p>这是一份数据采集的个人作业，是关于爬取b站弹幕并绘制词云图。称为保姆级是因为这份代码已经竭尽所能的让人容易理解啦(*^▽^*)</p></blockquote><h1 id="爬取对象"><a href="#爬取对象" class="headerlink" title="爬取对象"></a>爬取对象</h1><p>本次爬取对象是-《梅西-改变世界二十大进球》中的弹幕信息。</p><div class="note info modern"><p>首先，我们需要知道一个知识：对于B站弹幕而言，弹幕所在位置是有固定格式的：<br><mark class="hl-label purple"><em><strong><a href="http://comment.bilibili.com/+cid+.xml">http://comment.bilibili.com/+cid+.xml</a></strong></em></mark><br>所以我们当务之急，是要获取我们想要爬取视频的弹幕的<em><strong>cid</strong></em>。</p></div><h1 id="如何获取cid？"><a href="#如何获取cid？" class="headerlink" title="如何获取cid？"></a>如何获取cid？</h1><img src="https://pic4.zhimg.com/80/v2-c593e29babbe89db6f96b2a2bc4c1377_1440w.webp"><p>如上图所示，我们首先打开我们想要爬取的那个视频页面，右击<em><strong>审查</strong></em>，选择<em><strong>网络</strong></em>。这时，里面应该是空的，所以我们此时<em><strong>刷新</strong></em>页面，就会显示出来啦！。接着在搜索框中搜索<em><strong>cid</strong></em>，接着，在响应的文件中找到<em><strong>负载</strong></em>，你应该就可以找到<em><strong>cid</strong></em>啦！</p><h1 id="代码展示"><a href="#代码展示" class="headerlink" title="代码展示"></a>代码展示</h1><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"><span class="keyword">from</span> bs4 <span class="keyword">import</span> BeautifulSoup </span><br><span class="line"><span class="keyword">import</span> pandas <span class="keyword">as</span> pd</span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"><span class="keyword">from</span> wordcloud <span class="keyword">import</span> WordCloud</span><br><span class="line"><span class="keyword">from</span> PIL <span class="keyword">import</span> Image</span><br><span class="line"><span class="keyword">import</span> jieba</span><br><span class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt</span><br><span class="line"><span class="keyword">import</span> re</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">#获取响应信息</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">get_contents</span>(<span class="params">cid</span>):</span><br><span class="line"><span class="comment">#用于伪装的请求头</span></span><br><span class="line">  header = &#123;</span><br><span class="line">     <span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.56&#x27;</span>&#125;</span><br><span class="line"><span class="comment">#弹幕url凭借</span></span><br><span class="line">  url = <span class="string">&quot;https://comment.bilibili.com/&quot;</span>+<span class="built_in">str</span>(cid)+<span class="string">&quot;.xml&quot;</span></span><br><span class="line"><span class="comment">#发送请求</span></span><br><span class="line">  req = requests.get(url=url,headers=header)</span><br><span class="line"><span class="comment">#获取内容响应的内容</span></span><br><span class="line">  html_byte = req.content</span><br><span class="line"><span class="comment">#将byte转为str</span></span><br><span class="line">  html_str = <span class="built_in">str</span>(html_byte,<span class="string">&quot;utf-8&quot;</span>)</span><br><span class="line"><span class="comment">#解析</span></span><br><span class="line">  soup = BeautifulSoup(html_str,<span class="string">&#x27;html.parser&#x27;</span>)</span><br><span class="line"><span class="comment">#找到html文件里的&lt;d&gt;标签</span></span><br><span class="line">  results = soup.find_all(<span class="string">&#x27;d&#x27;</span>)</span><br><span class="line"><span class="comment">#提取标签中的文本</span></span><br><span class="line">  contents = [x.text <span class="keyword">for</span> x <span class="keyword">in</span> results]</span><br><span class="line"></span><br><span class="line">  <span class="keyword">return</span> contents</span><br><span class="line"></span><br><span class="line"><span class="comment">#创建一个xlsx文件</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">creat_xlsx</span>(<span class="params">xlsx_filename</span>):</span><br><span class="line"></span><br><span class="line">    file_xlsx = <span class="built_in">open</span>(<span class="built_in">str</span>(xlsx_filename) + <span class="string">&#x27;.xlsx&#x27;</span>,<span class="string">&#x27;w&#x27;</span>)</span><br><span class="line">    </span><br><span class="line">    file_xlsx.close()</span><br><span class="line"></span><br><span class="line"><span class="comment">#创建一个文本文件</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">creat_txt</span>(<span class="params">txt_filename</span>):</span><br><span class="line">   </span><br><span class="line">    file_txt = <span class="built_in">open</span>(<span class="built_in">str</span>(txt_filename) + <span class="string">&#x27;.txt&#x27;</span>,<span class="string">&#x27;w&#x27;</span>)</span><br><span class="line">    </span><br><span class="line">    file_txt.close()</span><br><span class="line"></span><br><span class="line"><span class="comment">#写入excel表格</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">download_excel</span>(<span class="params">contents,xlsx_filename</span>):</span><br><span class="line">  <span class="comment">#构建字典</span></span><br><span class="line">  dic =&#123;<span class="string">&quot;contents&quot;</span> : contents&#125;</span><br><span class="line"></span><br><span class="line">  df = pd.DataFrame(dic)</span><br><span class="line">  <span class="comment">#写入数据</span></span><br><span class="line">  df[<span class="string">&quot;contents&quot;</span>].to_excel(<span class="built_in">str</span>(xlsx_filename)+<span class="string">&quot;.xlsx&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment">#将弹幕内容写入文本文件并且读取</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">download_open_txt</span>(<span class="params">contents,txt_filename</span>):</span><br><span class="line">    <span class="comment">#使用with open()新建对象f</span></span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(<span class="built_in">str</span>(txt_filename)+<span class="string">&quot;.txt&quot;</span>, <span class="string">&#x27;w&#x27;</span>, encoding=<span class="string">&#x27;utf-8&#x27;</span>) <span class="keyword">as</span> f: </span><br><span class="line">    <span class="comment"># 将列表中的数据循环写入到文本文件中</span></span><br><span class="line">      <span class="keyword">for</span> i <span class="keyword">in</span> contents:</span><br><span class="line">          <span class="comment">#写入数据</span></span><br><span class="line">          f.write(i+<span class="string">&quot;\n&quot;</span>) </span><br><span class="line">    <span class="comment">#读取写入的文本文件</span></span><br><span class="line">    <span class="keyword">with</span> <span class="built_in">open</span>(<span class="built_in">str</span>(txt_filename)+<span class="string">&quot;.txt&quot;</span>,encoding=<span class="string">&quot;utf-8&quot;</span>) <span class="keyword">as</span> f:</span><br><span class="line">      </span><br><span class="line">      s = f.read()</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> s</span><br><span class="line"><span class="comment">#清洗文字</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">washword</span>(<span class="params">s</span>):</span><br><span class="line"></span><br><span class="line">    <span class="comment">#中文分词</span></span><br><span class="line">    text = <span class="string">&#x27; &#x27;</span>.join(jieba.cut(s))</span><br><span class="line">    </span><br><span class="line">    <span class="comment">#清洗弹幕，只要字符串中的中文</span></span><br><span class="line">    data = re.findall(<span class="string">&#x27;[\u4e00-\u9fa5]+&#x27;</span>, text)  </span><br><span class="line">    </span><br><span class="line">    text1 = <span class="string">&#x27; &#x27;</span>.join(data)</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> text1</span><br><span class="line"></span><br><span class="line"><span class="comment">#生成词云</span></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">wordcloud</span>(<span class="params">text1,img_filename,img_format</span>):</span><br><span class="line">    <span class="comment">#生成对象</span></span><br><span class="line">    <span class="comment">#将图片转换为数组</span></span><br><span class="line">    mask_imag=np.array(Image.<span class="built_in">open</span>(<span class="built_in">str</span>(img_filename)+<span class="built_in">str</span>(img_format)))</span><br><span class="line">    <span class="comment">#装载停用词</span></span><br><span class="line">    stopwords = [<span class="string">&quot;我&quot;</span>,<span class="string">&quot;你&quot;</span>,<span class="string">&quot;她&quot;</span>,<span class="string">&quot;的&quot;</span>,<span class="string">&quot;是&quot;</span>,<span class="string">&quot;了&quot;</span>,<span class="string">&quot;在&quot;</span>,<span class="string">&quot;也&quot;</span>,<span class="string">&quot;和&quot;</span>,<span class="string">&quot;就&quot;</span>,<span class="string">&quot;都&quot;</span>,<span class="string">&quot;这&quot;</span>,<span class="string">&quot;啊&quot;</span>,<span class="string">&quot;真的&quot;</span>,<span class="string">&quot;不&quot;</span>,<span class="string">&quot;看球&quot;</span>]</span><br><span class="line">    wc = WordCloud(font_path=<span class="string">&quot;msyh.ttc&quot;</span>,</span><br><span class="line">                 mask=mask_imag,</span><br><span class="line">                 width = <span class="number">1000</span>,</span><br><span class="line">                 height = <span class="number">700</span>,</span><br><span class="line">                 background_color=<span class="string">&#x27;white&#x27;</span>, <span class="comment">#设置底色</span></span><br><span class="line">                 max_words=<span class="number">200</span>,</span><br><span class="line">                 stopwords=stopwords).generate(text1)</span><br><span class="line">    <span class="keyword">return</span> wc</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&#x27;__main__&#x27;</span>:</span><br><span class="line"></span><br><span class="line">    cid = <span class="built_in">int</span>(<span class="built_in">input</span>(<span class="string">&quot;请输入你想要爬取的cid号:&quot;</span>))</span><br><span class="line">    </span><br><span class="line">    xlsx_filename = <span class="built_in">str</span>(<span class="built_in">input</span>(<span class="string">&quot;请输入你想写入的表格名（例如：作业）:&quot;</span>))</span><br><span class="line"></span><br><span class="line">    txt_filename = <span class="built_in">str</span>(<span class="built_in">input</span>(<span class="string">&quot;请输入你想要写入的文本文件名（例如：作业）:&quot;</span>))</span><br><span class="line"></span><br><span class="line">    img_filename = <span class="built_in">str</span>(<span class="built_in">input</span>(<span class="string">&quot;请输入你的图片名称（例如：底图）:&quot;</span>))</span><br><span class="line"></span><br><span class="line">    img_format = <span class="built_in">str</span>(<span class="built_in">input</span>(<span class="string">&quot;请输入你的图片格式（例如.jpg）:&quot;</span>))</span><br><span class="line">    </span><br><span class="line">    creat_xlsx(xlsx_filename)</span><br><span class="line"></span><br><span class="line">    creat_txt(txt_filename)</span><br><span class="line"></span><br><span class="line">    contents = get_contents(cid)</span><br><span class="line"></span><br><span class="line">    download_excel(contents,xlsx_filename)</span><br><span class="line">    </span><br><span class="line">    s = download_open_txt(contents,txt_filename)</span><br><span class="line"></span><br><span class="line">    text1 =washword(s)</span><br><span class="line"></span><br><span class="line">    wc = wordcloud(text1,img_filename,img_format)</span><br><span class="line">    <span class="comment"># 显示词云</span></span><br><span class="line">    plt.imshow(wc, interpolation=<span class="string">&#x27;bilinear&#x27;</span>)<span class="comment"># 用plt显示图片</span></span><br><span class="line">    plt.axis(<span class="string">&quot;off&quot;</span>)  <span class="comment"># 不显示坐标轴</span></span><br><span class="line">    plt.show() <span class="comment"># 显示图片</span></span><br><span class="line"></span><br><span class="line">    <span class="comment"># 保存到文件</span></span><br><span class="line">    wc.to_file(<span class="string">&quot;《梅西-改变世界二十大进球》弹幕.png&quot;</span>)</span><br></pre></td></tr></table></figure><h2 id="食用方法"><a href="#食用方法" class="headerlink" title="食用方法"></a>食用方法</h2><p>复制这段代码，放入一个文件夹中，接着在这个文件夹中放入你想作为背景图的图片。</br><mark class="hl-label red">注意！这里默认图片背景为白色，所以你的背景图的背景也应该为白色。可以自己修改，代码第95行可以指定颜色。</mark> </br>接着，用编译器打开这个文件夹，直接运行，按照终端输出的提示依次输入所需信息，就可以完成啦！</p><h1 id="成果展示"><a href="#成果展示" class="headerlink" title="成果展示"></a>成果展示</h1><h2 id="初始界面"><a href="#初始界面" class="headerlink" title="初始界面"></a>初始界面</h2><img src="https://pic4.zhimg.com/80/v2-46aecac2e07442641ff66be103c03527_1440w.webp"><h2 id="运行成功的界面（注意终端的输入）"><a href="#运行成功的界面（注意终端的输入）" class="headerlink" title="运行成功的界面（注意终端的输入）"></a>运行成功的界面（注意终端的输入）</h2><img src="https://pic2.zhimg.com/80/v2-8cb62c50a59276c213681d2759c6b1e5_1440w.webp">]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前言：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;</summary>
      
    
    
    
    <category term="python" scheme="http://www.messi.ltd/categories/python/"/>
    
    
    <category term="python" scheme="http://www.messi.ltd/tags/python/"/>
    
    <category term="爬虫" scheme="http://www.messi.ltd/tags/%E7%88%AC%E8%99%AB/"/>
    
    <category term="requests" scheme="http://www.messi.ltd/tags/requests/"/>
    
  </entry>
  
  <entry>
    <title>Git学习记录（三）（正在持续更新）</title>
    <link href="http://www.messi.ltd/posts/47183a64.html"/>
    <id>http://www.messi.ltd/posts/47183a64.html</id>
    <published>2022-11-28T16:04:43.000Z</published>
    <updated>2022-11-30T08:41:01.583Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><h1 id="远程仓库Github"><a href="#远程仓库Github" class="headerlink" title="远程仓库Github"></a>远程仓库Github</h1><div class="note green icon-padding flat"><i class="note-icon fab fa-internet-explorer"></i><p>Git是分布式版本控制系统，同一个Git仓库，可以分布到不同的机器上。怎么分布呢？最早，肯定只有一台机器有一个原始版库，此后，别的机器可以“克隆”这个原始版本库，而且每台机器的版本库其实都是一样的，并没有主次之分。<br>你肯定会想，至少需要两台机器才能玩远程库不是？但是我只有一台电脑，怎么玩？<br>其实一台电脑上也是可以克隆多个版本库的，只要不在同一个目录下。不过，现实生活中是不会有人这么傻的在一台电脑上搞几个远程库玩，因为一台电脑上搞几个远程库完全没有意义，而且硬盘挂了会导致所有库都挂掉，所以我也不告诉你在一台电脑上怎么克隆多个仓库。<br>实际情况往往是这样，找一台电脑充当服务器的角色，每天24小时开机，其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上，并且各自把各自的提交推送到服务器仓库里，也从服务器仓库中拉取别人的提交。<br>（引自廖雪峰）</p></div><img src="https://tse3-mm.cn.bing.net/th/id/OIP-C.lEetUExVDCW3Oq0Yl-CtLwHaBl?w=345&h=74&c=7&r=0&o=5&dpr=1.5&pid=1.7"><p>这一部分的操作需要我们拥有一个<em><strong>Github</strong></em>账号。从名字就可以看出，这个网站就是提供<em><strong>Git</strong></em>仓库托管服务的，所以，只要注册一个<em><strong>GitHub</strong></em>账号，就可以免费获得<em><strong>Git</strong></em>远程仓库。具体可以参考我们之前的文章（<a href="https://www.messi.ltd/posts/1706a3c7.html">点这里直达哦</a>），在这里已经较为详细的叙述了如何将自己的<em><strong>ssh</strong></em>密钥部署在<em><strong>Github</strong></em>上，请先完成这些步骤才能继续操作喔(*^▽^*)</p><h2 id="添加远程库"><a href="#添加远程库" class="headerlink" title="添加远程库"></a>添加远程库</h2><p>在完成上述设置后，我们需要在Github中新建一个库（<em><strong>repo</strong></em>），库的名称随意，我就先建立一个名为<em><strong>learngit</strong></em>的远程库。</p><p>在我们建立好仓库后，<em><strong>GitHub</strong></em>告诉我们，可以从这个仓库克隆出新的仓库，也可以把一个已有的本地仓库与之关联，然后，把本地仓库的内容推送到<em><strong>GitHub</strong></em>仓库。现在，我们根据<em><strong>GitHub</strong></em>的提示，在本地的<em><strong>learngit</strong></em>仓库下运行命令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git remote add origin https://github.com/Yourname/Yourreponame.git</span><br></pre></td></tr></table></figure><p>添加后，远程库的名字就是<em><strong>origin</strong></em>，这是<em><strong>Git</strong></em>默认的叫法，也可以改成别的，但是<em><strong>origin</strong></em>这个名字一看就知道是远程库。</p><div class="note danger modern"><p>注意，这里的“<em><strong>Yourename</strong></em>”和“<em><strong>Yourreponame</strong></em>”分别是你<em><strong>Github</strong></em>账号的用户名和你新建仓库的名字。</p></div><p>下一步，就可以把本地库的所有内容推送到远程仓库上：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">$ git push -u origin master</span><br><span class="line"></span><br><span class="line">Enumerating objects: <span class="number">25</span>, done.</span><br><span class="line">Counting objects: <span class="number">100</span>% (<span class="number">25</span>/<span class="number">25</span>), done.</span><br><span class="line">Delta compression using up to <span class="number">16</span> threads</span><br><span class="line">Compressing objects: <span class="number">100</span>% (<span class="number">21</span>/<span class="number">21</span>), done.</span><br><span class="line">Writing objects: <span class="number">100</span>% (<span class="number">25</span>/<span class="number">25</span>), <span class="number">2</span>.<span class="number">02</span> KiB | <span class="number">1</span>.<span class="number">01</span> MiB/s, done.</span><br><span class="line">Total <span class="number">25</span> (delta <span class="number">9</span>), reused <span class="number">0</span> (delta <span class="number">0</span>), pack-reused <span class="number">0</span></span><br><span class="line"><span class="function">remote: <span class="title">Resolving</span> <span class="title">deltas</span>: 100% (9/9), <span class="title">done</span>.</span></span><br><span class="line"><span class="function"><span class="title">To</span> <span class="title">https</span>://<span class="title">github.com</span>/<span class="title">Motherlesssss</span>/<span class="title">learngit.git</span></span></span><br><span class="line"><span class="function"> * [<span class="title">new</span> <span class="title">branch</span>]      <span class="title">master</span> -&gt; <span class="title">master</span></span></span><br><span class="line"><span class="function"><span class="title">branch</span> &#x27;<span class="title">master</span>&#x27; <span class="title">set</span> <span class="title">up</span> <span class="title">to</span> <span class="title">track</span> &#x27;<span class="title">origin</span>/<span class="title">master</span>&#x27;.</span></span><br></pre></td></tr></table></figure><div class="note green icon-padding flat"><i class="note-icon fab fa-internet-explorer"></i><p>把本地库的内容推送到远程，用<em><strong>git push</strong></em>命令，实际上是把当前分支<em><strong>master</strong></em>推送到远程。</p><p>由于远程库是空的，我们第一次推送<em><strong>master</strong></em>分支时，加上了<em><strong>-u</strong></em>参数，<em><strong>Git</strong></em>不但会把本地的<em><strong>master</strong></em>分支内容推送的远程新的<em><strong>master</strong></em>分支，还会把本地的<em><strong>master</strong></em>分支和远程的<em><strong>master</strong></em>分支关联起来，在以后的推送或者拉取时就可以简化命令。</p></div><p>这时候你登录查看该远程库，就会发现已经和自己本地的版本库一模一样啦！！从现在开始，我们只要本地提交了，就可以通过一下命令将本地的master分支的最新修改推送至远程库：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git push origin master</span><br></pre></td></tr></table></figure><h2 id="删除远程库"><a href="#删除远程库" class="headerlink" title="删除远程库"></a>删除远程库</h2><p>有了添加远程库，那我们肯定也会有删除远程库的需要，一共分两步，演示如下</p><h3 id="解除本地与远程仓库的绑定关系"><a href="#解除本地与远程仓库的绑定关系" class="headerlink" title="解除本地与远程仓库的绑定关系"></a>解除本地与远程仓库的绑定关系</h3><p>首先，我们先使用如下指令查看远程库信息：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git remote -v</span><br><span class="line"></span><br><span class="line">origin  https://github.com/Motherlesssss/learngit.git (fetch)</span><br><span class="line">origin  https://github.com/Motherlesssss/learngit.git (push)</span><br></pre></td></tr></table></figure><p>然后根据名字删除：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git remote rm origin</span><br></pre></td></tr></table></figure><h3 id="删除远程库-1"><a href="#删除远程库-1" class="headerlink" title="删除远程库"></a>删除远程库</h3><p>要真正删除远程库，需要登录到GitHub，在后台页面找到删除按钮再删除。</p><h2 id="从远程库克隆"><a href="#从远程库克隆" class="headerlink" title="从远程库克隆"></a>从远程库克隆</h2><p>我们之前是在现有本地库的情况下建立远程库，假设我们从零开始，那么最好的方式是先创建远程库，然后从远程克隆，我们先建立一个新的远程仓库<em><strong>gitskills</strong></em>，并且勾选<em><strong>Initialize this repository with a README</strong></em>，这样<em><strong>GitHub</strong></em>会自动为我们创建一个<em><strong>README.md</strong></em>文件。</p><p>这时，一个远程库我们已经建立好了，输入以下指令来克隆一个本地库：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git clone git@github.com:Yourname/Yourreponame.git</span><br></pre></td></tr></table></figure><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">$ git clone git@github.com:Motherlesssss/gitskills.git</span><br><span class="line"></span><br><span class="line">Cloning into &#x27;gitskills&#x27;...</span><br><span class="line"><span class="function">remote: <span class="title">Enumerating</span> <span class="title">objects</span>: 3, <span class="title">done</span>.</span></span><br><span class="line"><span class="function"><span class="title">remote</span>: <span class="title">Counting</span> <span class="title">objects</span>: 100% (3/3), <span class="title">done</span>.</span></span><br><span class="line"><span class="function"><span class="title">remote</span>: <span class="title">Total</span> 3 (<span class="title">delta</span> 0), <span class="title">reused</span> 0 (<span class="title">delta</span> 0), <span class="title">pack</span>-<span class="title">reused</span> 0</span></span><br><span class="line"><span class="function"><span class="title">Receiving</span> <span class="title">objects</span>: 100% (3/3), <span class="title">done</span>.</span></span><br></pre></td></tr></table></figure><div class="note danger modern"><p>注意，这里的“<em><strong>Yourename</strong></em>”和“<em><strong>Yourreponame</strong></em>”分别是你<em><strong>Github</strong></em>账号的用户名和你已经建立好的仓库的名字。</p></div><p>这时你就会发现本地的<em><strong>gitskills</strong></em>目录中已经出现<em><strong>README.md</strong></em>啦！！</p><h1 id="分支管理"><a href="#分支管理" class="headerlink" title="分支管理"></a>分支管理</h1><p>关于分支管理的作用以及解释，在<a href="https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424">廖雪峰老师的网站</a>已经有详细解释了，可以自行前往观看，这里便不再赘述，直接进入正题(*^▽^*)</p><h2 id="创建并切换分支"><a href="#创建并切换分支" class="headerlink" title="创建并切换分支"></a>创建并切换分支</h2><p>创建并切换至<em><strong>dev</strong></em>分支：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git switch -c dev</span><br><span class="line"></span><br><span class="line">Switched to a new branch &#x27;dev&#x27;</span><br></pre></td></tr></table></figure><p><em><strong>git switch</strong></em>命令加上<em><strong>-c</strong></em>参数表示创建并切换，相当于以下两条命令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git branch dev</span><br><span class="line">$ git switch dev</span><br><span class="line"></span><br><span class="line">Switched to branch &#x27;dev&#x27;</span><br></pre></td></tr></table></figure><h2 id="查看当前分支"><a href="#查看当前分支" class="headerlink" title="查看当前分支"></a>查看当前分支</h2><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git branch</span><br><span class="line"></span><br><span class="line">* dev</span><br><span class="line">  master</span><br></pre></td></tr></table></figure><p>这个命令会列出所有分支，当前分支前会加一个 * 号</p><h2 id="合并分支（快合并）"><a href="#合并分支（快合并）" class="headerlink" title="合并分支（快合并）"></a>合并分支（快合并）</h2><p>当我们在<em><strong>dev</strong></em>分支上做出修改后，我们此时想合并两个分支，可以如下操作：</p><div class="note danger modern"><p>注意，在进行合并操作前，该分支的修改必须已经提交添加至版本库！</p></div><p>切换至<em><strong>master</strong></em>分支：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git switch master</span><br><span class="line"></span><br><span class="line">Switched to branch &#x27;master&#x27;</span><br></pre></td></tr></table></figure><p>我们会发现在这个分支下我们刚刚修改的文件并没有改变，是因为刚刚的修改在<em><strong>dev</strong></em>分支上，而<em><strong>master</strong></em>分支的提交点并没有变，所以接下来合并：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$ git merge dev</span><br><span class="line"></span><br><span class="line">Updating d46f35e..b17d20e</span><br><span class="line">Fast-forward</span><br><span class="line"> readme.txt | <span class="number">1</span> +</span><br><span class="line"> <span class="number">1</span> file changed, <span class="number">1</span> insertion(+)</span><br></pre></td></tr></table></figure><p><em><strong>git merge</strong></em>命令用于合并指定分支到<mark class="hl-label red">当前分支</mark> 。<div class="note warning modern"><p>注意到上面的<em><strong>Fast-forward</strong></em>信息，Git告诉我们，这次合并是“快进模式”，也就是直接把<em><strong>master</strong></em>指向<em><strong>dev</strong></em>的当前提交，所以合并速度非常快。<br>当然，也不是每次合并都能<em><strong>Fast-forward</strong></em>，我们后面会讲其他方式的合并。</p></div><h2 id="删除分支"><a href="#删除分支" class="headerlink" title="删除分支"></a>删除分支</h2><p>当你完成合并后，你就可以删除这个分支了，指令如下：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git branch -d dev</span><br><span class="line"></span><br><span class="line">Deleted branch dev (was b17d20e).</span><br></pre></td></tr></table></figure><h2 id="冲突情况下的合并"><a href="#冲突情况下的合并" class="headerlink" title="冲突情况下的合并"></a>冲突情况下的合并</h2><p>在前面我们已经演示过的合并中，<em><strong>dev</strong></em>分支提交的修改内容与<em><strong>master</strong></em>分支完全不同，修改内容不起冲突。因此<em><strong>Git</strong></em>会默认快合并，就像下面这张图所描述的一样：</p><img src="https://pic2.zhimg.com/80/v2-5e29021a13b221d13909abec8d7ff735_1440w.webp"><p>而如果我们此时新建并切换到一个<em><strong>feature1</strong></em>的分支，在这个分支下我们修改<em><strong>readme.txt</strong></em>添加最后一行并提交：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">its a test</span><br></pre></td></tr></table></figure><p>紧接着，我们切换回<em><strong>master</strong></em>分支，并且将最后一行添加如下，并且提交：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">it&#x27;s a test</span><br></pre></td></tr></table></figure><p>此时，<em><strong>master</strong></em>分支与<em><strong>feature1</strong></em>分支都分别各自有了新的提交，变成了如下图：</p><br><img src="https://pic2.zhimg.com/80/v2-eb9d96b5e4672cf7d6de950708152c55_1440w.webp"></p><p>这时候我们若执行合并，会出现以下情况：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ git merge feature1</span><br><span class="line"></span><br><span class="line">Auto-merging readme.txt</span><br><span class="line">CONFLICT (content): Merge conflict <span class="keyword">in</span> readme.txt</span><br><span class="line">Automatic merge failed; fix conflicts and then commit the result.</span><br></pre></td></tr></table></figure><p>很显然，此时出现了冲突，必须手动解决，当然，使用<em><strong>git status</strong></em>指令查看状态，也会告诉我们哪里起冲突了：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">$ git status</span><br><span class="line"></span><br><span class="line">On branch master</span><br><span class="line">Your branch is ahead of &#x27;origin/master&#x27; by <span class="number">1</span> commit.</span><br><span class="line">  (use &quot;git push&quot; to publish your local commits)</span><br><span class="line"></span><br><span class="line">You have unmerged paths.</span><br><span class="line">  (fix conflicts and run &quot;git commit&quot;)</span><br><span class="line">  (use &quot;git merge --abort&quot; to abort the merge)</span><br><span class="line"></span><br><span class="line">Unmerged paths:</span><br><span class="line">  (use &quot;git add &lt;file&gt;...&quot; to mark resolution)</span><br><span class="line">        both modified:   readme.txt</span><br><span class="line"></span><br><span class="line">no changes added to commit (use &quot;git add&quot; and/or &quot;git commit -a&quot;)</span><br></pre></td></tr></table></figure><p>当然，此时我们直接直接查看<em><strong>readme.txt</strong></em>内容：</p><img src="https://pic3.zhimg.com/80/v2-4e5d6ff021ac0bdbaeacccbad26ee36e_1440w.webp"><p><em><strong>Git</em></strong>用<<<<<<<，=======，>>>>>>>标记出不同分支的内容，我们直接在该文件中修改如下后保存并且提交：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">its a test</span><br></pre></td></tr></table></figure><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git add readme.txt</span><br><span class="line">$ git commit -m&quot;test&quot;</span><br><span class="line"></span><br><span class="line">[master <span class="number">9772</span>dac] test</span><br></pre></td></tr></table></figure><p>现在，<em><strong>master</strong></em>分支与<em><strong>feature1</strong></em>分支变成了如下图所示：</p><img src="https://pic2.zhimg.com/80/v2-1d4f9895cb768f68ecfc080432477ae9_1440w.webp"><p>也可使用该指令查看分支合并情况：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git log --graph --pretty=oneline --abbrev-commit</span><br></pre></td></tr></table></figure><p>或者该指令查看分支合并图：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git log --graph</span><br></pre></td></tr></table></figure><div class="note success modern"><p>最后别忘了删除<em><strong>feature1</strong></em>分支哦！！</p></div><p>当然，这里的情况是修改量较小的情况下，如果修改量太大，想要放弃合并，可以使用以下指令来让你的代码恢复到合并之前的状态：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git merge --abort</span><br></pre></td></tr></table></figure><h2 id="禁用快合并，保留分支历史"><a href="#禁用快合并，保留分支历史" class="headerlink" title="禁用快合并，保留分支历史"></a>禁用快合并，保留分支历史</h2><p>大部分情况下，我们的分支不会起冲突，因此绝大多数的合并都是快合并，但是在这种模式下，删除分支后，会丢掉分支信息。因此，我们可以选择强制禁用快分支，这样，我们就能保留分支信息了：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git merge --no-ff -m &quot;commit描述&quot; 分支名</span><br></pre></td></tr></table></figure><p>这时就会如下图，分支信息就得以保留：</p><img src="https://pic2.zhimg.com/80/v2-eb9d96b5e4672cf7d6de950708152c55_1440w.webp"><h2 id="分支策略"><a href="#分支策略" class="headerlink" title="分支策略"></a>分支策略</h2><div class="note green icon-padding flat"><i class="note-icon fab fa-internet-explorer"></i><p>在实际开发中，我们应该按照几个基本原则进行分支管理：首先，master分支应该是非常稳定的，也就是仅用来发布新版本，平时不能在上面干活；那在哪干活呢？干活都在dev分支上，也就是说，dev分支是不稳定的，到某个时候，比如1.0版本发布时，再把dev分支合并到master上，在master分支发布1.0版本；你和你的小伙伴们每个人都在dev分支上干活，每个人都有自己的分支，时不时地往dev分支上合并就可以了。所以，团队合作的分支看起来就像这样：<br><img src="https://pic3.zhimg.com/80/v2-3fde99592e66bb0030802f7f77bbd57e_1440w.webp"><br>（引自廖雪峰）</p></div><h2 id="Bug分支"><a href="#Bug分支" class="headerlink" title="Bug分支"></a>Bug分支</h2><p>我们设想如下场景：我们正在<em><strong>dev</strong></em>分支上进行工作，此时我们突然发现我们此前的版本库中有一个文件存在问题，我们想要创建分支去修改它，但是我们手头的<em><strong>dev</strong></em>分支工作还没有提交，我们该怎么办？不用慌，我们可以输入以下指令来“储藏”当前的工作现场：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git stash</span><br><span class="line"></span><br><span class="line">Saved working directory and index state WIP on dev: f52c633 add merge</span><br></pre></td></tr></table></figure><p>接着，我们确定从哪个分支来修复，假设在<em><strong>master</strong></em>分支上创建临时分支：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">$ git switch master</span><br><span class="line"></span><br><span class="line">Switched to branch &#x27;master&#x27;</span><br><span class="line"></span><br><span class="line">$ git switch -c bug</span><br><span class="line"></span><br><span class="line">Switched to a new branch &#x27;bug&#x27;</span><br></pre></td></tr></table></figure><p>此时可以用下图描述：</p><img src="https://pic1.zhimg.com/80/v2-8f1002cbfe6f4530a53a44c12540fe40_1440w.webp"><p>在此分支上完成修改后，切换至<em><strong>master</strong></em>分支，并完成合并，最后记得删除<em><strong>bug</strong></em>分支: </p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git add readme.txt </span><br><span class="line">$ git commit -m &quot;fix bug <span class="number">101</span>&quot;</span><br><span class="line">[bug <span class="number">4</span>c805e2] fix bug <span class="number">101</span></span><br><span class="line"> <span class="number">1</span> file changed, <span class="number">1</span> insertion(+), <span class="number">1</span> deletion(-)</span><br></pre></td></tr></table></figure><div class="note danger flat"><p>请注意这里的<mark class="hl-label red">4c805e2</mark> ！！后续非常重要。</p></div><p>这是我们切换回<em><strong>dev</strong></em>分支,查看工作区却发现是干净的：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">$ git switch dev</span><br><span class="line"></span><br><span class="line">Switched to branch &#x27;dev&#x27;</span><br><span class="line"></span><br><span class="line">$ git status</span><br><span class="line">On branch dev</span><br><span class="line"></span><br><span class="line">nothing to commit, working <span class="built_in">tree</span> clean</span><br></pre></td></tr></table></figure><p>用如下命令查看我们刚刚存好的工作区：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git stash list</span><br><span class="line"></span><br><span class="line">stash@&#123;<span class="number">0</span>&#125;: WIP on dev: f52c633 add merge</span><br></pre></td></tr></table></figure><p>接着，用如下命令恢复并删除<em><strong>stash</strong></em>内容：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">$ git stash pop</span><br><span class="line"></span><br><span class="line">On branch dev</span><br><span class="line">Changes to be committed:</span><br><span class="line">  (use &quot;git reset HEAD &lt;file&gt;...&quot; to unstage)</span><br><span class="line"></span><br><span class="line">new file:   hello.py</span><br><span class="line"></span><br><span class="line">Changes <span class="keyword">not</span> staged <span class="keyword">for</span> commit:</span><br><span class="line">  (use &quot;git add &lt;file&gt;...&quot; to update what will be committed)</span><br><span class="line">  (use &quot;git checkout -- &lt;file&gt;...&quot; to discard changes <span class="keyword">in</span> working directory)</span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function">modified:   <span class="title">readme.txt</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">Dropped</span> <span class="title">refs</span>/<span class="title">stash</span>@&#123;0&#125; (5<span class="title">d677e2ee266f39ea296182fb2354265b91b3b2a</span>)</span></span><br></pre></td></tr></table></figure><p>当然可以<em><strong>stash</strong></em>多次，恢复时先用<em><strong>git stash list</strong></em>查看，然后恢复指定<em><strong>stash</strong></em>：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git stash apply stash@&#123;<span class="number">0</span>&#125;</span><br></pre></td></tr></table></figure><p>由于我们的dev分支是早期master分支分出来的，所以我们需要将这个改动重放一遍：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">$ git branch</span><br><span class="line"></span><br><span class="line">* dev</span><br><span class="line">  master</span><br><span class="line"></span><br><span class="line">$ git cherry-pick <span class="number">4</span>c805e2</span><br><span class="line"></span><br><span class="line">[master <span class="number">1</span>d4b803] fix bug <span class="number">101</span></span><br><span class="line"> <span class="number">1</span> file changed, <span class="number">1</span> insertion(+), <span class="number">1</span> deletion(-)</span><br></pre></td></tr></table></figure><div class="note danger flat"><p>这里的<mark class="hl-label red">4c805e2</mark> ，便是上文标红的编号啦！！</p></div>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;h1 id=&quot;远程仓库Github&quot;&gt;&lt;a href=&quot;#远程仓库Github&quot; c</summary>
      
    
    
    
    <category term="Git" scheme="http://www.messi.ltd/categories/Git/"/>
    
    
    <category term="git" scheme="http://www.messi.ltd/tags/git/"/>
    
    <category term="github" scheme="http://www.messi.ltd/tags/github/"/>
    
  </entry>
  
  <entry>
    <title>欢迎光临我的二十岁</title>
    <link href="http://www.messi.ltd/posts/5bbcc6f6.html"/>
    <id>http://www.messi.ltd/posts/5bbcc6f6.html</id>
    <published>2022-11-27T14:45:16.725Z</published>
    <updated>2022-12-02T03:23:10.985Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><h1 id="手动背景音乐（doge"><a href="#手动背景音乐（doge" class="headerlink" title="手动背景音乐（doge"></a>手动背景音乐（doge</h1><video width="800" height="300" controls preload="none" poster="https://y.qq.com/music/photo_new/T002R300x300M000002y8aTO0LDJgG_1.jpg?max_age=2592000">  <source src="http://ws.stream.qqmusic.qq.com/C400000vgNUx2xm2ui.m4a?guid=315739103&vkey=936D2EF35AD8C3C94801E9BAC9220DA1BB2EECAF25AFB757296D77F5EF3278482DCE46AABB9D4D8E95E88248E2E13EF69E5A243DA1CD0508&uin=&fromtag=120032" >  您的浏览器不支持 video 标签。</video><p>这是我很喜欢的一首歌，分享给大家喔，可以点开听！</p><h1 id="没有感想，终于成大人啦"><a href="#没有感想，终于成大人啦" class="headerlink" title="没有感想，终于成大人啦"></a>没有感想，终于成大人啦</h1>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;h1 id=&quot;手动背景音乐（doge&quot;&gt;&lt;a href=&quot;#手动背景音乐（doge&quot;</summary>
      
    
    
    
    <category term="日常" scheme="http://www.messi.ltd/categories/%E6%97%A5%E5%B8%B8/"/>
    
    
    <category term="生日" scheme="http://www.messi.ltd/tags/%E7%94%9F%E6%97%A5/"/>
    
    <category term="随想" scheme="http://www.messi.ltd/tags/%E9%9A%8F%E6%83%B3/"/>
    
  </entry>
  
  <entry>
    <title>Git学习记录（二）</title>
    <link href="http://www.messi.ltd/posts/1d65caa7.html"/>
    <id>http://www.messi.ltd/posts/1d65caa7.html</id>
    <published>2022-11-26T07:42:40.000Z</published>
    <updated>2022-11-28T16:04:10.634Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><h1 id="工作区和暂存区"><a href="#工作区和暂存区" class="headerlink" title="工作区和暂存区"></a>工作区和暂存区</h1><h2 id="工作区"><a href="#工作区" class="headerlink" title="工作区"></a>工作区</h2><p>在我们之前的操作中，工作区就指的是<em><strong>learngit</strong></em>文件夹。</p><h2 id="版本库"><a href="#版本库" class="headerlink" title="版本库"></a>版本库</h2><p>工作区有一个隐藏目录<em><strong>.git</strong></em>，这个不算工作区，而是<em><strong>Git</strong></em>的版本库。<em><strong>Git</strong></em>的版本库里存了很多东西，其中最重要的就是称为<em><strong>stage</strong></em>（或者叫<em><strong>index</strong></em>）的暂存区，还有<em><strong>Git</strong></em>为我们自动创建的第一个分支<em><strong>master</strong></em>，以及指向<em><strong>master</strong></em>的一个指针叫<em><strong>HEAD</strong></em>。</p><img src="https://pic3.zhimg.com/80/v2-701e02bf0b2d71ab51b7e2b6aa973d52_1440w.webp"><p>正如我们之前所讲，我们提交文件一共分两步:<ul>  <li><em><strong>git add</strong></em>命令是将文件修改添加到暂存区。</li>  <li><em><strong>git commit</strong></em>命令是把暂存区的所有内容提交到当前分支</li></ul><h2 id="操作演示"><a href="#操作演示" class="headerlink" title="操作演示"></a>操作演示</h2><p>我们首先对<em><strong>readme.txt</strong></em>做一个修改，如下：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Git is a distributed version control system.</span><br><span class="line">Git is free software distributed under the GPL.</span><br><span class="line">Git has a mutable index called stage.</span><br></pre></td></tr></table></figure><p>紧接着，我们在工作区新建一个文本文件<em><strong>LICENSE</strong></em>，内容随意，接着我们来查看一下暂存区状态：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">$ git status</span><br><span class="line"></span><br><span class="line">On branch master</span><br><span class="line">Changes <span class="keyword">not</span> staged <span class="keyword">for</span> commit:</span><br><span class="line">  (use &quot;git add &lt;file&gt;...&quot; to update what will be committed)</span><br><span class="line">  (use &quot;git <span class="built_in">restore</span> &lt;file&gt;...&quot; to discard changes <span class="keyword">in</span> working directory)</span><br><span class="line"><span class="function">        modified:   <span class="title">readme.txt</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">Untracked</span> <span class="title">files</span>:</span></span><br><span class="line"><span class="function">  (<span class="title">use</span> &quot;<span class="title">git</span> <span class="title">add</span> &lt;<span class="title">file</span>&gt;...&quot; <span class="title">to</span> <span class="title">include</span> <span class="title">in</span> <span class="title">what</span> <span class="title">will</span> <span class="title">be</span> <span class="title">committed</span>)</span></span><br><span class="line"><span class="function">        <span class="title">LICENSE.txt</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">no</span> <span class="title">changes</span> <span class="title">added</span> <span class="title">to</span> <span class="title">commit</span> (<span class="title">use</span> &quot;<span class="title">git</span> <span class="title">add</span>&quot; <span class="title">and</span>/<span class="title">or</span> &quot;<span class="title">git</span> <span class="title">commit</span> -<span class="title">a</span>&quot;)</span></span><br></pre></td></tr></table></figure><p><em><strong>Git</strong></em>非常清楚地告诉我们，<em><strong>readme.txt</strong></em>被修改了，而<em><strong>LICENSE</strong></em>还从来没有被添加过，所以它的状态是<em><strong>Untracked</strong></em>。现在，使用两次命令<em><strong>git add</strong></em>，把<em><strong>readme.txt</strong></em>和<em><strong>LICENSE</strong></em>都添加后，用<em><strong>git status</strong></em>再查看一下：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">$ git add readme.txt</span><br><span class="line">$ git add LICENSE.txt</span><br><span class="line">$ git status</span><br><span class="line"></span><br><span class="line">On branch master</span><br><span class="line">Changes to be committed:</span><br><span class="line">  (use &quot;git reset HEAD &lt;file&gt;...&quot; to unstage)</span><br><span class="line"></span><br><span class="line">new file:   LICENSE</span><br><span class="line"><span class="function">modified:   <span class="title">readme.txt</span></span></span><br></pre></td></tr></table></figure><p>现在，暂存区的状态就变成这样了：</p><img src="https://pic4.zhimg.com/80/v2-3140921b12cc7d9a949076b2bb80d637_1440w.webp"><p>所以，<em><strong>git add</strong></em>命令实际上就是把要提交的所有修改放到暂存区（<em><strong>Stage</strong></em>），然后，执行<em><strong>git commit</strong></em>就可以一次性把暂存区的所有修改提交到分支：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ git commit -m&quot;understand how stage works&quot;</span><br><span class="line"></span><br><span class="line">[master <span class="number">46</span>d9aa2] understand how stage works</span><br><span class="line"> <span class="number">2</span> files changed, <span class="number">2</span> insertions(+), <span class="number">1</span> deletion(-)</span><br><span class="line"> create <span class="built_in">mode</span> <span class="number">100644</span> LICENSE.txt</span><br></pre></td></tr></table></figure><p>紧接着，如果我们检查一下缓存区状态：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git status</span><br><span class="line"></span><br><span class="line">On branch master</span><br><span class="line">nothing to commit, working <span class="built_in">tree</span> clean</span><br></pre></td></tr></table></figure><p>此时我们的工作区是非常干净的，现在版本库变成了这样，暂存区就没有任何内容了：</p><img src="https://pic2.zhimg.com/80/v2-f6ddf40f921f9953b6f84d107a11f689_1440w.webp"><h1 id="查看工作区和版本库里面最新版本的区别"><a href="#查看工作区和版本库里面最新版本的区别" class="headerlink" title="查看工作区和版本库里面最新版本的区别"></a>查看工作区和版本库里面最新版本的区别</h1><p>我们先将<em><strong>readme.txt</strong></em>修改如下，但是不提交：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">Git is a distributed version control system.</span><br><span class="line">Git is free software distributed under the GPL.</span><br><span class="line">Git has a mutable index called stage.</span><br><span class="line">Git nononono</span><br></pre></td></tr></table></figure><p>这时我们可以发现，我们现在工作区的文件应该与库中的最新版本不一致，那我们如何看到区别呢？我们可以输入以下指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">$ git diff HEAD -- readme.txt</span><br><span class="line"></span><br><span class="line">diff --git a/readme.txt b/readme.txt</span><br><span class="line">index f21047c..<span class="number">7</span>df0f53 <span class="number">100644</span></span><br><span class="line">--- a/readme.txt</span><br><span class="line">+++ b/readme.txt</span><br><span class="line">@@ -<span class="number">1</span>,<span class="number">3</span> +<span class="number">1</span>,<span class="number">4</span> @@</span><br><span class="line"> Git is a distributed version control system.</span><br><span class="line"> Git is free software distributed under the GPL.</span><br><span class="line">-Git has a mutable index called stage.</span><br><span class="line">\ No newline <span class="built_in">at</span> end of file</span><br><span class="line">+Git has a mutable index called stage.</span><br><span class="line">+Git nononono</span><br><span class="line">\ No newline <span class="built_in">at</span> end of file</span><br></pre></td></tr></table></figure><h1 id="撤销修改"><a href="#撤销修改" class="headerlink" title="撤销修改"></a>撤销修改</h1><p>我们在修改文件的时候，不可避免的会出现一些失误，分为很多种情况，那我们该怎么撤销我们修改呢？，方法如下：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">restore</span> file</span><br><span class="line"></span><br><span class="line">$ git <span class="built_in">restore</span> --staged file</span><br><span class="line"></span><br><span class="line">$ git reset --hard HEAD^</span><br><span class="line"></span><br></pre></td></tr></table></figure><div class="note info modern"><p>情况1：在工作区做了修改，并未添加到暂存区，想撤销工作区的修改，用 <em><strong>git restore file</strong></em>;</p><p>情况2：在工作区做了修改，并用<em><strong>git add</strong></em> 添加到了暂存区，未提交；想撤销，分两步，1.先撤销暂存区的修改，用 <em><strong>git restore –staged file</strong></em>, 2.然后参考情况1撤销工作区的修改;</p><p>情况3：在工作区做了修改，且<em><strong>git add git commit</strong></em>添加并提交了内容，想撤销本次提交，直接用 <em><strong>git reset –hard HEAD^</strong></em>回退版本，即可保证工作区，暂存区，版本库都是上次的内容.</p></div><h1 id="删除文件"><a href="#删除文件" class="headerlink" title="删除文件"></a>删除文件</h1><h2 id="删除工作区文件"><a href="#删除工作区文件" class="headerlink" title="删除工作区文件"></a>删除工作区文件</h2><p>我们首先在工作区新建文件<em><strong>test.txt</strong></em>这个操作很简单，你可以就像平常删除文件一般，右击删除。当人，也可以使用如下指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ rm test.txt</span><br></pre></td></tr></table></figure><p>这时，使用<em><strong>git status</strong></em>查看工作区状态，会立刻告诉你哪些文件被删除了：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">$ git status</span><br><span class="line"></span><br><span class="line">On branch master</span><br><span class="line">Changes <span class="keyword">not</span> staged <span class="keyword">for</span> commit:</span><br><span class="line">  (use &quot;git add/rm &lt;file&gt;...&quot; to update what will be committed)</span><br><span class="line">  (use &quot;git <span class="built_in">restore</span> &lt;file&gt;...&quot; to discard changes <span class="keyword">in</span> working directory)</span><br><span class="line"><span class="function">        deleted:    <span class="title">test.txt</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">no</span> <span class="title">changes</span> <span class="title">added</span> <span class="title">to</span> <span class="title">commit</span> (<span class="title">use</span> &quot;<span class="title">git</span> <span class="title">add</span>&quot; <span class="title">and</span>/<span class="title">or</span> &quot;<span class="title">git</span> <span class="title">commit</span> -<span class="title">a</span>&quot;)</span></span><br></pre></td></tr></table></figure><h2 id="撤销删除工作区文件"><a href="#撤销删除工作区文件" class="headerlink" title="撤销删除工作区文件"></a>撤销删除工作区文件</h2><p>如果这时你发现你是误删，别急，你可以输入以下指令来恢复改文件：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git <span class="built_in">restore</span> -- test.txt</span><br></pre></td></tr></table></figure><div class="note danger modern"><p>注意！！其实是用版本库里的版本替换工作区的版本，无论工作区是修改还是删除，都可以“一键还原”。<br>但是，从来没有被添加到版本库就被删除的文件，是无法恢复的！</p></div><h2 id="删除版本库中的改文件"><a href="#删除版本库中的改文件" class="headerlink" title="删除版本库中的改文件"></a>删除版本库中的改文件</h2><p>如果你在删除工作区文件中，你也确实要删除版本库中的该文件，需要连续使用以下两个指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">$ git rm test.txt</span><br><span class="line">rm &#x27;test.txt&#x27;</span><br><span class="line"></span><br><span class="line">$ git commit -m &quot;remove test.txt&quot;</span><br><span class="line"></span><br><span class="line">[master d46f35e] remove test.txt</span><br><span class="line"> <span class="number">1</span> file changed, <span class="number">1</span> deletion(-)</span><br><span class="line"> delete <span class="built_in">mode</span> <span class="number">100644</span> test.txt</span><br></pre></td></tr></table></figure><h2 id="如何撤销已经提交到暂存区的删除？"><a href="#如何撤销已经提交到暂存区的删除？" class="headerlink" title="如何撤销已经提交到暂存区的删除？"></a>如何撤销已经提交到暂存区的删除？</h2><p>当你使用<em><strong>git rm test.txt</strong></em>命令后，你突然后悔，想要恢复，这时你输入：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git <span class="built_in">restore</span> -- test.txt</span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function">error: <span class="title">pathspec</span> &#x27;<span class="title">test.txt</span>&#x27; <span class="title">did</span> <span class="title">not</span> <span class="title">match</span> <span class="title">any</span> <span class="title">file</span>(<span class="title">s</span>) <span class="title">known</span> <span class="title">to</span> <span class="title">git</span></span></span><br></pre></td></tr></table></figure><div class="note info modern"><p><em><strong>git rm test.txt</strong></em> 相当于是删除工作目录中的<em><strong>test.txt</strong></em>文件,并把此次删除操作提交到了暂存区</p><p>使用<em><strong>git restore – test.txt</strong></em>相当于是让工作目录<em><strong>test.txt</strong></em>恢复到暂存区中<em><strong>test.txt</strong></em>的状态,</p><p>但是工作目录中<em><strong>test.txt</strong></em>已经被删除,无法找到文件来再次删除所以报错。</p></div><p>所以这时，我们应该如下操作：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$ git reset head test.txt</span><br><span class="line"></span><br><span class="line">Unstaged changes after reset:</span><br><span class="line">D       test.txt</span><br><span class="line"></span><br><span class="line">$ git <span class="built_in">restore</span> -- test.txt</span><br></pre></td></tr></table></figure><div class="note info modern"><p>必须先使用<em><strong>git reset head test.txt</strong></em>在暂存区中将删除操作丢弃,</p><p>然后在<em><strong>git restore – test.txt</strong></em>就是直接将工作目录中<em><strong>test.txt</strong></em>恢复到版本库中的状态.</p></div>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;h1 id=&quot;工作区和暂存区&quot;&gt;&lt;a href=&quot;#工作区和暂存区&quot; class=&quot;</summary>
      
    
    
    
    <category term="Git" scheme="http://www.messi.ltd/categories/Git/"/>
    
    
    <category term="git" scheme="http://www.messi.ltd/tags/git/"/>
    
  </entry>
  
  <entry>
    <title>Git学习记录（一）</title>
    <link href="http://www.messi.ltd/posts/ea6d17dc.html"/>
    <id>http://www.messi.ltd/posts/ea6d17dc.html</id>
    <published>2022-11-24T11:20:54.000Z</published>
    <updated>2022-11-25T16:04:45.340Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言：</strong></p><p>博主在业余时间一直在学习有关hexo博客框架的内容，发现git版本控制贯穿始终，而作为一个计算机小白，对此的接触仅限于我见到的教程里那些git命令，我对此并不了解。然后便打算开始跟着<a href="https://www.liaoxuefeng.com/">廖雪峰老师</a>进行学习，本文是此次的学习记录，参照廖雪峰老师的教程，简单的复述一遍学习过程，有需要的自行取用哈^_^</p></blockquote><h1 id="什么是Git"><a href="#什么是Git" class="headerlink" title="什么是Git"></a>什么是Git</h1><img src="https://www.runoob.com/wp-content/uploads/2015/02/f7246b600c338744a9591cd7530fd9f9d62aa0f8.png"><ul>  <li>Git 是一个开源的分布式版本控制系统，用于敏捷高效地处理任何或小或大的项目。</li>  <li>Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。</li>  <li>Git 与常用的版本控制工具 CVS, Subversion 等不同，它采用了分布式版本库的方式，不必服务器端软件支持。</li></ul><h1 id="我们为什么要学习Git"><a href="#我们为什么要学习Git" class="headerlink" title="我们为什么要学习Git"></a>我们为什么要学习Git</h1><p>对于这个问题，廖雪峰老师有一段很恰当例子，我引用在下面：</p><p>“如果你用Microsoft Word写过长篇大论，那你一定有这样的经历：想删除一个段落，又怕将来想恢复找不回来怎么办？有办法，先把当前文件“另存为……”一个新的Word文件，再接着改，改到一定程度，再“另存为……”一个新文件，这样一直改下去，最后你的Word文档变成了这样：”</p><img src="https://pic3.zhimg.com/80/v2-27eef97b9a22b45b482186e014c3c436_1440w.webp"><p>过了一周，你想找回被删除的文字，但是已经记不清删除前保存在哪个文件里了，只好一个一个文件去找，真麻烦。看着一堆乱七八糟的文件，想保留最新的一个，然后把其他的删掉，又怕哪天会用上，还不敢删，真郁闷。更要命的是，有些部分需要你的财务同事帮助填写，于是你把文件Copy到U盘里给她（也可能通过Email发送一份给她），然后，你继续修改Word文件。一天后，同事再把Word文件传给你，此时，你必须想想，发给她之后到你收到她的文件期间，你作了哪些改动，得把你的改动和她的部分合并，真困难。于是你想，如果有一个软件，不但能自动帮我记录每次文件的改动，还可以让同事协作编辑，这样就不用自己管理一堆类似的文件了，也不需要把文件传来传去。如果想查看某次改动，只需要在软件里瞄一眼就可以，岂不是很方便？这个软件用起来就应该像这个样子，能记录每次文件的改动：</p><img src="https://pic1.zhimg.com/80/v2-15f0bf1a202ea91e888c100ce86f2220_1440w.webp"><p>这样，你就结束了手动管理多个“版本”的史前时代，进入到版本控制的20世纪。</p><h1 id="创建版本库（repository）"><a href="#创建版本库（repository）" class="headerlink" title="创建版本库（repository）"></a>创建版本库（repository）</h1><p>首先，在合适的地方创建一个空文件夹，将终端设置在该目录路径下，紧接着，通过<em><strong>git init</strong></em>命令，将该目录变成一个Git可以管理的仓库：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ git init</span><br><span class="line">Initialized empty Git repository <span class="keyword">in</span> .........git/</span><br></pre></td></tr></table></figure><div class="note danger simple"><p>就像为了我们之前所说的一样，为了避免各种各样奇奇怪怪的错误，我们所有的文件名尽量都不要掺杂英文</p></div><p>这时候我们会发现，当前目录下会多出来一个 .git 文件夹，看不到也没事，需要我们去设置一下，因为这个文件夹是默认隐藏的，无论如何这就代表我们成功啦！需要注意的是，这个文件夹我们最好不要手动修改，以防出现想象不到的错误。</p><h1 id="设置用户名"><a href="#设置用户名" class="headerlink" title="设置用户名"></a>设置用户名</h1><h2 id="为什么要设置用户名"><a href="#为什么要设置用户名" class="headerlink" title="为什么要设置用户名"></a>为什么要设置用户名</h2><p>因为Git是分布式版本控制系统，所以，每个机器都必须自报家门：你的名字和Email地址。这一点可以参照我们hexo博客建立过程中的问题。一般来说，在完成Git下载后，我们需要声明全局用户名和邮箱，指令如下：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ git config --global user.name &quot;Your Name&quot;</span><br><span class="line">$ git config --global user.email &quot;email@example.com&quot;</span><br></pre></td></tr></table></figure><p>用了这个参数，表示你这台机器上所有的Git仓库都会使用这个配置。当然，在我们之前的博文中有提到，如果我想部署两个博客在同一台电脑上，那么这个全局用户名就会起冲突，为了给不同的项目指定用户名和邮箱，我们可以将终端切至 .git 目录下，打开 config 配置文件，加入以下配置：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[user]</span><br><span class="line">name = Yourname</span><br><span class="line">email = email@example.com</span><br></pre></td></tr></table></figure><p>这样，我们便给这个项目仓库指定了用户名与邮箱。</p><h1 id="将自己的文件添加至仓库"><a href="#将自己的文件添加至仓库" class="headerlink" title="将自己的文件添加至仓库"></a>将自己的文件添加至仓库</h1><p>这时，我们的仓库已经建立完成。我们可以现在建立文件并且添加至库中。首先，我们需要在<mark class="hl-label red">主文件夹目录下</mark> 创建我们的项目。我们在这里创建一个<strong><em>readme.txt</em></strong>并在其中输入以下内容：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Git is a version control system.</span><br><span class="line">Git is free software.</span><br></pre></td></tr></table></figure><p>第一步，我们用如下指令将文件添加到仓库：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git add readme.txt</span><br></pre></td></tr></table></figure><p>此时没有任何提升，便代表我们已经成功提交了</p><p>第二步，我们用如下指令将文件提交至仓库：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ git commit -m&quot;wrote a readme file&quot;</span><br><span class="line"></span><br><span class="line">[master (root-commit) ed42ada] wrote a readme file</span><br><span class="line"><span class="number">1</span> file changed, <span class="number">2</span> insertions(+)</span><br><span class="line">create <span class="built_in">mode</span> <span class="number">100644</span> readme.txt</span><br></pre></td></tr></table></figure><p>这里解释一下，<strong><em>-m</em></strong>后是本次提交的说明，这样你就能从历史记录里方便地找到改动记录。</p><p>我们发现，这两个命令似乎都是提交，那是不是有点多此一举？显然不是，<strong><em>git add</em></strong>命令可以多次添加文件，而<strong><em>git commit</em></strong>则可以一次提交多个文件，相当于一次版本改动，我需要修改多个文件，各个修改文件的提交都是由<strong><em>git add</em></strong>命令添加，最终用<strong><em>git commit</em></strong>命令完成一次版本的改动。</p><h1 id="修改一次文件"><a href="#修改一次文件" class="headerlink" title="修改一次文件"></a>修改一次文件</h1><p>首先，我们将我们建立的txt文件修改如下：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Git is a distributed version control system.</span><br><span class="line">Git is free software.</span><br></pre></td></tr></table></figure><p>这时，我们输入以下指令，来检查工作区状态：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">$ git ststus</span><br><span class="line"></span><br><span class="line">On branch master</span><br><span class="line">Changes <span class="keyword">not</span> staged <span class="keyword">for</span> commit:</span><br><span class="line">  (use &quot;git add &lt;file&gt;...&quot; to update what will be committed)</span><br><span class="line">  (use &quot;git <span class="built_in">restore</span> &lt;file&gt;...&quot; to discard changes <span class="keyword">in</span> working directory)</span><br><span class="line"><span class="function">        modified:   <span class="title">readme.txt</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">no</span> <span class="title">changes</span> <span class="title">added</span> <span class="title">to</span> <span class="title">commit</span> (<span class="title">use</span> &quot;<span class="title">git</span> <span class="title">add</span>&quot; <span class="title">and</span>/<span class="title">or</span> &quot;<span class="title">git</span> <span class="title">commit</span> -<span class="title">a</span>&quot;)</span></span><br></pre></td></tr></table></figure><p>上面的命令输出告诉我们，<strong><em>readme.txt</em></strong>被修改过了，但还没有准备提交的修改。如果这时我们想查看改文件究竟如何被修改呢？可以输入如下指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">$ git diff</span><br><span class="line"></span><br><span class="line">diff --git a/readme.txt b/readme.txt</span><br><span class="line">index d8036c1..<span class="number">013</span>b5bc <span class="number">100644</span></span><br><span class="line">--- a/readme.txt</span><br><span class="line">+++ b/readme.txt</span><br><span class="line">@@ -<span class="number">1</span>,<span class="number">2</span> +<span class="number">1</span>,<span class="number">2</span> @@</span><br><span class="line">-Git is a version control system.</span><br><span class="line">+Git is a distributed version control system.</span><br><span class="line"> Git is free software.</span><br><span class="line">\ No newline <span class="built_in">at</span> end of file</span><br></pre></td></tr></table></figure><p>可以从上面的命令输出看到，我们在第一行添加了一个distributed单词。知道了对<strong><em>readme.txt</em></strong>作了什么修改后，再把它提交到仓库就放心多了，提交修改和提交新文件是一样的两步，第一步是：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git add readme.txt</span><br></pre></td></tr></table></figure><p>这时，我们再输入<strong><em>git status</em></strong>看看当前仓库状态：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">$ git status</span><br><span class="line"></span><br><span class="line">On branch master</span><br><span class="line">Changes to be committed:</span><br><span class="line">  (use &quot;git <span class="built_in">restore</span> --staged &lt;file&gt;...&quot; to unstage)</span><br><span class="line"><span class="function">        modified:   <span class="title">readme.txt</span></span></span><br><span class="line"><span class="function"></span></span><br></pre></td></tr></table></figure><p>git status告诉我们，将要被提交的修改包括<strong><em>readme.txt</em></strong>，下一步，就可以放心地提交了：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git commit -m&quot;add distributed&quot;</span><br><span class="line"></span><br><span class="line">[master <span class="number">3</span>ea9a2c] add distributed</span><br><span class="line"> <span class="number">1</span> file changed, <span class="number">1</span> insertion(+), <span class="number">1</span> deletion(-)</span><br></pre></td></tr></table></figure><p>提交后，我们再用命令看看仓库的当前状态：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git status</span><br><span class="line"></span><br><span class="line">On branch master</span><br><span class="line">nothing to commit, working <span class="built_in">tree</span> clean</span><br></pre></td></tr></table></figure><p>Git告诉我们当前没有需要提交的修改，而且，工作目录是干净（working tree clean）的。</p><h1 id="版本回退"><a href="#版本回退" class="headerlink" title="版本回退"></a>版本回退</h1><p>在此之前，我们再次修改一下文件，并且再次提交：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Git is a distributed version control system.</span><br><span class="line">Git is free software distributed under the GPL.</span><br></pre></td></tr></table></figure><p>这时就像我们打游戏存档一般，我们每次修改之后都提交了一次，到目前为止我们的版本迭代了几次呢？我们可以输入以下指令来查询：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">$ git log</span><br><span class="line"></span><br><span class="line">commit <span class="number">48675</span>df794edcb40b217c57ba978779411834462 (HEAD -&gt; master)</span><br><span class="line"><span class="function">Author: <span class="title">Motherlesssss</span> &lt;1169153079@<span class="title">qq.com</span>&gt;</span></span><br><span class="line"><span class="function"><span class="title">Date</span>:   <span class="title">Fri</span> <span class="title">Nov</span> 25 23:32:45 2022 +0800</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function">    <span class="title">append</span> <span class="title">GPL</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">commit</span> 68<span class="title">a3c67b2d046e418869ef8bd683053de763595a</span></span></span><br><span class="line"><span class="function"><span class="title">Author</span>: <span class="title">Motherlesssss</span> &lt;1169153079@<span class="title">qq.com</span>&gt;</span></span><br><span class="line"><span class="function"><span class="title">Date</span>:   <span class="title">Fri</span> <span class="title">Nov</span> 25 23:32:16 2022 +0800</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function">    <span class="title">add</span> <span class="title">distributed</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">commit</span> 7218<span class="title">bf93db606e27d824f4d7b86e1e782ae7a0e9</span></span></span><br><span class="line"><span class="function"><span class="title">Author</span>: <span class="title">Motherlesssss</span> &lt;1169153079@<span class="title">qq.com</span>&gt;</span></span><br><span class="line"><span class="function"><span class="title">Date</span>:   <span class="title">Fri</span> <span class="title">Nov</span> 25 23:31:35 2022 +0800</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function">    <span class="title">wrote</span> <span class="title">a</span> <span class="title">readme</span> <span class="title">file</span></span></span><br></pre></td></tr></table></figure><p>这时我们可以看到我们有三次修改记录。这里值得一提的是，这里的<strong><em>commit</em></strong>后的便是自动生成的版本号，为十六进制。</p><p>首先我们必须要知道，在<strong><em>Git</em></strong>中，用<strong><em>HEAD</em></strong>表示当前版本，也就是最新的提交<strong><em>48675df794...</em></strong>（注意我的提交ID和你的肯定不一样），上一个版本就是<strong><em>HEAD^</em></strong>，上上一个版本就是<strong><em>HEAD^^</em></strong>，当然往上100个版本写100个^比较容易数不过来，所以写成<strong><em>HEAD~100</em></strong></p><div class="note danger simple"><p>这里我们要注意，在终端中输入<strong><em>git log</em></strong>后终端可能会出现下图的情况：</p></div><img src ="https://pic4.zhimg.com/80/v2-7df993299642b756b363790dad10d88b_1440w.webp"><p>不必慌张，我们只需输入<mark class="hl-label red">q</mark> ，即可解决这个问题</p><p>现在。我们要退回上一个版本，可以输入以下指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git reset --hard HEAD^</span><br><span class="line"></span><br><span class="line">HEAD is now <span class="built_in">at</span> <span class="number">68</span>a3c67 add distributed</span><br></pre></td></tr></table></figure><p>这时我们可以发现，我们的文件已经变成了：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Git is a distributed version control system.</span><br><span class="line">Git is free software.</span><br></pre></td></tr></table></figure><p>恭喜，这时候我们已经成功还原，不过且慢，我们先来检查一下版本库的状态：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">$ git log</span><br><span class="line"></span><br><span class="line">commit <span class="number">68</span>a3c67b2d046e418869ef8bd683053de763595a (HEAD -&gt; master)</span><br><span class="line"><span class="function">Author: <span class="title">Motherlesssss</span> &lt;1169153079@<span class="title">qq.com</span>&gt;</span></span><br><span class="line"><span class="function"><span class="title">Date</span>:   <span class="title">Fri</span> <span class="title">Nov</span> 25 23:32:16 2022 +0800</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function">    <span class="title">add</span> <span class="title">distributed</span></span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function"><span class="title">commit</span> 7218<span class="title">bf93db606e27d824f4d7b86e1e782ae7a0e9</span></span></span><br><span class="line"><span class="function"><span class="title">Author</span>: <span class="title">Motherlesssss</span> &lt;1169153079@<span class="title">qq.com</span>&gt;</span></span><br><span class="line"><span class="function"><span class="title">Date</span>:   <span class="title">Fri</span> <span class="title">Nov</span> 25 23:31:35 2022 +0800</span></span><br><span class="line"><span class="function"></span></span><br><span class="line"><span class="function">    <span class="title">wrote</span> <span class="title">a</span> <span class="title">readme</span> <span class="title">file</span></span></span><br></pre></td></tr></table></figure><p>我们会发现，我们最新的那个版本已经不见了。但是这时我们后悔了，想要复原怎么办？不要着急。如果我们此时终端还在，你就可以顺着往上找啊找啊，找到那个<strong><em>append GPL</em></strong>的<strong><em>commit id</em></strong>是<strong><em>48675df7...</em></strong>，于是就可以指定回到未来的某个版本：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git reset --hard <span class="number">48675</span>df7</span><br><span class="line"></span><br><span class="line">HEAD is now <span class="built_in">at</span> <span class="number">48675</span>df <span class="built_in">append</span> GPL</span><br></pre></td></tr></table></figure><p>版本号不需写全，只要前几位，<strong><em>Git</em></strong>会自动帮你匹配，当然要多几位，否则出现重复，就无法判断究竟是哪一个了。这时候我们看，我们的文件已经还原啦：</p><figure class="highlight txt"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Git is a distributed version control system.</span><br><span class="line">Git is free software distributed under the GPL.</span><br></pre></td></tr></table></figure><p>当然，如果此时你退回到了某个版本，但是过了几天后你反悔了，此时你无法找到新版本的<strong><em>commit id</em></strong>，这时候也不要慌，我们输入一下指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">$ git reflog</span><br><span class="line"></span><br><span class="line"><span class="number">48675</span>df (HEAD -&gt; master) HEAD@&#123;<span class="number">0</span>&#125;: reset: moving to <span class="number">48675</span>df7</span><br><span class="line"><span class="number">68</span>a3c67 HEAD@&#123;<span class="number">1</span>&#125;: reset: moving to HEAD^</span><br><span class="line"><span class="number">48675</span>df (HEAD -&gt; master) HEAD@&#123;<span class="number">2</span>&#125;: commit: <span class="built_in">append</span> GPL</span><br><span class="line"><span class="number">68</span>a3c67 HEAD@&#123;<span class="number">3</span>&#125;: commit: add distributed</span><br><span class="line"><span class="number">7218</span>bf9 HEAD@&#123;<span class="number">4</span>&#125;: commit: wrote a readme file</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>就如我们看到一般，我们要恢复某个版本，就必须找到对应的<strong><em>commit id</em></strong>，而<strong><em>Git</em></strong>提供<strong><em>git reflog</em></strong>命令，来记录你的每一次命令。这时我们可以看到，<strong><em>append GPL</em></strong>的<strong><em>commit id</em></strong>是<strong><em>48675df</em></strong>。有了对应的<strong><em>commit id</em></strong>，我们便可以回到我们指定的版本啦！</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前言：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;</summary>
      
    
    
    
    <category term="Git" scheme="http://www.messi.ltd/categories/Git/"/>
    
    
    <category term="git" scheme="http://www.messi.ltd/tags/git/"/>
    
  </entry>
  
  <entry>
    <title>关于日本2-1德国之后的一些随想</title>
    <link href="http://www.messi.ltd/posts/15d1eb56.html"/>
    <id>http://www.messi.ltd/posts/15d1eb56.html</id>
    <published>2022-11-24T07:27:45.000Z</published>
    <updated>2022-11-24T10:51:58.593Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><h1 id="一些感慨"><a href="#一些感慨" class="headerlink" title="一些感慨"></a>一些感慨</h1><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作为中立球迷，今天全程看完了德国队和日本队的比赛，感慨良多。  虽然说实话，不是很喜欢日本这个国家，但是不得不说，这一支日本队真的让人难以吝啬自己的赞美。他们用自己的表现告诉世界，黄种人是可以踢好足球的！ 虽然我们都在为亚洲之光骄傲，但是作为一个中国人，内心更多的，我想是一种羡慕 一种嫉妒。当日本的球员早已布满世界五大联赛之时 我们却只有武磊能拿得出手。当日本高中联赛决赛万人空巷的时候 我们国家的职业联赛甚至一度停摆。当日本青训的努力终于显示出成效的时候，我们却还在投机取巧，想着怎么规划国外的球员….上帝不会辜负任何人的努力。今天日本2-1击败德国，就是最好的证明。  他们的技战术 他们的战术执行力 他们的韧性 ….无一不让我们汗颜 当年对比利时的淘汰赛，当日本举国反思那魔鬼一般的14秒时 他们就已经赢了。 </p> <img src="https://bdimg6.qunliao.info/fastdfs6/M00/22/59/rBUESWN-omWAEO_bAAEtNG68gfM849.jpg"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日本很早就定下了2050年的目标：承办世界杯 并夺取冠军。当时有多少人在嘲笑？而现在呢？日本女足早已夺得世界杯冠军，男足稳步发展 他们不仅敢“做梦” 他们更是追梦人…</p>他们为了这个目标究竟付出了多少努力呢？<h1 id="日本联赛发展史"><a href="#日本联赛发展史" class="headerlink" title="日本联赛发展史"></a>日本联赛发展史</h1><div class="timeline "><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>1966</p></div></div><div class='timeline-item-content'><p>日本各地域联赛和都道府县联赛陆续开展，直至今日，这一联赛系统还保留着。</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>1968</p></div></div><div class='timeline-item-content'><p>日本队再一次出现在了墨西哥奥运会的赛场上，在传奇射手釜本邦茂的率领下，日本队奇迹般地获得了季军。而釜本邦茂不仅在当届奥运会荣膺射手王，也因其在绿茵场上的贡献最终成为了日本参议院的议员。</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>1976</p></div></div><div class='timeline-item-content'><p>日本青少年球员训练中心体系正式起步，由日本足协直接主管，主要分为地区训练中心和都道府县训练中心。并于1980年正式开始开展训练活动。<br>同年，足球漫画《足球小将》问世，一下子扩大了足本青少年足球人口的数量。正是通过这部漫画，中田英寿、中村俊辅、川口能活等球员立志于像大空翼一样冲出亚洲、走向世界。</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>1980年代</p></div></div><div class='timeline-item-content'><p>长期由企业队主导的日本各级别联赛依然在较低水平徘徊。直到1984年的麒麟杯邀请赛，日本足球才历史上第一次战胜中国队。<br>在80年代末，为了提升日本足球的水准，为日本国内那些有天赋有的</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>1989</p></div></div><div class='timeline-item-content'><p>日本足协分别成立了日本职业足球联赛筹备小组、日本职业足球联赛筹备委员会对现有的日本联赛进行现状分析，并且对其他国家职业联赛的模式、对所要创设的职业联赛构思、参加职业联赛团体的条件等进行全方位的调查研究，并对创设职业联赛的事宜进行具体操作。</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>1991</p></div></div><div class='timeline-item-content'><p>发表职业联赛的正式名称，即“日本职业足球联赛”（J联赛），并确立了组织机构、加盟队数、比赛机制等。</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>1993</p></div></div><div class='timeline-item-content'><p>J联赛登上了历史舞台</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>截止2020</p></div></div><div class='timeline-item-content'><p>J联赛成功建成了“职业联赛-JFL联赛-业余联赛”的二级七层金字塔制度<br>日本境内共有26590支足球队<br>经过近30年的发展，J联赛已经成为前国际足联主席布拉特口中“亚洲最成功的职业联赛”。</p></div></div></div>(引自懂球号作者:JekyllHyde)<p>从这里我们不难看出，日本的联赛发展也是整个日本足球发展的缩影-脚踏实地。<br>看似平庸，可这也恰恰是尊重足球规律的发展路径。反观我们国家的职业联赛，是否已经迷失在了商业化的温柔乡中…当日本球员遍布五大联赛之时，我们却一度联赛停摆…我们的武磊<br>依然饱受争议…我想，我们是否太过浮躁，我们是否应该静下心来，仔细的，认真的，脚踏实地，去发展呢？</p><h1 id="《日本足协2005宣言》"><a href="#《日本足协2005宣言》" class="headerlink" title="《日本足协2005宣言》"></a>《日本足协2005宣言》</h1><h2 id="提出背景"><a href="#提出背景" class="headerlink" title="提出背景"></a>提出背景</h2><p>1988年，川渊三郎加入日本足协，谈起刚工作时的目标，川渊三郎说：“当时人们对日本足球不抱希望了，因为我们太弱了。我想做的事情就是能让人们对足球感兴趣。”<br>川渊三郎开始计划在日本国内筹办职业足球联赛，1993年，日本职业联赛（J联赛）诞生，可这一年，日本足球遭遇“多哈悲剧”——在世界杯亚洲区预选赛最后一场比赛中，只要战胜伊拉克，日本就可以 晋级世界杯。可惜比赛结束前日本被追平，2∶2的比分让他们哭着回家。<br>3年后，川渊三郎推出了一份雄心万丈的“百年规划”。  </p><h2 id="规划内容"><a href="#规划内容" class="headerlink" title="规划内容"></a>规划内容</h2><div class="timeline "><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>2015</p></div></div><div class='timeline-item-content'><p>成为世界前10的足协，足球人口500万人（球员及其家庭、足球工作者、注册的球迷），球队进入世界前十</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>2050</p></div></div><div class='timeline-item-content'><p>足球人口1000万，占日本总人口10%，再举办一次世界杯并获得冠军。</p></div></div></div><p>刚刚提出的时候，国内嘲笑一片。毕竟那时候谁会相信，那一支1984年才第一次战胜中国队的日本队，会实现这个目标？<br>但是我们现在来看，早在2011年，日本女足早已夺得世界杯冠军。男足旅欧人员已达惊人的451人…我想，30年的时间，足以完成这个看似不可能的漫画中的目标…<br><img src="https://bdimg6.qunliao.info/fastdfs6/M00/22/5B/rBUESWN-oreAOV7KAARK2L8VHwE047.png"></p><h1 id="结"><a href="#结" class="headerlink" title="结"></a>结</h1><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里只是一些个人的想法，一些资料也是引自懂球号作者:JekyllHyde。这场比赛真的很精彩，这是属于亚洲的骄傲。但是当我们浅显的看完这些资料之后，更多的，我想，还是对国足的反思。我们究竟需要什么，我们应该怎么干，我想，有时我们这个略显“卑鄙”的邻国，确实能够给我们一些启发吧...]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;
&lt;h1 id=&quot;一些感慨&quot;&gt;&lt;a href=&quot;#一些感慨&quot; class=&quot;headerl</summary>
      
    
    
    
    <category term="随笔" scheme="http://www.messi.ltd/categories/%E9%9A%8F%E7%AC%94/"/>
    
    
    <category term="足球" scheme="http://www.messi.ltd/tags/%E8%B6%B3%E7%90%83/"/>
    
    <category term="吐槽" scheme="http://www.messi.ltd/tags/%E5%90%90%E6%A7%BD/"/>
    
  </entry>
  
  <entry>
    <title>爬虫-urllib爬取猫眼电影信息</title>
    <link href="http://www.messi.ltd/posts/47402b14.html"/>
    <id>http://www.messi.ltd/posts/47402b14.html</id>
    <published>2022-11-17T07:45:23.000Z</published>
    <updated>2023-02-19T07:02:30.704Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：风雨无组所有成员 (<em>^▽^</em>)</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言：</strong></p><p>本文全程记录“数据采集技术”这门课的一份小组作业的实现过程，包括选题，数据爬取与数据分析，这是所有“风雨无组”小组成员的努力成果(*^▽^*)</p></blockquote><h1 id="一-选题背景及意义"><a href="#一-选题背景及意义" class="headerlink" title="一.选题背景及意义"></a>一.选题背景及意义</h1><ul>    <li><h2><strong>1.1背景：</strong></h2>    <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;随着经济和科技的日益发展，给人们的物质生活带来了极大的变化的同时也使人们对精神方面的消费需求愈发提高。电影产业作为文化产业的核心组成部分，已成为人们生活中不可或缺的一种娱乐方式，不仅仅是对文化领域有着重要的影响，更成为促进经济发展的强大动力。在计算机网络覆盖全球的今天，文化与经济两大主体早就脱离了互不干涉、没有交集的情况，而文化产业也正在逐渐发展成为影响世界经济发展的重要部分。在短短一百多年的时间里，电影产业不断地发展壮大，现在它早就凭借着其特殊的魅力和巨大的吸引力成为推动国民经济迅速增长的产业之一。中国自从改革开放以来一直始终坚持与世界接轨，紧跟世界发展潮流，在改革中打破原有的经济体制并成功研究出符合中国的特殊国情的社会主义市场经济体制，这也是我国的电影产业随之开始向市场化转变最重要的政治基础。我国影视行业发展迅速,成为全球第二大电影市场,同时也是增长最快的市场之一。据中国新闻出版广电总局调查显示,2017年全国电影总票房已经超过550亿，这说明中国电影产业有着良好的发展前景。</p></li>    <li><h2><strong>1.2前言：</strong></h2>    <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;研究中国电影的现状和存在的问题，有利于分析出我国电影产业发展的优势与劣势，找出其他国家电影发展有利方法加以借鉴从而推动电影产业的快速发展，最为重要的是有利于抵御外来电影大片的带来的文化和经济冲击，有利于中华传统文化的传承与延续和社会经济的发展。而票房反映了一部电影的商业效益，对后续电影拍摄计划和方向有着重大影响，也是衡量一部电影是否盈利与是否成功的重要指标。然而，国产电影只有极少数是盈利的，70%的国产电影都面临亏损，高投入低票房低收益的电影案例也屡见不鲜,如2016年上映的《封神传奇》斥资5亿,却只收获2.84亿的票房。因此，对电影票房的有效分析将有利于降低电影投资市场的风险，对电影投资、制作及营销各个阶段都有着重要的指导性意义。而目前国内电影票房的研究还处在经验分析阶段，依赖于专家判断，缺乏数据技术支撑。为引导电影产业的理性决策，对电影票房的数据分析显得尤为必要。</p></li></ul># 二.获取目标数据## 2.1：目标网站分析### 2.1.1：获取来源<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小组将主要从猫眼电影（https://www.maoyan.com）获取数据。猫眼电影是美团旗下的一家集媒体内容、在线购票、用户互动社交、电影衍生品销售等服务的一站式电影互联网平台。2015年6月，猫眼电影覆盖影院超过4000家，这些影院的票房贡献占比超过90%。猫眼占网络购票70%的市场份额，每三张电影票就有一张出自猫眼电影，是影迷下载量较多、使用率较高的电影应用软件。同时，猫眼电影为合作影院和电影制片发行方提供覆盖海量电影消费者的精准营销方案，助力影片票房。2015年上半年，猫眼电影交易额达60亿，超过2014年全年。</p>### 2.1.2：目标数据<p>小组将爬取豆瓣近五年来每年评分排名前90的电影，并爬取这些电影的名字、类型、评论等相关数据。</p><ul>    <li><p><strong>时间跨度：</strong></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小组爬取豆瓣近五年来的数据，充分考虑到了时代变化的因素，可以跳脱出获取数据时的静态局限，进一步反映出观众对电影的偏好的动态变化，从而可以帮助预测未来电影行业的趋势、发展。</p></li>    <li><p><strong>评分：</strong><p></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;电影的评分往往与电影的质量、观众的喜爱程度有着密不可分的正相关的关系，对电影评分排名的爬取可以从宏观上帮助小组初步筛选出更符合观众观影偏好的高质量电影。</p></li>    <li><p><strong>类型：</strong><p></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;电影的受喜爱程度是否和它所属类型有关？观众喜爱的电影类型是否正在发生变化？对哪种的投资拍摄更容易吸引到更多观众？对电影类型的爬取可以帮助小组探索这个问题的答案。</p></li>    <li><p><strong>评论：</strong><p></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;电影的评论可以直观、详细、真实地反映观众对于电影的评价。这些评论中往往会反复出现一些关于这些电影的关键词，精准地找出这些关键词可以帮助小组进一步细化、筛选出电影中影响观众喜爱程度的因素。</p></li></ul>### 2.1.3：网页源码分析<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们首先进入<a href="https://www.maoyan.com">猫眼官网</a>,根据我们的数据获取要求，我们进入<a href="https://www.maoyan.com/films?showType=3&sortId=3">如下界面:</a><img src="https://pic1.zhimg.com/80/v2-82f3146e98725ddf7be392e61f5eba88_1440w.webp"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这时，我们右击检查，开始定位我们需要的数据类型，我们发现在一级页面中，网页源码中只包含了电影名称、评分，他们的位置路径如下图：<img src="https://pic2.zhimg.com/80/v2-0a6bce2f6a976d5f11e1db263c6117fd_1440w.webp"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;紧接着，我们发现我们剩下的数据，例如：类型、评论等，在二级页面，我们仔细观察后，在如下位置发现了可以用于拼接二级页面的规则编号，位置如下：</p><img src="https://pic2.zhimg.com/80/v2-43e0695970fa332296198ff46eef92e1_1440w.webp"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;到此为止，我们已经完成了对网页源码的分析，接下来，就要进入代码实现阶段啦(*^▽^*)</p>## 2.2：Python爬虫代码实现### 2.2.1：Python库准备<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在本次实现中，我们用到了如下几个库：</p><ul>    <li><p><strong>urllib：</strong></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;它是 Python 内置的 HTTP 请求库，也就是说我们不需要额外安装即可使用，它包含四个模块：</p>    <ul>        <li>第一个模块 request，它是最基本的 HTTP 请求模块，我们可以用它来模拟发送一请求，就像在浏览器里输入网址然后敲击回车一样，只需要给库方法传入 URL 还有额外的参数，就可以模拟实现这个过程了。</li>        <li>第二个 error 模块即异常处理模块，如果出现请求错误，我们可以捕获这些异常，然后进行重试或其他操作保证程序不会意外终止。</li>        <li>第三个 parse 模块是一个工具模块，提供了许多 URL 处理方法，比如拆分、解析、合并等等的方法。</li>        <li>第四个模块是 robotparser，主要是用来识别网站的 robots.txt 文件，然后判断哪些网站可以爬，哪些网站不可以爬的，其实用的比较少。。</li>    </ul></li>    <li><p><strong>lxml：</strong></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lxml是python的一个解析库，支持HTML和XML的解析，支持XPath解析方式，而且解析效率非常高。</p></li>    <li><p><strong>xlwt：</strong></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以实现对excle的读写</p></li></ul>### 2.2.2：Python代码实现<p><strong>注释中包含了url规律分析</strong></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#2022</span></span><br><span class="line"><span class="comment">#https://www.maoyan.com/films?yearId=17&amp;showType=3&amp;sortId=3</span></span><br><span class="line"><span class="comment">#https://www.maoyan.com/films?yearId=17&amp;showType=3&amp;sortId=3&amp;offset=30</span></span><br><span class="line"><span class="comment">#https://www.maoyan.com/films?yearId=17&amp;showType=3&amp;sortId=3&amp;offset=60</span></span><br><span class="line"><span class="comment">#https://www.maoyan.com/films?yearId=17&amp;showType=3&amp;sortId=3&amp;offset=90</span></span><br><span class="line"><span class="comment">#2021</span></span><br><span class="line"><span class="comment">#https://www.maoyan.com/films?yearId=16&amp;showType=3&amp;sortId=3</span></span><br><span class="line"><span class="comment">#https://www.maoyan.com/films?yearId=16&amp;showType=3&amp;sortId=3&amp;offset=30</span></span><br><span class="line"><span class="comment">#https://www.maoyan.com/films?yearId=16&amp;showType=3&amp;sortId=3&amp;offset=60</span></span><br><span class="line"><span class="comment">#https://www.maoyan.com/films?yearId=16&amp;showType=3&amp;sortId=3&amp;offset=90</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#url规律为：</span></span><br><span class="line"><span class="comment">#基础url=https://www.maoyan.com/films? 加上yearID=年份-2005 加上showType=3&amp;sortId=3&amp;offset=(页码-1)*30</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#//*[@id=&quot;app&quot;]/div/div[2]/div[2]/dl//dd//div[1]/a/@href 二级页面的url</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">from</span> lxml <span class="keyword">import</span> etree</span><br><span class="line"><span class="keyword">import</span> urllib.parse</span><br><span class="line"><span class="keyword">import</span> urllib.request</span><br><span class="line"><span class="keyword">import</span> xlwt</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">creat_request</span>(<span class="params">page,year</span>):</span><br><span class="line">   <span class="comment">#定制url，方便循环</span></span><br><span class="line">   <span class="keyword">if</span> page == <span class="number">1</span>:</span><br><span class="line">      url = <span class="string">&#x27;https://www.maoyan.com/films?yearId=&#x27;</span>+<span class="built_in">str</span>(year-<span class="number">2005</span>)+<span class="string">&#x27;&amp;showType=3&amp;sortId=3&#x27;</span></span><br><span class="line">   <span class="keyword">else</span>:</span><br><span class="line">      url = <span class="string">&#x27;https://www.maoyan.com/films?yearId=&#x27;</span>+<span class="built_in">str</span>(year-<span class="number">2005</span>)+<span class="string">&#x27;&amp;showType=3&amp;sortId=3&#x27;</span>+<span class="string">&#x27;&amp;offset=&#x27;</span>+<span class="built_in">str</span>((page-<span class="number">1</span>)*<span class="number">30</span>)</span><br><span class="line">  </span><br><span class="line">   headers = &#123;</span><br><span class="line">    <span class="string">&#x27;Cookie&#x27;</span>: <span class="string">&#x27;uuid_n_v=v1; uuid=9A24E0F0631311EDBF6151208720BA007113D57EEFF04C3CA640F73319AF072A; _csrf=4d7ff24790b2c392970278265e244e3534b30e30b8da2dfd29d8c4a819f05503; Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1668317137; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; _lxsdk_cuid=1846f734a21c8-01b03943f3297b-26021f51-190140-1846f734a21c8; _lxsdk=9A24E0F0631311EDBF6151208720BA007113D57EEFF04C3CA640F73319AF072A; Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1668321628; __mta=148124936.1668317137787.1668321468086.1668321627622.19; _lxsdk_s=1846fb47f87-f6f-621-be8%7C%7C5&#x27;</span>,</span><br><span class="line">   </span><br><span class="line">   <span class="string">&#x27;User-Agent&#x27;</span>: <span class="string">&#x27;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36&#x27;</span></span><br><span class="line">   &#125;</span><br><span class="line"></span><br><span class="line">   request = urllib.request.Request(url=url,headers=headers)</span><br><span class="line"></span><br><span class="line">   <span class="keyword">return</span> request</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">get_content</span>(<span class="params">request</span>):</span><br><span class="line">    response = urllib.request.urlopen(request)</span><br><span class="line">    <span class="comment">#用于检查报错</span></span><br><span class="line">    a = response.getcode() <span class="comment">#返回状态码 200则逻辑无误</span></span><br><span class="line"></span><br><span class="line">    content = response.read().decode(<span class="string">&#x27;utf-8&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> content</span><br><span class="line">    </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">name_list</span>(<span class="params">content</span>):</span><br><span class="line">   </span><br><span class="line">    tree = etree.HTML(content)</span><br><span class="line">    <span class="comment">#Xpath解析源码</span></span><br><span class="line">    jieguo1 = tree.xpath(<span class="string">&#x27;//*[@id=&quot;app&quot;]/div/div[2]/div[2]/dl//dd/div[2]/@title&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> jieguo1</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">score_list</span>(<span class="params">content</span>):</span><br><span class="line">   </span><br><span class="line">    tree = etree.HTML(content)</span><br><span class="line"></span><br><span class="line">    score = tree.xpath(<span class="string">&#x27;//*[@id=&quot;app&quot;]/div/div[2]/div[2]/dl//dd/div[3]//i/text()&#x27;</span>)</span><br><span class="line"></span><br><span class="line">    score_1 = score[::<span class="number">2</span>]</span><br><span class="line">    </span><br><span class="line">    score_2 = score[<span class="number">1</span>::<span class="number">2</span>]</span><br><span class="line">    </span><br><span class="line">    jieguo2 = [p + q <span class="keyword">for</span> p,q <span class="keyword">in</span> <span class="built_in">zip</span>(score_1,score_2) ]</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> jieguo2</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">url2_list</span>(<span class="params">content1</span>):</span><br><span class="line"></span><br><span class="line">    tree = etree.HTML(content1)</span><br><span class="line"></span><br><span class="line">    url_list = tree.xpath(<span class="string">&#x27;//*[@id=&quot;app&quot;]/div/div[2]/div[2]/dl//dd//div[1]/a/@href&#x27;</span>)</span><br><span class="line">    <span class="comment">#拼接二级页面的url，为访问二级页面做准备</span></span><br><span class="line">    url3 = [<span class="string">&#x27;https://www.maoyan.com&#x27;</span>+ <span class="built_in">str</span>(url2) <span class="keyword">for</span> url2 <span class="keyword">in</span> url_list]</span><br><span class="line"></span><br><span class="line">        </span><br><span class="line">    <span class="keyword">return</span> url3</span><br><span class="line"></span><br><span class="line"><span class="keyword">def</span> <span class="title function_">save_outcome</span>(<span class="params">name,score,url3,year,page</span>):</span><br><span class="line"></span><br><span class="line">    f = xlwt.Workbook(<span class="string">&#x27;encoding = utf-8&#x27;</span>) <span class="comment">#设置工作簿编码</span></span><br><span class="line">    </span><br><span class="line">    sheet1 = f.add_sheet(<span class="string">&#x27;1&#x27;</span>) <span class="comment">#创建sheet工作表</span></span><br><span class="line">    </span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">30</span>):</span><br><span class="line">        </span><br><span class="line">        sheet1.write(i,<span class="number">0</span>,name[i]) <span class="comment">#写入数据参数对应 行, 列, 值</span></span><br><span class="line">        </span><br><span class="line">        sheet1.write(i,<span class="number">1</span>,score[i])</span><br><span class="line"></span><br><span class="line">        sheet1.write(i,<span class="number">2</span>,url3[i])</span><br><span class="line">    </span><br><span class="line">    f.save(<span class="built_in">str</span>(year)+<span class="string">&#x27;-&#x27;</span>+<span class="built_in">str</span>(page)+<span class="string">&#x27;.xls&#x27;</span>)<span class="comment">#保存.xls到当前工作目录</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="comment">#程序的入口</span></span><br><span class="line"><span class="keyword">if</span> __name__ == <span class="string">&#x27;__main__&#x27;</span>:</span><br><span class="line">    start_page = <span class="built_in">int</span>(<span class="built_in">input</span>(<span class="string">&#x27;请输入起始的页码&#x27;</span>))</span><br><span class="line">    end_page = <span class="built_in">int</span>(<span class="built_in">input</span>(<span class="string">&#x27;请输入结束的页码&#x27;</span>))</span><br><span class="line">    year = <span class="built_in">int</span>(<span class="built_in">input</span>(<span class="string">&#x27;请输入你要爬取的年份&#x27;</span>))</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span> page <span class="keyword">in</span> <span class="built_in">range</span>(start_page,end_page+<span class="number">1</span>):<span class="comment">#range函数左闭右开</span></span><br><span class="line">        <span class="comment">#   每一页都有自己的请求对象的定制</span></span><br><span class="line">        request = creat_request(page,year)</span><br><span class="line"></span><br><span class="line">        <span class="comment">#   获取响应数据 </span></span><br><span class="line">        content1 = get_content(request)</span><br><span class="line">  </span><br><span class="line">        name = name_list(content1)</span><br><span class="line"></span><br><span class="line">        score = score_list(content1)</span><br><span class="line"></span><br><span class="line">        url3 = url2_list(content1)</span><br><span class="line">        </span><br><span class="line">        <span class="comment">#下载，写入excle</span></span><br><span class="line">        save_outcome(name,score,url3,year,page)</span><br><span class="line">        </span><br><span class="line">        <span class="comment">#用于检查程序是否运行正常，若打印[]，这说明ip被暂时封禁，无法获取源码</span></span><br><span class="line">        <span class="built_in">print</span>(name)</span><br><span class="line">        <span class="built_in">print</span>(score)</span><br><span class="line">        <span class="built_in">print</span>(url3)</span><br><span class="line">      </span><br><span class="line"></span><br></pre></td></tr></table></figure><p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;结果实现如下，仅展示一张表格</strong</p><img src="https://pic2.zhimg.com/80/v2-f93969fcd126d1fae6925f1e596ec855_1440w.webp"><h2><strong>2.2.2.1：Python代码实现出现的问题</strong></h2><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在上面的代码结果中，可以看到，我们已经批量获取了2022年评分最高的前30部电影的名字、评分及详细情况的二级页面url。我们想要的评论、类型等数据都存储在二级页面之中，就像这样：</p><img src="https://pic3.zhimg.com/80/v2-9ea3058a0c5bcf8f780b4acbdf7bbdda_1440w.webp"><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本来我的想法已经形成了，既然我们已经获取了二级页面的url，我们可以再写一个函数，用来遍历每一个url，提取信息。想法很简单，但是由于猫眼反爬十分严格，问题频出，包括但不限于：<ul>    <li>如此频繁的访问页面会导致网站识别，被反爬，表现的具体形式即为：返回[]</li>    <li><p>二级页面的数据不在页面源码中，为异步加载，我们在审查是可以定位到，但是获取源码会发现不在源码中，而在审查-网络中可以发现这个文件，如下：</p>    <img src="https://pic3.zhimg.com/80/v2-292988f26bead9a0256b58e34406b312_1440w.webp">    <p>该页面的url不具有规律，我们无法进行批量访问</p></li>    <li>了解到这个问题后，我更换了selenium库进行自动化操作，但是猫眼反爬比较严格，当识别到请求者为selenium后，会拒绝访问</li>    <li><p>利用selenium_Phantomjs进行页面截图，也被识别如下：</p>    <img src="https://pic2.zhimg.com/80/v2-5fa1194c2db3f355fb10aa300a626ec1_1440w.webp"></li>    <li>我尝试了undetected-chromedriver等新的驱动，目前还未成功，所以目前的方案是手动打开批量获取的二级页面进行信息获取。</li></ul><p><strong>注：在日后的学习过程中会继续研究这个问题，比如利用猫眼移动端的url进行爬取，如若可以成功，将会更新在这里。</strong></p># 三.数据分析<p>我们通过爬虫程序搜集了近五年豆瓣电影top90榜的相关资料，如电影名称、上映地区及时间、票房与评分等，并应用数据分析工具制作了以下相关图表。</p><h2 id="1-评分"><a href="#1-评分" class="headerlink" title="1.评分"></a>1.评分</h2><img src="https://pic2.zhimg.com/80/v2-af8849d142d0bae4dafa646eff10ece5_1440w.webp"><p>上表是我们对搜集得来的450条评分数据进行分析所得。由表可知，评分的平均值在8.851，是一个较高的数值，且评分的方差仅有0.187——数据的波动性小，说明近五年豆瓣top前90的电影得到了大多数观众的一致好评。</p><p>除此以外，我们还做了有关评分的散点图与箱型图：</p><img src="https://pic4.zhimg.com/80/v2-dfbcf9d2fba6904aa65b79e9df4fc043_1440w.webp"><img src="https://pic4.zhimg.com/80/v2-e74c154d551c587df59b937182c353d7_1440w.webp"><p>散点图与箱型图更直观地反映了观众们评分分数的集中区间，由两图可见，观众们的评分分数集中在8.5到9.5之间，少数处于7到8.5之间，也再次说明大多数观众对近五年豆瓣top前90的电影给出了一致好评。</p><h2 id="2-指标相关性"><a href="#2-指标相关性" class="headerlink" title="2.指标相关性"></a>2.指标相关性</h2><img src="https://pic4.zhimg.com/80/v2-8717f7cc99987ef51f6ee1191c4572a7_1440w.webp"><p>上表是我们针对已搜集的有关“评分数”、“票房”、“评分”、“时长”这四大指标的数据进行相关性分析所得。由表可知，“评分数”与“票房”这两个指标的相关系数高达0.951，说明两者的相关性极强，即通常票房高的电影，评分数也多，反之亦然。另外，表中各指标的相关系数不存在负值，说明各指标间不存在一方制约另一方的情况。</p><h2 id="3-地区票房统计"><a href="#3-地区票房统计" class="headerlink" title="3.地区票房统计"></a>3.地区票房统计</h2><img src="https://pic3.zhimg.com/80/v2-507209615710787270a1285023428802_1440w.webp"><p>上图是我们对各地区票房数据进行分析所得。由此饼状图可见，在中国香港上映的电影的票房量最多，近乎占据所有票房量的一半，其次是在中国大陆上映的电影，其票房量也占总体的一大部分。但在中国香港、中国大陆、日本、美国以外的地区上映的电影的票房量很少，仅占总体的极小部分，可能因为这些地区的人口较少，或是人们的偏好所致。</p><p>下图以不同的色彩展示了在世界各区域内上映的电影的票房量的差异：</p><img src="https://pic2.zhimg.com/80/v2-ddad2a7a897828342ee4b13469a80d11_1440w.webp"><h2 id="4-电影放映的月份差异"><a href="#4-电影放映的月份差异" class="headerlink" title="4.电影放映的月份差异"></a>4.电影放映的月份差异</h2><img src="https://pic2.zhimg.com/80/v2-6a2491eb155fb30fad3fcaa08507f3a9_1440w.webp"><p>我们对各月份影院电影的放映数进行了数据分析，得到了以上折线图。有图可见，在每年的十二月份，电影的放映数达到峰值，可能与圣诞等一系列节日有关。在三到六月份，电影的放映数整体偏少，可能因为这是各年龄学生们上学的时期。七到九月份的电影放映数整体偏多，可能因为这是各年龄学生们放暑假的时期，在此时期学生们有时间观影。影院可根据此状况，增加在七到九月份上映的电影数量。</p><p>另外还有各月份票房数的饼状图：</p><img src="https://pic4.zhimg.com/80/v2-9159326ee9a1f0044136f6b5a29df517_1440w.webp"><p>可见十月份的电影票房量占整体比重最大，甚至超过整体的半数，究其原因，可能与国庆等节日有关。九月份的电影票房量占比也较多，其余各月份的票房量占比均较小。所以推荐影院在十月或九月多上映电影。</p><h2 id="各类型电影票房差异"><a href="#各类型电影票房差异" class="headerlink" title="各类型电影票房差异"></a>各类型电影票房差异</h2><img src="https://pic3.zhimg.com/80/v2-e3f12c5a68b29a12d610c5c9c71f48b6_1440w.webp"><p>上图是我们对各类型电影的票房量进行数据分析所得。由此饼状图可见，悬疑/动作/犯罪类型的电影最受观众们欢迎，其票房量近乎占总体的一半，其次是剧情/爱情类型的电影。其余各类型的电影的票房占比均较小。所以推荐影院多上映悬疑/动作/犯罪与剧情/爱情类型的电影。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：风雨无组所有成员 (&lt;em&gt;^▽^&lt;/em&gt;)&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前</summary>
      
    
    
    
    <category term="python" scheme="http://www.messi.ltd/categories/python/"/>
    
    
    <category term="python" scheme="http://www.messi.ltd/tags/python/"/>
    
    <category term="爬虫" scheme="http://www.messi.ltd/tags/%E7%88%AC%E8%99%AB/"/>
    
    <category term="urllib" scheme="http://www.messi.ltd/tags/urllib/"/>
    
  </entry>
  
  <entry>
    <title>在同一台电脑上同时部署多个hexo博客</title>
    <link href="http://www.messi.ltd/posts/ac9cf1f1.html"/>
    <id>http://www.messi.ltd/posts/ac9cf1f1.html</id>
    <published>2022-11-09T12:25:33.000Z</published>
    <updated>2023-01-07T15:38:10.920Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言：</strong></p><p>在学习了如何搭建博客有，我便逐渐有了为辩论队搭建网站的想法，但是我发现没有我想象中的那么简单，于是在翻阅了众多大佬的记录后，磕磕绊绊终于成功实现了这个想法，便在此记录一下，供大家参考，也方便我自己以后忘了来看(*^▽^*)</p></blockquote><h1>一、问题来源及解决方法（引）</h1><ul> <li>SSH的公钥是GitHub作为本地仓库和远程仓库连接的唯一标识，一个公钥只能对应一个GitHub账户，如果将一个相同的公钥上传到不同的GitHub账户，GitHub则无法做出辨识，进而导致错误</li> <li>一台电脑，可以生成多对公私钥，可以通过配置，将不同的公钥上传到不同的GitHub账号，那么就不存在单个公钥绑定多个GitHub账号的情况存在了</li></ul><h1>二、解决过程</h1><p><strong>注：接下来建立在你已经完成了博客的部署，参见搭建博客，具体即已然完成至ssh链接之前的步骤</strong></p><h2><strong>创建新密钥</strong></h2><p>首先 在终端中输入以下指令，进入SSH根目录下，来检查已有密钥</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cd ~/.ssh/</span><br></pre></td></tr></table></figure>在这个目录可以看到你现在有的密钥，紧接着，输入以下指令，来创建新的密钥：<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t rsa -f  ~/.ssh/这里是新密钥名称 -C &quot;这里是你的邮箱&quot;</span><br></pre></td></tr></table></figure><p>新密钥的名称不能重复，需要另设一个！</p><h2><strong>配置config文件</strong></h2><p>查看你的.ssh/根路径下, 有没有config文件,没有则在此目录中创建一个config文件（不需要任何后缀！！)</p><p>紧接着，用记事本或者直接用vscode打开这个文件，写入以下配置</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">#第一个账号，默认使用的账号，不用做任何更改</span><br><span class="line">Host github.com</span><br><span class="line">HostName github.com</span><br><span class="line">User git</span><br><span class="line">IdentityFile ~/.ssh/id_rsa</span><br><span class="line"></span><br><span class="line">#第二个新账号，#&quot;xxxxxx&quot;为前缀名，可以任意设置，要记住，后面需要用到</span><br><span class="line">Host xxxxxx.github.com</span><br><span class="line">HostName github.com</span><br><span class="line">User git</span><br><span class="line">IdentityFile ~/.ssh/这里是你创建的新密钥的名称</span><br></pre></td></tr></table></figure><h2><strong>设置新GitHub账户SSH key</strong></h2><p>按照从前的步骤，将新的sshkey添加至你的新Github账户，这里不再赘述</p><h2><strong>清空本地的SSH 缓存，添加新的SSH密钥到SSH agent中</strong></h2><p>在终端中输入以下指令，执行操作</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">ssh-add -D</span><br><span class="line">ssh-add xxxxxx #旧密钥名称，一般是id_rsa</span><br><span class="line">ssh-add xxxxxx #新创建的密钥名称</span><br></pre></td></tr></table></figure><p><strong>注：此操作终端应在ssh根目录下！</strong></p><p>如果这时候出现如下错误：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Could not open a connection to your authentication agent.</span><br></pre></td></tr></table></figure><p>这时你需要在终端输入,问题即可解决：</op><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-agent bash</span><br></pre></td></tr></table></figure><h2><strong>验证配置是否成功</strong></h2><p>依次执行以下命令，第一个为默认ssh_key验证；第二个为新的ssh_key验证，其中“xxxxxx”为你先前在config文件中的命名</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ssh -T git@github.com</span><br><span class="line">ssh -T git@xxxxxxx.github.com</span><br></pre></td></tr></table></figure><p>依次显示以下信息, 则说明配置成功：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Hi 你的用户名! You&#x27;ve successfully authenticated, but GitHub does not provide shell access.</span><br></pre></td></tr></table></figure><h2><strong>取消全局用户名/邮箱配置，单独设置用户名/邮箱</strong></h2><p>在我们第一个博客的设置中，我们不出意外应该设置的是全局变量，所以在这里我们需要取消一下全局配置，输入以下指令：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git config --global --unset user.name</span><br><span class="line">git config --global --unset user.email</span><br></pre></td></tr></table></figure><p>这时，我们需要跳过我们前面教程中的设置用户名环节环节，直接进行部署博客（即第四步），注意，最后一步的 hexo d 不需要输入，如果没有进行这一段操作，你的目录下不会出现下面要用到的. deploy_git 文件夹！！！接下来开始设置单独变量，这是需要进入博客文件.deploy_git文件夹中，设置隐藏文件可见（属性） .git，然后在其中的config文件中加入以下配置：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[user]</span><br><span class="line">    name = yannan</span><br><span class="line">    email = 781369549@qq.com</span><br></pre></td></tr></table></figure><h2><strong>hexo 配置文件修改git地址</strong></h2><p>打开你的第二个博客Hexo目录下的_config.yml文件，找到deploy关键字，写入以下配置并保存：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">deploy:</span><br><span class="line">  type: git</span><br><span class="line">  repository: git@xxxxxx.github.com:你的用户名/你的用户名.github.io.git</span><br><span class="line">  branch: main</span><br></pre></td></tr></table></figure><p><strong>注：这里的配置与之前有些许不同，比如repo的写法，这样写的好处是可以避免部署失败的情况出现，其他别无二致。</strong></p><h1>三、小结</h1><p>到此，问题就解决啦，完美的在电脑上同时部署了多个hexo博客，如果遇到别的报错，大家可以联系我，或者在网上搜寻一下报错的解决方法哦(*^▽^*)</p>    ]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前言：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在</summary>
      
    
    
    
    <category term="博客相关" scheme="http://www.messi.ltd/categories/%E5%8D%9A%E5%AE%A2%E7%9B%B8%E5%85%B3/"/>
    
    
    <category term="blog" scheme="http://www.messi.ltd/tags/blog/"/>
    
  </entry>
  
  <entry>
    <title>生活随笔（会一直更新）</title>
    <link href="http://www.messi.ltd/posts/35945283.html"/>
    <id>http://www.messi.ltd/posts/35945283.html</id>
    <published>2022-10-24T08:36:33.000Z</published>
    <updated>2022-11-24T09:12:15.317Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><div class="timeline "><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>2022-7-11</p></div></div><div class='timeline-item-content'><p>刚刚带了一会我的侄子，他在绘声绘色的描述他怎么在幼儿园拿下了好多好多贴纸，突然很小声和我说：“xxx说要和我结婚”，哈哈哈然后我问他，那你喜欢xxx吗，我居然在一个小班的同志脸上看到了害羞，聊了一会，他奶奶和他说赶紧吃饭 他好朋友xx在楼下等他，小炮还挺开心，蹦蹦跳跳的出去，和我说我好久没有见到xx了。对，我也好久没有见到我的朋友啦。</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>2022-7-16</p></div></div><div class='timeline-item-content'><p>在国服匹配打了一把核子cs，遇到一个高中生，他一直在语音里说话，我嫌他吵关了一会声音，毕竟休闲，我就又打开问他，“你多大了”“高一，准备辍学了”？？“为啥”我很疑惑，他说学不下去，我问他接下来想干啥呢，他说去做b站up主，我心里突然很不是滋味，我发枪给他，他对着其实不是很贵的皮肤大声惊呼，这感觉很奇怪。“你还是继续学下去吧，好歹去大专学个技术”我继续道，“不，学不下去”“你会剪辑吗？你要当up主这个必须要会”“会一点，可我没有电脑…”“……”我良久无言，莫名震撼。很快，比赛结束了，“好好生活”，我对他说。“嗯，我们都想好好生活，也一定能这样，对吗？”，我看着一地鸡毛。</p></div></div><div class='timeline-item'><div class='timeline-item-title'><div class='item-circle'><p>2022-7-31</p></div></div><div class='timeline-item-content'><p>最近实习两周了，这次实习不仅仅是丰富履历，更是一次见识。哈哈，喜欢过的人过的很幸福 有爱的人爱她；生活圈更是我遥不可及的；我是不是该更努力点 找到我自己想要的呢 摆脱一地鸡毛 不只是说说而已 我想 创造自己的生活 </p></div></div></div>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;div class=&quot;timeline &quot;&gt;&lt;div class=&#39;timeline</summary>
      
    
    
    
    <category term="随笔" scheme="http://www.messi.ltd/categories/%E9%9A%8F%E7%AC%94/"/>
    
    
    <category term="一些矫情" scheme="http://www.messi.ltd/tags/%E4%B8%80%E4%BA%9B%E7%9F%AB%E6%83%85/"/>
    
  </entry>
  
  <entry>
    <title>爬虫-scrapy框架介绍及基础指令</title>
    <link href="http://www.messi.ltd/posts/f2c8fa34.html"/>
    <id>http://www.messi.ltd/posts/f2c8fa34.html</id>
    <published>2022-10-11T06:54:08.000Z</published>
    <updated>2022-11-22T14:24:28.749Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言：</strong></p><p>这个学期，博主有一门课叫做“数据采集技术”，于是我在暑假自学的爬虫又开始攻击我了（doge。这篇博客就暂且作为我复习爬虫的开始吧o(╥﹏╥)o，如题所述，接下来就开始scrapy框架的介绍和基础指令！</p></blockquote><p><h1>一.Scrapy框架介绍</h1></p><img src="https://www.wenjiangs.com/wp-content/uploads/2020/02/scrapy-s.jpg"><p><h2>1.简介</h2></p><p>Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架，用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛，可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架，任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类，如BaseSpider、sitemap爬虫等，最新版本又提供了web2.0爬虫的支持。</p><p><h2>2.架构</h2></p><ul> <li><strong>Scrapy Engine(引擎)：</strong><br>负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯，信号、数据传递等。</li> <li><strong>Scheduler(调度器)：</strong><br>它负责接受引擎发送过来的Request请求，并按照一定的方式进行整理排列，入队，当引擎需要时，交还给引擎。</li> <li><strong>Downloader（下载器）：</strong><br>负责下载Scrapy Engine(引擎)发送的所有Requests请求，并将其获取到的Responses交还给Scrapy Engine(引擎)，由引擎交给Spider来处理。</li> <li><strong>Spider（爬虫）：</strong><br>它负责处理所有Responses,从中分析提取数据，获取Item字段需要的数据，并将需要跟进的URL提交给引擎，再次进入Scheduler(调度器)。</li> <li><strong>Item Pipeline(管道)：</strong><br>它负责处理Spider中获取到的Item，并进行进行后期处理（详细分析、过滤、存储等）的地方。</li> <li><strong>Downloader Middlewares（下载中间件）：</strong><br>一个可以自定义扩展下载功能的组件。</li> <li><strong>Spider Middlewares（Spider中间件）：</strong><br>一个可以自定扩展和操作引擎和Spider中间通信的功能组件。</li></ul><p><h3>流程示意图</h3></p><img src="https://tse1-mm.cn.bing.net/th/id/OIP-C.uI4EmDi3NDV4KwCm7PLTJwHaEy?pid=ImgDet&rs=1"><p>博主是在b站尚硅谷自学的scrapy框架，在他的教程中有一张简易化的框架图，我略作优化，放在下面哈，也许会更有助于大家的理解。</p><img src="https://pic2.zhimg.com/80/v2-cafa2676d86bb4020e67b0f178f30025_1440w.webp"><p><h2>3.工作原理</h2></p><ol> <li>引擎向spiders要url</li> <li>引擎将要爬取的url给调度器</li> <li>调度器会将url生成请求对象放入到指定的队列中</li> <li>从队列中出队一个请求</li> <li>引擎将请求交给下载器进行处理</li> <li>下载器发送请求获取互联网数据</li> <li>下载器将数据返回给引擎</li> <li>引擎将数据再次给到spiders</li> <li>spiders通过xpath解析该数据，得到数据或者url</li> <li>spiders将数据或url给到引擎</li> <li>引擎判断该数据是url还是数据，是数据，交给管道（item pipeline）处理，是url交给调度器处理</li></ol><p><h1>二.工具准备</h1></p><p><h2>1.Python环境及Scrapy、lxml库下载（vscode为例）</h2></p><p>以博主为例，我使用的python版本为3.6.13;Scrapy版本为 2.6.1</p><p>在终端中输入以下指令，来下载scrapy，lxml库</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pip install scrapy</span><br><span class="line">pip install lxml</span><br></pre></td></tr></table></figure><p>如果想指定下载版本可以输入以下指令（以2.6.1为例）</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pip install scrapy==2.6.1</span><br></pre></td></tr></table></figure><p>下载后输入以下指令看是否成功，如果成功会出现这样的画面：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">scrapy --version</span><br><span class="line"></span><br><span class="line">Scrapy 2.6.1 - no active project</span><br><span class="line"></span><br><span class="line">Usage:</span><br><span class="line">  scrapy &lt;command&gt; [options] [args]</span><br><span class="line"></span><br><span class="line">Available commands:</span><br><span class="line">  bench         Run quick benchmark test</span><br><span class="line">  commands      </span><br><span class="line">  fetch         Fetch a URL using the Scrapy downloader</span><br><span class="line">  genspider     Generate new spider using pre-defined templates</span><br><span class="line">  runspider     Run a self-contained spider (without creating a project)</span><br><span class="line">  settings      Get settings values</span><br><span class="line">  shell         Interactive scraping console</span><br><span class="line">  startproject  Create new project</span><br><span class="line">  version       Print Scrapy version</span><br><span class="line">  view          Open URL in browser, as seen by Scrapy</span><br><span class="line"></span><br><span class="line">  [ more ]      More commands available when run from project directory</span><br><span class="line"></span><br><span class="line">Use &quot;scrapy &lt;command&gt; -h&quot; to see more info about a command</span><br></pre></td></tr></table></figure><p><h2>2.xpath插件</h2></p><p><h3>Xpath介绍</h3></p><img src="https://ts1.cn.mm.bing.net/th/id/R-C.d21d2874b33fc3c2ffc0c3c7d3428781?rik=226dSM6a5FlEug&riu=http%3a%2f%2fstatic.article.iis7.com%2fimgcj%2f2020%2f18%2f0117479.jpg&ehk=3rHvhMb978aL%2bTFvoRDmy6mPeElS4tp4BeBOHH97AzU%3d&risl=&pid=ImgRaw&r=0"><p>XPath即为XML路径语言（XML Path Language），它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构，提供在数据结构树中找寻节点的能力。<br><p>我们可以下载一个浏览器的xpath辅助插件，可以帮助我们确实语法正确与否，并反馈给我们可以解析到的数据，具体安装教程我放在下面。<br><strong>注：不同的浏览器需要安装不同的插件，以自己喜好为准哦！</strong></p><blockquote><p><a href="https://blog.csdn.net/weixin_64471900/article/details/124314236">https://blog.csdn.net/weixin_64471900/article/details/124314236</a></p><footer><strong>xpath插件</strong></footer></blockquote><strong>这也是我们需要提前学习的，十分简单，但是需要基础的html语法知识，用他来解析html十分的简洁，xpath语法的学习文档我会放在下面，可以去学习一下哦！</strong></p><blockquote><p><a href="https://www.runoob.com/xpath/xpath-tutorial.html">https://www.runoob.com/xpath/xpath-tutorial.html</a></p><footer><strong>xpath语法</strong></footer></blockquote><p><h1>三.基础指令</h1></p><p><h2>创建爬虫项目</h2></p><p>首先，一定是创建爬虫项目，在终端中输入以下指令：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">scrapy startproject 项目名称</span><br></pre></td></tr></table></figure><p><strong>注：不能以数字开头 也不能包含中文</strong></p><p>这时，你会发现当前文件夹目录下出现了一个新的文件夹，文件夹名字为你刚刚输入的 项目名称。这代表项目已经创建成功啦！</p><p><h2>创建爬虫文件</h2></p><p>首先，我们要将自己的终端切换到我们的爬虫文件中，在终端中输入以下指令:</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cd 项目名称\项目名称\spiders</span><br></pre></td></tr></table></figure><p>接着，我们要创建文件，在终端中继续输入：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">scrapy genspider 爬虫文件的名字 要爬的网页</span><br></pre></td></tr></table></figure><p style="color:red"><strong>注：文件名和项目名不能相同，否则会报错</strong></p><p>例子：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">scrapy genspider ceshi1 www.baidu.com</span><br></pre></td></tr></table></figure><p style="color:red"><strong>注：一般情况不需要添加http协议 因为start_url的值是根据allowed_domains的值修改的    当起始url结尾是html是 需要去掉/</strong></p><p>这是你可以看到，项目文件夹下的spider文件夹中，多出了一个你命名的新文件，其中内容类似于：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> scrapy</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">Ceshi1Spider</span>(scrapy.Spider):</span><br><span class="line">    name = <span class="string">&#x27;ceshi1&#x27;</span></span><br><span class="line">    allowed_domains = [<span class="string">&#x27;www.baidu.com&#x27;</span>]</span><br><span class="line">    start_urls = [<span class="string">&#x27;http://www.baidu.com/&#x27;</span>]</span><br><span class="line"></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">parse</span>(<span class="params">self, response</span>):</span><br><span class="line">        <span class="keyword">pass</span></span><br></pre></td></tr></table></figure><p>具体含义及用法会在下一篇中介绍，到这里我们已经成功完成了爬虫文件的建立</p><p><h2>此时爬虫文件夹架构介绍</h2></p><p>在完成上一步后，我们可以看到新创建好的项目文件夹下有很多我们不认识的文件，他们的意思是什么呢，我们来简单介绍一下：</p><img src="https://pic3.zhimg.com/80/v2-c8f01241a67c959ada7c1fe09a80a58a_1440w.webp"><p><h2>运行爬虫文件</h2></p><p>当你完成了一份爬虫文件，想要运行调试怎么办？请在终端中输入以下指令：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">scrapy crawl 爬虫文件的名字</span><br></pre></td></tr></table></figure><p>即可运行</p><p><strong>好啦，这篇文章就到此为止了，相信通过上面的叙述你应该可以自主的创建一个爬虫项目了，至于如何开始真正的项目，下一篇博客就会以一个例子作为介绍，我也有点忘了，先让我复习一波（doge</strong></p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前言：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;</summary>
      
    
    
    
    <category term="python" scheme="http://www.messi.ltd/categories/python/"/>
    
    
    <category term="python" scheme="http://www.messi.ltd/tags/python/"/>
    
    <category term="爬虫" scheme="http://www.messi.ltd/tags/%E7%88%AC%E8%99%AB/"/>
    
    <category term="scrapy" scheme="http://www.messi.ltd/tags/scrapy/"/>
    
  </entry>
  
  <entry>
    <title>如何发布/个性化你的博客（以Vscode为例）</title>
    <link href="http://www.messi.ltd/posts/8bec8784.html"/>
    <id>http://www.messi.ltd/posts/8bec8784.html</id>
    <published>2022-10-07T05:19:20.000Z</published>
    <updated>2022-11-19T13:55:32.419Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言：</strong></p><p>在上一篇中我已经完整地（在我看来）叙述了如何搭建并且部署你的博客，那现在，我们就要开始进入创作/发布/个性化你的博客啦~</p></blockquote><p><h1>一.知识储备</h1></p><p>相信大家一定迫不及待的想要创作自己的第一篇博客了，那我们究竟需要学习哪些知识呢？</p><p><h2>Markdown</h2></p><img src="https://ts1.cn.mm.bing.net/th/id/R-C.60ab59ec7db015db8f6d236d06d6e0c3?rik=iCaSaep925OfgA&riu=http%3a%2f%2fwww.bettertechtips.com%2fwp-content%2fuploads%2f2017%2f08%2fonline-markdown.png&ehk=bAfcaIgHImvBpuVdwkcHIM4ueSxdTUyjcIMrkiYlDKQ%3d&risl=&pid=ImgRaw&r=0"><p>Markdown 是一种轻量级标记语言，创始人为约翰·格鲁伯（John Gruber）。 它允许人们使用易读易写的纯文本格式编写文档，然后转换成有效的 XHTML（或者HTML）文档。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。由于 Markdown 的轻量化、易读易写特性，并且对于图片，图表、数学式都有支持，许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。 如 GitHub、Reddit、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge、简书等，甚至还能被使用来撰写电子书。</p><p><h2>Html</h2></p><img src="https://tse2-mm.cn.bing.net/th/id/OIP-C.Hea8t_dY8VziR9woyQ6OkgAAAA?w=163&h=180&c=7&r=0&o=5&dpr=1.5&pid=1.7"><p>HTML的全称为超文本标记语言，是一种标记语言。它包括一系列标签．通过这些标签可以将网络上的文档格式统一，使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本，HTML命令可以说明文字，图形、动画、声音、表格、链接等。超文本是一种组织信息的方式，它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中，也可能是其他文件，或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接，为人们查找，检索信息提供方便。</p><p><strong>注：以上是两种可以用来书写博客的标记语言，通常来说，由于我们现在hexo框架下的博客文件为.md-即markdown文件，所以一般第一选择是用markdo语法进行书写。然而....由于博主我先学的html，所以在懒惰的驱使下，我发现html语言也可以在md文件中被识别，所以html也是可以用在这里的。（当然，markdown和html十分类似，前往官方文档学习还是很快的，我会把学习文档链接放在下面。</strong></p><blockquote><p><a href="https://markdown.com.cn/basic-syntax/">https://markdown.com.cn/basic-syntax/</a></p><footer><strong>Markdown</strong></footer></blockquote><blockquote><p><a href="http://www.w3chtml.com/html/html-basic-grammar.html">http://www.w3chtml.com/html/html-basic-grammar.html</a></p><footer><strong>Html</strong></footer></blockquote><p>在完成我们的知识储备后，我们就可以开始创作啦</p><p><h1>二.创建新博客，并进行预览/发布</h1></p><p><h2>新建一个博客</h2></p><p>首先，我们要创建一个博客文件，在终端中输入下列指令：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new 你的博客题目</span><br></pre></td></tr></table></figure><p>这时候，你的source\_posts 文件夹中就出现了博客文件，如下</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 测试</span><br><span class="line">date: 2022-10-07 14:00:35</span><br><span class="line">tags:</span><br><span class="line">---</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>这代表你已经创建成功啦。具体如何创作，例如模块插入，这些都可以在hexo官方文档中查阅学习到，这里就不过多赘述啦(*^▽^*)</p><blockquote><p>hexo官方文档：<a href="https://hexo.io/zh-cn/docs/">https://hexo.io/zh-cn/docs/</a></p></blockquote><p><h2>对创作内容进行生成预览/发布</h2></p><p>在这个环节之前，我们先来介绍一下著名的“Hexo四连”(滑稽</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">hexo clean</span><br><span class="line"></span><br><span class="line">hexo generate</span><br><span class="line"></span><br><span class="line">hexo server</span><br><span class="line"></span><br><span class="line">hexo deploy</span><br></pre></td></tr></table></figure><ui> <li>hexo clean:清除缓存，也就是清除你之前生成的东西，也可以不加，但是经常清除一下也未尝不是个好习惯（doge</li> <li>hexo generate:顾名思义，生成静态文章，可以用<em>hexo g</em>缩写代替</li> <li>hexo server:提供一个本地网址供你进行效果预览，文章内容修改或者主题修改保存后刷新即可；对于_config.yml的修改需要重启本地服务器。可以用<em>hexo s</em>缩写代替</li> <li>hexo deploy:部署文章 可以用<em>hexo d</em>缩写代替</li></ul><p>其实到这，基本已经讲完啦，将你写完的博客文件进行上述操作，即可发布</p><p>下面提供我的第一篇博客的源代码供大家参考，结构比较混乱，浅浅参考一下吧（滑稽</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: 一位金融数学专业计算机小白的自我介绍（doge</span><br><span class="line">author: 下里巴人</span><br><span class="line">date: 2022-10-05 11:45:41</span><br><span class="line">tags:</span><br><span class="line">- 大学生</span><br><span class="line">- 自我介绍</span><br><span class="line">cover: https://ts1.cn.mm.bing.net/th/id/R-C.63563516c3924898563e40ce4ae45f77?rik=HrtdcT%2bHjPgCmA&amp;riu=http%3a%2f%2f121.40.114.220%2fwp-content%2fuploads%2f2016%2f09%2fmeixi.jpg&amp;ehk=xigwyTNGmW7d0RuPCG4onkXk%2f01AJlHr3UKt4NnybbM%3d&amp;risl=&amp;pid=ImgRaw&amp;r=0</span><br><span class="line">---</span><br><span class="line">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;</span><br><span class="line">&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;</span><br><span class="line">&lt;p&gt;&lt;h1&gt;关于我&lt;/h1&gt;&lt;/p&gt;</span><br><span class="line">&lt;p&gt;我来自江苏无锡，目前就读于南京审计大学金融数学专业，所以四舍五入可以说我在南大上学（不是&lt;br&gt;</span><br><span class="line">我的业余爱好是足球，辩论...我是梅西人迷hhh goat！！！&lt;br&gt;</span><br><span class="line">正在努力学习python,matlab,html....欢迎大家与我交流，我会在下面提供我的联系方式^_^&lt;/p&gt;</span><br><span class="line">&lt;p&gt;&lt;h1&gt;联系方式&lt;/h1&gt;&lt;/p&gt;</span><br><span class="line">    &lt;ul&gt;</span><br><span class="line">     &lt;li&gt;Tel:18151695632&lt;/li&gt;</span><br><span class="line">     &lt;li&gt;Emile:1169153079@qq.com&lt;/li&gt;</span><br><span class="line">     &lt;li&gt;QQ:1169153079&lt;/li&gt;</span><br><span class="line">    &lt;/ul&gt;</span><br><span class="line">&lt;p&gt;&lt;h1&gt;创作博客的目的&lt;/h1&gt;&lt;/p&gt;</span><br><span class="line">&lt;p&gt;记录，分享自己的在学习方面的经历，也许还会记录自己的生活hh&lt;/p&gt;</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><p><strong>注：我都是使用html语法进行书写，所以仅供参考哈，目前还没有发现兼容问题 （但愿以后也不要发现o(╥﹏╥)o</strong></p><p><h1>个性化自己的博客/主题</h1></p><p>由于这一部分比较复杂，且我自己还不是很能完整的叙述，所以我就贴一个我觉得有帮助的链接，大家可以按照这篇文章的指引，去设计自己的博客啦</p><blockquote><p><a href="https://zhuanlan.zhihu.com/p/385525053">https://zhuanlan.zhihu.com/p/385525053</a></p><footer><strong>hexo博客更换自己的主题</strong></footer></blockquote><p>本章到此结束啦，如果你觉得哪里不合理，或者实际操作中有什么问题，欢迎联系我与我讨论哦</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前言：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;</summary>
      
    
    
    
    <category term="博客相关" scheme="http://www.messi.ltd/categories/%E5%8D%9A%E5%AE%A2%E7%9B%B8%E5%85%B3/"/>
    
    
    <category term="blog" scheme="http://www.messi.ltd/tags/blog/"/>
    
    <category term="html" scheme="http://www.messi.ltd/tags/html/"/>
    
    <category term="markdown" scheme="http://www.messi.ltd/tags/markdown/"/>
    
  </entry>
  
  <entry>
    <title>艰苦历程之—Hexo+Github博客搭建</title>
    <link href="http://www.messi.ltd/posts/1706a3c7.html"/>
    <id>http://www.messi.ltd/posts/1706a3c7.html</id>
    <published>2022-10-06T15:41:37.000Z</published>
    <updated>2022-11-29T12:00:04.240Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><blockquote><p><strong>前言:</strong></p>相比其他大佬，作为小白的我写的搭建历程肯定漏洞百出o(╥﹏╥)o，但我还是会尽量考虑到一些操作细节，帮助大家避免我曾经遇到的问题（doge，就图一乐哈！，如果想要更详细的教程，请移步CSDN噢！</blockquote><p><h1>一.什么是博客？</h1></p><blockquote><p>指在博客（Blog或Weblog）的虚拟空间中发布文章等各种形式的过程。简言之，Blog就是以网络作为载体，简易迅速便捷地发布自己的心得，及时有效轻松地与他人进行交流，再集丰富多彩的个性化展示于一体的综合性平台。不同的博客可能使用不同的编码，所以相互之间也不一定兼容。而且，很多博客都提供丰富多彩的模板或其他个性化方案，这使得不同的博客各具特色。Blog是继Email、BBS、ICQ之后出现的第四种网络交流方式，至今已十分受大家的欢迎，是网络时代的个人“读者文摘”，是以超级链接为入口的网络日记，是代表着新的生活方式和新的工作方式，更代表着新的学习方式。具体说来，博客（Blogger）这个概念解释为使用特定的软件，在网络上出版，发表和张贴个人文章的人。</p><footer><strong>来自</strong><cite>百度百科</cite></footer></blockquote><p><h1>二.为何用hexo+github搭建个人博客？</h1></p><p><h2>建立博客存在的一些问题</h2></p><ul>  <li>商业化的博客平台自由度低，广告多</li>  <li>自己购买域名，服务器成本高</li>  <li>需定期维护，过于耗费精力</li></ul><p><h2>如何解决以上问题？</h2></p><p>基于开源框架搭建博客，直接在<em>github page</em>平台上托管我们的博客。无需关心网页源代码的具体生成细节，只需要用心写好博客内容即可<br><strong>注：虽然这么说，但是我觉得还是挺麻烦的（doge ，当然，只是对我来说 O(∩_∩)O</strong><p>下面，就开始正式进入我的艰难搭建之旅啦o(╥﹏╥)o</p><p><h1>三.搭建流程</h1></p><p><h2>&nbsp;&nbsp;&nbsp;工具介绍</h2></p><p><h3><strong>Vscode</strong></h3></p><img src="https://ts1.cn.mm.bing.net/th?id=OIP-C.TY9Ic3mQBQRIRZsq8mUWewHaHa&w=144&h=170&c=8&rs=1&qlt=90&o=6&dpr=1.5&pid=3.1&rm=2"><p>VSCode（全称：Visual Studio Code）是一款由微软开发且跨平台的免费源代码编辑器。 该软件支持语法高亮、代码自动补全（又称 IntelliSense）、代码重构、查看定义功能，并且内置了命令行工具和 Git 版本控制系统。</p><p><strong>强烈推荐！！！！基本全栈都可以在这款编辑器中编写，且轻量化，支持中文！！是小白的福音！！</strong></p><p><h3><strong>Git</strong></h3></p><img src="https://tse4-mm.cn.bing.net/th/id/OIP-C.kA2tpV8So5280jyvzuBjcgHaDg?w=350&h=165&c=7&r=0&o=5&dpr=1.5&pid=1.7"><p>Git（读音为/gɪt/）是一个开源的分布式版本控制系统，可以有效、高速地处理从很小到非常大的项目版本管理。 [1]  也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。</p><p><h3><strong>Hexo</strong></h3></p><img src="https://tse4-mm.cn.bing.net/th/id/OIP-C.j7Bw19HA9uWHkX0nf_JlkQHaEK?w=311&h=180&c=7&r=0&o=5&dpr=1.5&pid=1.7"><p>Hexo是一款基于Nodejs的，快速、简洁且高效的博客框架。具有丰富的插件和主题，具有超快的速度。支持Makedown语法，可以方便快捷的编写博客文档。同时支持node命令，可以一键部署到GitHub Pages, Heroku 或其他平台。</p><p><h3><strong>Github</strong></h3></p><img src="https://tse1-mm.cn.bing.net/th/id/OIP-C.2gD5c6D3issQr1wLj-2LGwHaDt?w=321&h=175&c=7&r=0&o=5&dpr=1.5&pid=1.7"><p>GitHub是一个面向开源及私有软件项目的托管平台，因为只支持Git作为唯一的版本库格式进行托管，故名GitHub。GitHub于2008年4月10日正式上线，除了Git代码仓库托管及基本的Web管理界面以外，还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱（报表）、代码片段分享（Gist）等功能。</p><p><h3><strong>Node.js</strong></h3></p><img src="https://www.runoob.com/wp-content/uploads/2014/03/nodejs.jpg"><p>简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境，基于 Google 的 V8 引擎，V8 引擎执行 Javascript 的速度非常快，性能非常好。<p><p><h2>&nbsp;&nbsp;&nbsp;工具准备</h2></p><p style="color:red"><strong>注：在下载nodejs与hexo后，如若在操作无误的情况下检验下载成功时报错，这时需要重启电脑。</strong></p><p><h3>下载node.js</h3></p><p>请基于你自己的电脑操作系统类型，选择合适的版本下载</p><blockquote><p><a href="https://nodejs.org/en/download/">https://nodejs.org/en/download/</a></p><footer><strong>Node.js</strong></footer></blockquote><p>下载完成后在vscode提供的powershell终端中输入一下指令($不需要输入哦,它代表你要输入的指令），来检验是否安装成功。（当然，如果没有下载，也可以使用win+R调用cmd终端</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$ node --version</span><br><span class="line">v16.16.0</span><br><span class="line"></span><br><span class="line">$ npm --version</span><br><span class="line">npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.</span><br><span class="line">8.15.1</span><br></pre></td></tr></table></figure><p>如果出现以上信息，就代表已经安装成功啦！！！</p><p><h3>下载Git</h3></p><blockquote><p><a href="https://git-scm.com/">https://git-scm.com/</a></p><footer><strong>Git</strong></footer></blockquote><p><strong>注：下载后去所在文件夹点击安装！！</strong></p><p>下载完成后在终端输入：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git --version</span><br><span class="line">v16.16.0</span><br><span class="line">git version 2.38.0.windows.1</span><br></pre></td></tr></table></figure><p>有如上显示就代表成功啦！</p><p><h3>下载vscode</h3></p><p>下面是vscode的官方链接<p><blockquote><p><a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a></p><footer><strong>Vscode</strong></footer></blockquote><p><h3>下载Hexo</h3></p><p>下载之前，可以先去Hexo的官方文档熟悉了解操作，网址我贴在下面啦！！（自己看官方文档也是很重要的学习过程哦）<p><blockquote><p>hexo官方文档：<a href="https://hexo.io/zh-cn/docs/">https://hexo.io/zh-cn/docs/</a></p></blockquote><p>接下来，在你的终端中输入一下内容，快速下载hexo</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ npm install -g hexo-cli</span><br></pre></td></tr></table></figure><p>接下来就静待你的电脑安装hexo啦，等到安装结束，输入一下指令，来验证是否安装成功</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">$ hexo --version</span><br><span class="line">hexo-cli: 4.3.0</span><br><span class="line">os: win32 10.0.19044</span><br><span class="line">node: 16.16.0</span><br><span class="line">v8: 9.4.146.24-node.21</span><br><span class="line">uv: 1.43.0</span><br><span class="line">zlib: 1.2.11</span><br><span class="line">brotli: 1.0.9</span><br><span class="line">ares: 1.18.1</span><br><span class="line">modules: 93</span><br><span class="line">nghttp2: 1.47.0</span><br><span class="line">napi: 8</span><br><span class="line">llhttp: 6.0.7</span><br><span class="line">openssl: 1.1.1q+quic</span><br><span class="line">cldr: 40.0</span><br><span class="line">icu: 70.1</span><br><span class="line">tz: 2021a3</span><br><span class="line">unicode: 14.0</span><br><span class="line">ngtcp2: 0.1.0-DEV</span><br><span class="line">nghttp3: 0.1.0-DEV</span><br></pre></td></tr></table></figure><p style="color:red"><strong>如若出现一下情况:</strong></p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">hexo : 无法加载文件 C:\Users\username\AppData\Roaming\npm\hexo.ps1`，因为在此系统上禁止运行脚本。有关详细信息，请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 `about_Execution_Policies`。</span><br><span class="line">所在位置 行:1 字符: 1</span><br></pre></td></tr></table></figure><p>不要慌,在windows自带的搜索栏中搜索powershell，选择以管理员身份运行，输入以下代码：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Set-ExecutionPolicy -ExecutionPolicy UNRESTRICTED</span><br></pre></td></tr></table></figure><p>接下来会蹦出来一大串你看不懂的代码，不要慌张，无脑输入y,然后回车，这时回到vscode中输入hexo --version就不会报错啦</p><p>现在，你已经准备好所有工具啦，现在，就开始搭建我们的博客咯(*^▽^*)</p><p><h3>创建博客本地文件夹</h3></p><p>首先，在你电脑合适的位置创建一个文件夹，注意用英文，因为中文文件夹可能会引发兼容问题，所以先给自己的文件夹取个洋气的英文名。<br>创建完之后，就在你的终端输入如下命令：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ cd &lt;your folder name&gt;</span><br><span class="line">$ hexo init</span><br><span class="line">$ hexo g</span><br><span class="line">$ hexo s</span><br></pre></td></tr></table></figure><p>这时候你会发现，你创建的文件夹出现了很多其他文件，这时候就代表已经成功啦,你的终端会显示如下内容</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">INFO  Validating config</span><br><span class="line">INFO  Start processing</span><br><span class="line">INFO  Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.</span><br></pre></td></tr></table></figure><p>这些指令的意义后续我们会给出介绍，以后就会慢慢熟悉啦。点击上面的链接，如若能够跳转，就已经生成成功啦</p><p><h3>注册github账户</h3></p><p>这里网上已经有很多介绍啦，这里不再赘述，可以参考下面的教程<p><p><strong>注：因为是境外网站，所以完成这一步需要一些魔法(*^▽^*)咳咳...</strong></p><blockquote><p><a href="https://blog.csdn.net/xingkaifan/article/details/81105352">https://blog.csdn.net/xingkaifan/article/details/81105352</a></p><footer><strong>Github</strong></footer></blockquote><p><h3>在github中建立一个仓库</h3></p><p>同上，不过多赘述啦</p><blockquote><p><a href="https://blog.csdn.net/weixin_43729943/article/details/103915046">https://blog.csdn.net/weixin_43729943/article/details/103915046</a></p><footer><strong>Github</strong></footer></blockquote><p style="color:red"><strong>这边需要强调的是，因为我们最终目的是将我们的博客部署上去，所以我们创建仓库的名字一定要为 github用户名 .github.io</strong></p><p><h3>ssh连接</h3></p><p><h4>ssh是什么？</h4></p><blockquote><p>简单说，SSH是一种网络协议，用于计算机之间的加密登录。如果一个用户从本地计算机，使用SSH协议登录另一台远程计算机，我们就可以认为，这种登录是安全的，即使被中途截获，密码也不会泄露。最早的时候，互联网通信都是明文通信，一旦被截获，内容就暴露无疑。1995年，芬兰学者Tatu Ylonen设计了SSH协议，将登录信息全部加密，成为互联网安全的一个基本解决方案，迅速在全世界获得推广，目前已经成为Linux系统的标准配置。SSH只是一种协议，存在多种实现，既有商业实现，也有开源实现。</p><footer><strong>from</strong><cite>https://blog.csdn.net/u013452337/article/details/80847113</cite></footer></blockquote><p>你并不需要十分了解，我们只需要知道我们需要用这个协议连接你和github<br>如果你之前没有用过的话，我们需要利用ssh-keygen的命令先生成属于你的密钥对</p><p>输入以下指令(因为github使用密钥时要求为rsa算法，所以接下来的密钥算法我们指定为rsa<p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t rsa</span><br></pre></td></tr></table></figure><p>为了方便，接下来可以一直回车，储存至默认位置，默认为空串，当然，你也可以指定（doge<br>当然，终端也会告诉你最终位置在哪</p><p>这时候，找到你的公钥，用记事本或者vscode打开，复制好那长长的一串，比如</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDjyY4QeOgoOZEPg1KhQmr2jgv6WeI0bykEvw3cH8I0gzEKtc+w2TK4XMFx9Y1lw7SoEZmK93Cro+76c/1V/yLbVtF14aPVjB6qo5f3sH5HwRscFysftY9j7R/oUvC1l+12Xe6AJWUwBefZk181ym0XAR6potdvcIqQ0eDYciu3On6W85tMG8iVzlsx9cMiDAgS8WtPrBAKgLPj4OqrVr3FJJW1W84myZezuXjSLdedV106BV3S3Uax/3DtaH3gQcxqt4Aor0ydr1P9BQsyL+SDuOM7f2mTlRmdwoI5zBNcs0z8+ECEJbh1MbkJCox7w4iwbx0NWoWRJgniva3bCw9QUr6iPUurI/2CIsAFiyw4Cbkj1aMaYTKi+uQfAJ3A6JUlWV/JlTQB7oRjXnbX/yqeR8H7IIF85AtkkLFwpB+t2nqnfb6TcWFNlDaSYB50RLcqP6IdjWYB+lhc5o/InkdCM70t75mMj/01o0X4p2XDSViZd2JSJYSlUVn5clYg3c0= 11691@DESKTOP-BKLSOI2</span><br></pre></td></tr></table></figure><p style="color:red"><strong>这里需要着重强调一下，这个公钥文件一定是.pub 同时生成的另一个文件一定不能泄露！！！非常重要<br>(据说大佬拿到这个就可以远程登陆你的电脑了，你也希望要留清白在人间吧（滑稽</strong></p><p>接下来，打开你的github，打开设置，来到如下页面：</p><img src="https://pic1.zhimg.com/80/v2-7ecc83551fdb3a0677e6b733e77046bc_1440w.webp"><p>新建一个密钥，复制上述公钥，就可以啦</p><p><h3>初始化你的git用户名和邮箱</h3></p><p>小声bb：我自己搭建的时候就是因为我参考的教程没有提及这一点，导致我一度情绪爆发（doge</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git config --global user.name &quot;yourname&quot;</span><br><span class="line">git config --global user.email &quot;youremail&quot;</span><br></pre></td></tr></table></figure><p>这里的"yourname""youremail"是你对应的Github用户名与邮箱</p><p><h2>四.部署你的博客</h2></p><p>打开你的配置文件：_config.yml </p><p>并在文件下方<em>deploy</em>补全如下</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">deploy:</span><br><span class="line">  type: git</span><br><span class="line">  repo: 你的仓库地址</span><br><span class="line">  branch: main</span><br></pre></td></tr></table></figure><p>输入以下指令：</p><figure class="highlight plaintext"><figcaption><span>Powershell</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ npm install hexo-deployer-git --save</span><br><span class="line">$ hexo d</span><br></pre></td></tr></table></figure><p>在完成后，打开你的浏览器，输入 你的名字 .github.io，如果能成功跳转那么恭喜你，你已经完成了博客的部署！！！</p><p>细心的你也许会发现，这时候你的博客已经发出了第一篇文章 <em>Hollow World</em> &nbsp;&nbsp;&nbsp;(doge 好像万物的起点就是这个O(∩_∩)O</p><p><h2>结尾</h2></p><p>好啦，已经到深夜了，现在是2022/10/7 凌晨0:37 我终于完成了真正意义上的第一篇博客！！介绍完了搭建部署，那就下一篇讲讲怎么个性化你的博客吧（doge</p><p style="color:blue; font-size:72px;">晚安！</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;前言:&lt;/strong&gt;&lt;/p&gt;相比其他</summary>
      
    
    
    
    <category term="博客相关" scheme="http://www.messi.ltd/categories/%E5%8D%9A%E5%AE%A2%E7%9B%B8%E5%85%B3/"/>
    
    
    <category term="github" scheme="http://www.messi.ltd/tags/github/"/>
    
    <category term="blog" scheme="http://www.messi.ltd/tags/blog/"/>
    
  </entry>
  
  <entry>
    <title>一位金融数学专业计算机小白的自我介绍（doge</title>
    <link href="http://www.messi.ltd/posts/ea1bff1b.html"/>
    <id>http://www.messi.ltd/posts/ea1bff1b.html</id>
    <published>2022-10-05T03:45:41.000Z</published>
    <updated>2022-11-24T08:30:03.241Z</updated>
    
    <content type="html"><![CDATA[<blockquote><p>作者：下里巴人</p><footer><strong>来自</strong><cite>南京审计大学</cite></footer></blockquote><p><h1>关于我</h1></p><p>我来自江苏无锡，目前就读于南京审计大学金融数学专业，所以四舍五入可以说我在南大上学（不是<br>我的业余爱好是足球，辩论...我是梅西人迷hhh goat！！！巴萨！！！！<br>正在努力学习python,matlab,html....欢迎大家与我交流，我会在下面提供我的联系方式^_^</p><p><h1>联系方式</h1></p>    <ul>     <li>Tel:18151695632</li>     <li>Emile:1169153079@qq.com</li>     <li>QQ:1169153079</li>    </ul><p><h1>创作博客的目的</h1></p><p>记录，分享自己的在学习方面的经历，也许还会记录自己的生活hh</p>]]></content>
    
    
      
      
    <summary type="html">&lt;blockquote&gt;&lt;p&gt;作者：下里巴人&lt;/p&gt;
&lt;footer&gt;&lt;strong&gt;来自&lt;/strong&gt;&lt;cite&gt;南京审计大学&lt;/cite&gt;&lt;/footer&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;h1&gt;关于我&lt;/h1&gt;&lt;/p&gt;
&lt;p&gt;我来自江苏无锡，目前就读于南京审计大学金融</summary>
      
    
    
    
    <category term="日常" scheme="http://www.messi.ltd/categories/%E6%97%A5%E5%B8%B8/"/>
    
    
    <category term="自我介绍" scheme="http://www.messi.ltd/tags/%E8%87%AA%E6%88%91%E4%BB%8B%E7%BB%8D/"/>
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="http://www.messi.ltd/posts/4a17b156.html"/>
    <id>http://www.messi.ltd/posts/4a17b156.html</id>
    <published>2022-10-04T13:28:00.783Z</published>
    <updated>2022-11-19T13:55:32.411Z</updated>
    
    <content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">&quot;My New Post&quot;</span></span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Welcome to &lt;a href=&quot;https://hexo.io/&quot;&gt;Hexo&lt;/a&gt;! This is your very first post. Check &lt;a href=&quot;https://hexo.io/docs/&quot;&gt;documentation&lt;/a&gt; for</summary>
      
    
    
    
    
  </entry>
  
</feed>
