用C#写爬虫抓小姐姐

前言

用Google图片搜索壁纸的时候无意间发现一个网站:http://daybreakforce.blog129.fc2.com/
画风是这样子的:

哇,这么多小姐姐图片啊。
哇,还根据不同的番做了归档啊。
也许我该试着写个爬虫把她们抱回家哦。
C#才入门而已,代码写的也不是很多,这倒是一个不错的方式来锻炼呢。为了老婆

实现流程

索引

代码写得很烂吧QwQ 请多指教
打算直接根据网站左边的索引来找图片,也容易对我的文件夹做一个分类。先粗略查看了一下,其中有一部分是我不需要的。(没有漂亮姐姐

查看源代码,把需要的链接复制出来:

<ul class="sub_menu">
<li class="caNo142 caCt10"><a href="blog-category-142.html">蒼き鋼のアルペジオ (10)</a></li>
<li class="caNo176 caCt2"><a href="blog-category-176.html">蒼の彼方のフォーリズム (2)</a></li>
<li class="caNo167 caCt2"><a href="blog-category-167.html">アブソリュート・デュオ (2)</a></li>
<li class="caNo132 caCt7"><a href="blog-category-132.html">甘城ブリリアントパーク (7)</a></li>
<li class="caNo163 caCt1"><a href="blog-category-163.html">ヴァルキリーインパルス (1)</a></li>
<li class="caNo159 caCt12"><a href="blog-category-159.html">うたわれるもの (12)</a></li>
<li class="caNo30 caCt14"><a href="blog-category-30.html">AngelBeats! (14)</a></li>
<li class="caNo85 caCt4"><a href="blog-category-85.html">えびてん 公立海老栖川高校天悶部 (4)</a></li>
<li class="caNo224 caCt1"><a href="blog-category-224.html">エロマンガ先生 (1)</a></li>
<li class="caNo45 caCt12"><a href="blog-category-45.html">オオカミさんと七人の仲間たち (12)</a></li>
<li class="caNo105 caCt13"><a href="blog-category-105.html">俺の妹がこんなに可愛いわけがない (13)</a></li>
<li class="caNo99 caCt3"><a href="blog-category-99.html">俺の彼女と幼なじみが修羅場すぎる (3)</a></li>
<li class="caNo231 caCt1"><a href="blog-category-231.html">カードキャプターさくら (1)</a></li>
<li class="caNo48 caCt12"><a href="blog-category-48.html">学園黙示録H.O.T.D (12)</a></li>
<li class="caNo219 caCt1"><a href="blog-category-219.html">学戦都市アスタリスク (1)</a></li>
<li class="caNo194 caCt1"><a href="blog-category-194.html">ガラスの花と壊す世界 (1)</a></li>
<li class="caNo38 caCt23"><a href="blog-category-38.html">ガンダムシリーズ (23)</a></li>
<li class="caNo212 caCt1"><a href="blog-category-212.html">ガーリッシュ ナンバー (1)</a></li>
<li class="caNo213 caCt2"><a href="blog-category-213.html">ガールズ&パンツァー (2)</a></li>
<li class="caNo37 caCt29"><a href="blog-category-37.html">けいおん! (29)</a></li>
<li class="caNo180 caCt1"><a href="blog-category-180.html">月刊少女野崎くん (1)</a></li>
<li class="caNo152 caCt4"><a href="blog-category-152.html">Gate 自衛隊 彼の地にて、斯く戦えり (4)</a></li>
<li class="caNo217 caCt13"><a href="blog-category-217.html">けものフレンズ (13)</a></li>
<li class="caNo80 caCt5"><a href="blog-category-80.html">恋と選挙とチョコレート (5)</a></li>
<li class="caNo187 caCt6"><a href="blog-category-187.html">甲鉄城のカバネリ (6)</a></li>
<li class="caNo141 caCt15"><a href="blog-category-141.html">ご注文はうさぎですか? (15)</a></li>
<li class="caNo216 caCt2"><a href="blog-category-216.html">小林さんちのメイドラゴン (2)</a></li>
<li class="caNo138 caCt17"><a href="blog-category-138.html">冴えない彼女の育てかた (17)</a></li>
<li class="caNo233 caCt1"><a href="blog-category-233.html">地獄少女 (1)</a></li>
<li class="caNo146 caCt3"><a href="blog-category-146.html">Charlotte (3)</a></li>
<li class="caNo186 caCt1"><a href="blog-category-186.html">シュヴァルツェスマーケン (1)</a></li>
<li class="caNo198 caCt2"><a href="blog-category-198.html">進撃の巨人 (2)</a></li>
<li class="caNo60 caCt11"><a href="blog-category-60.html">侵略!イカ娘 (11)</a></li>
<li class="caNo86 caCt6"><a href="blog-category-86.html">生徒会の一存 (6)</a></li>
<li class="caNo47 caCt12"><a href="blog-category-47.html">生徒会役員共 (12)</a></li>
<li class="caNo104 caCt9"><a href="blog-category-104.html">PSYCHO-PASS (9)</a></li>
<li class="caNo188 caCt1"><a href="blog-category-188.html">じょしらく (1)</a></li>
<li class="caNo209 caCt1"><a href="blog-category-209.html">ステラのまほう (1)</a></li>
<li class="caNo65 caCt1"><a href="blog-category-65.html">そらのおとしもの (1)</a></li>
<li class="caNo82 caCt45"><a href="blog-category-82.html">ソードアート・オンライン (45)</a></li>
<li class="caNo102 caCt2"><a href="blog-category-102.html">たまこまーけっと (2)</a></li>
<li class="caNo215 caCt1"><a href="blog-category-215.html">だから僕は、Hができない。  (1)</a></li>
<li class="caNo197 caCt1"><a href="blog-category-197.html">ダンジョンに出会いを求めるのは間違っているだろうか (1)</a></li>
<li class="caNo84 caCt15"><a href="blog-category-84.html">中二病でも恋がしたい! (15)</a></li>
<li class="caNo208 caCt7"><a href="blog-category-208.html">デート・ア・ライブ (7)</a></li>
<li class="caNo185 caCt4"><a href="blog-category-185.html">To LOVEる -とらぶる- (4)</a></li>
<li class="caNo68 caCt9"><a href="blog-category-68.html">夏目友人帳 (9)</a></li>
<li class="caNo23 caCt15"><a href="blog-category-23.html">NARUTO (15)</a></li>
<li class="caNo199 caCt1"><a href="blog-category-199.html">ネトゲの嫁は女の子じゃないと思った (1)</a></li>
<li class="caNo110 caCt4"><a href="blog-category-110.html">のんのんびより (4)</a></li>
<li class="caNo172 caCt1"><a href="blog-category-172.html">ハイキュー!! (1)</a></li>
<li class="caNo78 caCt12"><a href="blog-category-78.html">這よれ!ニャル子さん (12)</a></li>
<li class="caNo168 caCt1"><a href="blog-category-168.html">ハッカドール (1)</a></li>
<li class="caNo123 caCt5"><a href="blog-category-123.html">ハナヤマタ (5)</a></li>
<li class="caNo128 caCt1"><a href="blog-category-128.html">ばらかもん (1)</a></li>
<li class="caNo79 caCt18"><a href="blog-category-79.html">氷菓 (18)</a></li>
<li class="caNo67 caCt3"><a href="blog-category-67.html">緋弾のアリア (3)</a></li>
<li class="caNo143 caCt6"><a href="blog-category-143.html">響け!ユーフォニアム (6)</a></li>
<li class="caNo154 caCt1"><a href="blog-category-154.html">干物妹!うまるちゃん (1)</a></li>
<li class="caNo149 caCt4"><a href="blog-category-149.html">Fate/kaleid liner プリズマ☆イリヤ (4)</a></li>
<li class="caNo196 caCt1"><a href="blog-category-196.html">プラスティック・メモリーズ (1)</a></li>
<li class="caNo161 caCt2"><a href="blog-category-161.html">ヘヴィーオブジェクト (2)</a></li>
<li class="caNo131 caCt19"><a href="blog-category-131.html">Fate/stay night (19)</a></li>
<li class="caNo136 caCt3"><a href="blog-category-136.html">Fate/zero (3)</a></li>
<li class="caNo192 caCt4"><a href="blog-category-192.html">Fate 他シリーズ (4)</a></li>
<li class="caNo203 caCt2"><a href="blog-category-203.html">ブラック・ブレッド (2)</a></li>
<li class="caNo75 caCt5"><a href="blog-category-75.html">Black rock shooter (5)</a></li>
<li class="caNo89 caCt22"><a href="blog-category-89.html">僕は友達が少ない (22)</a></li>
<li class="caNo69 caCt14"><a href="blog-category-69.html">ゆるゆり (14)</a></li>
<li class="caNo22 caCt3"><a href="blog-category-22.html">マクロスシリーズ (3)</a></li>
<li class="caNo109 caCt7"><a href="blog-category-109.html">機巧少女は傷つかない (7)</a></li>
<li class="caNo66 caCt45"><a href="blog-category-66.html">魔法少女まどか★マギカ (45)</a></li>
<li class="caNo148 caCt2"><a href="blog-category-148.html">魔法少女リリカルなのは (2)</a></li>
<li class="caNo42 caCt2"><a href="blog-category-42.html">MAJOR (2)</a></li>
<li class="caNo151 caCt2"><a href="blog-category-151.html">やはり俺の青春ラブコメはまちがっている。 (2)</a></li>
<li class="caNo54 caCt26"><a href="blog-category-54.html">ヨスガノソラ (26)</a></li>
<li class="caNo133 caCt4"><a href="blog-category-133.html">ラブライブ! (4)</a></li>
<li class="caNo87 caCt21"><a href="blog-category-87.html">リトルバスターズ! (21)</a></li>
<li class="caNo184 caCt17"><a href="blog-category-184.html">Re:ゼロから始める異世界生活 (17)</a></li>
<li class="caNo202 caCt1"><a href="blog-category-202.html">Rewrite (1)</a></li>
<li class="caNo108 caCt4"><a href="blog-category-108.html">ログ・ホライズン (4)</a></li>
<li class="caNo107 caCt5"><a href="blog-category-107.html">ローゼンメイデン (5)</a></li>
<li class="caNo164 caCt1"><a href="blog-category-164.html">ワンパンマン (1)</a></li>
</ul>
</li>
<ul class="sub_menu">
<li class="caNo52 caCt8"><a href="blog-category-52.html">STG (8)</a></li>
<li class="caNo222 caCt1"><a href="blog-category-222.html">白猫プロジェクト (1)</a></li>
<li class="caNo50 caCt8"><a href="blog-category-50.html">戦国BASARA (8)</a></li>
<li class="caNo32 caCt269"><a href="blog-category-32.html">東方Project (269)</a></li>
<li class="caNo230 caCt2"><a href="blog-category-230.html">battlefield (2)</a></li>
<li class="caNo220 caCt1"><a href="blog-category-220.html">崩壊学園 (1)</a></li>
<li class="caNo63 caCt3"><a href="blog-category-63.html">Monster Hunter (3)</a></li>
</ul>
</li>
<ul class="sub_menu">
<li class="caNo223 caCt4"><a href="blog-category-223.html">3人いる! ~Happy Wedding in Livingroom~ (4)</a></li>
<li class="caNo181 caCt3"><a href="blog-category-181.html">77 (セブンズ) (3)</a></li>
<li class="caNo169 caCt8"><a href="blog-category-169.html">アイドルマスター シンデレラガールズ (8)</a></li>
<li class="caNo53 caCt5"><a href="blog-category-53.html">穢翼のユースティア (5)</a></li>
<li class="caNo179 caCt4"><a href="blog-category-179.html">暁の護衛 (4)</a></li>
<li class="caNo228 caCt1"><a href="blog-category-228.html">茜色の境界線 (1)</a></li>
<li class="caNo120 caCt8"><a href="blog-category-120.html">アストラエアの白き永遠 (8)</a></li>
<li class="caNo229 caCt1"><a href="blog-category-229.html">アズールレーン (1)</a></li>
<li class="caNo204 caCt5"><a href="blog-category-204.html">アマツツミ (5)</a></li>
<li class="caNo210 caCt2"><a href="blog-category-210.html">アリスティア・リメイン (2)</a></li>
<li class="caNo112 caCt8"><a href="blog-category-112.html">イノセントガール (8)</a></li>
<li class="caNo61 caCt9"><a href="blog-category-61.html">失われた未来を求めて (9)</a></li>
<li class="caNo232 caCt3"><a href="blog-category-232.html">お兄ちゃん、朝までずっとギュってして! (3)</a></li>
<li class="caNo51 caCt12"><a href="blog-category-51.html">俺たちに翼はない (12)</a></li>
<li class="caNo81 caCt1"><a href="blog-category-81.html">顔の無い月 (1)</a></li>
<li class="caNo64 caCt6"><a href="blog-category-64.html">カタハネ (6)</a></li>
<li class="caNo73 caCt10"><a href="blog-category-73.html">カミカゼ☆エクスプローラー! (10)</a></li>
<li class="caNo211 caCt4"><a href="blog-category-211.html">枯れない世界と終わる花 (4)</a></li>
<li class="caNo111 caCt95"><a href="blog-category-111.html">艦隊これくしょん (95)</a></li>
<li class="caNo221 caCt1"><a href="blog-category-221.html">かんぱに☆ガールズ (1)</a></li>
<li class="caNo127 caCt8"><a href="blog-category-127.html">G.I.B. ガールズ・イン・ブラック (8)</a></li>
<li class="caNo227 caCt1"><a href="blog-category-227.html">ガールフレンド(仮) (1)</a></li>
<li class="caNo134 caCt4"><a href="blog-category-134.html">キスアト (4)</a></li>
<li class="caNo214 caCt2"><a href="blog-category-214.html">吸血姫のリブラ (2)</a></li>
<li class="caNo144 caCt3"><a href="blog-category-144.html">Clover Day's (3)</a></li>
<li class="caNo43 caCt14"><a href="blog-category-43.html">恋色空模様 (14)</a></li>
<li class="caNo174 caCt7"><a href="blog-category-174.html">恋×シンアイ彼女 (7)</a></li>
<li class="caNo119 caCt13"><a href="blog-category-119.html">恋がさくころ桜どき (13)</a></li>
<li class="caNo200 caCt2"><a href="blog-category-200.html">恋剣乙女 (2)</a></li>
<li class="caNo165 caCt6"><a href="blog-category-165.html">恋する気持ちのかさねかた (6)</a></li>
<li class="caNo121 caCt1"><a href="blog-category-121.html">この大空に、翼をひろげて (1)</a></li>
<li class="caNo76 caCt14"><a href="blog-category-76.html">死神のテスタメント (14)</a></li>
<li class="caNo190 caCt5"><a href="blog-category-190.html">素晴らしき日々~不連続存在~ (5)</a></li>
<li class="caNo130 caCt5"><a href="blog-category-130.html">世界と世界の真ん中で (5)</a></li>
<li class="caNo205 caCt3"><a href="blog-category-205.html">千恋*万花 (3)</a></li>
<li class="caNo189 caCt2"><a href="blog-category-189.html">千の刃濤、桃花染の皇姫 (2)</a></li>
<li class="caNo207 caCt8"><a href="blog-category-207.html">タユタマ2 (8)</a></li>
<li class="caNo74 caCt17"><a href="blog-category-74.html">ダ・カーポ(D.C)シリーズ (17)</a></li>
<li class="caNo225 caCt1"><a href="blog-category-225.html">天気雨 (1)</a></li>
<li class="caNo182 caCt2"><a href="blog-category-182.html">DRACU-RIOT! (ドラクリオット) (2)</a></li>
<li class="caNo147 caCt1"><a href="blog-category-147.html">なついろレシピ (1)</a></li>
<li class="caNo62 caCt11"><a href="blog-category-62.html">なないろ航路 (11)</a></li>
<li class="caNo150 caCt1"><a href="blog-category-150.html">箱庭ロジック (1)</a></li>
<li class="caNo175 caCt1"><a href="blog-category-175.html">働くオトナの恋愛事情 (1)</a></li>
<li class="caNo218 caCt1"><a href="blog-category-218.html">花咲ワークスプリング (1)</a></li>
<li class="caNo153 caCt1"><a href="blog-category-153.html">パニカル・コンフュージョン (1)</a></li>
<li class="caNo113 caCt8"><a href="blog-category-113.html">ハピメア (8)</a></li>
<li class="caNo139 caCt1"><a href="blog-category-139.html">はるかぜどりに、とまりぎを。 2nd Story -月の扉と海の欠片- (1)</a></li>
<li class="caNo59 caCt1"><a href="blog-category-59.html">Hello,good-bye (1)</a></li>
<li class="caNo193 caCt4"><a href="blog-category-193.html">向日葵の教会長い夏休み (4)</a></li>
<li class="caNo114 caCt4"><a href="blog-category-114.html">planetarian (4)</a></li>
<li class="caNo58 caCt15"><a href="blog-category-58.html">ヘッドホン少女 (15)</a></li>
<li class="caNo122 caCt5"><a href="blog-category-122.html">Berry's (5)</a></li>
<li class="caNo25 caCt15"><a href="blog-category-25.html">FORTUNE ARTERIAL (15)</a></li>
<li class="caNo117 caCt2"><a href="blog-category-117.html">星ノ音サンクチュアリ (2)</a></li>
<li class="caNo49 caCt8"><a href="blog-category-49.html">MagusTale (8)</a></li>
<li class="caNo1 caCt10"><a href="blog-category-1.html">ましろ色シンフォニー (10)</a></li>
<li class="caNo39 caCt6"><a href="blog-category-39.html">窓辺ななみ (6)</a></li>
<li class="caNo162 caCt1"><a href="blog-category-162.html">見上げてごらん、夜空の星を (1)</a></li>
<li class="caNo115 caCt2"><a href="blog-category-115.html">らぶ らぶ らいふ (2)</a></li>
<li class="caNo118 caCt7"><a href="blog-category-118.html">リリカルりりっく (7)</a></li>
<li class="caNo178 caCt5"><a href="blog-category-178.html">レミニセンス (5)</a></li>
<li class="caNo183 caCt3"><a href="blog-category-183.html">ワールド・エレクション (3)</a></li>
</ul>
</li>
<li class="caNo33 caNosub"><img src="https://blog-imgs-44-origin.fc2.com/p/a/r/paro2day/catB1n.gif" width="29" height="14" alt="" /><a href="blog-category-33.html">VOCALOID (190)</a></li>
<ul class="sub_menu">
<li class="caNo171 caCt2"><a href="blog-category-171.html">和泉つばす (2)</a></li>
<li class="caNo156 caCt6"><a href="blog-category-156.html">カントク (6)</a></li>
<li class="caNo157 caCt7"><a href="blog-category-157.html">karory (7)</a></li>
<li class="caNo140 caCt1"><a href="blog-category-140.html">桐葉 (1)</a></li>
<li class="caNo116 caCt14"><a href="blog-category-116.html">梱枝りこ (14)</a></li>
<li class="caNo158 caCt2"><a href="blog-category-158.html">白もち桜 (2)</a></li>
<li class="caNo160 caCt4"><a href="blog-category-160.html">ごとP (4)</a></li>
<li class="caNo126 caCt4"><a href="blog-category-126.html">鈴平ひろ (4)</a></li>
<li class="caNo3 caCt49"><a href="blog-category-3.html">てぃんくる (49)</a></li>
<li class="caNo135 caCt2"><a href="blog-category-135.html">七尾 奈留 (2)</a></li>
<li class="caNo173 caCt3"><a href="blog-category-173.html">ななか まい (3)</a></li>
<li class="caNo201 caCt6"><a href="blog-category-201.html">ななろば華 (6)</a></li>
<li class="caNo177 caCt2"><a href="blog-category-177.html">緋賀ゆかり (2)</a></li>
<li class="caNo145 caCt3"><a href="blog-category-145.html">みけおう (3)</a></li>
<li class="caNo155 caCt1"><a href="blog-category-155.html">三嶋くろね (1)</a></li>
<li class="caNo124 caCt8"><a href="blog-category-124.html">水沢深森 (8)</a></li>
<li class="caNo137 caCt3"><a href="blog-category-137.html">山本和枝 (3)</a></li>
<li class="caNo166 caCt2"><a href="blog-category-166.html">憂姫はぐれ (2)</a></li>
<li class="caNo195 caCt1"><a href="blog-category-195.html">柚子奈ひよ (1)</a></li>
<li class="caNo129 caCt2"><a href="blog-category-129.html">涼香 (2)</a></li>
</ul>
</li>
<li class="caNo83 caNosub"><img src="https://blog-imgs-44-origin.fc2.com/p/a/r/paro2day/catB1n.gif" width="29" height="14" alt="" /><a href="blog-category-83.html">オリジナル壁紙 (393)</a></li>
<li class="caNo170 caNosub"><img src="https://blog-imgs-44-origin.fc2.com/p/a/r/paro2day/catB1n.gif" width="29" height="14" alt="" /><a href="blog-category-170.html">海外キャラクター (5)</a></li>
<li class="caNo7 caNosub"><img src="https://blog-imgs-44-origin.fc2.com/p/a/r/paro2day/catB1n.gif" width="29" height="14" alt="" /><a href="blog-category-7.html">不明壁紙 (11)</a></li>

接下来就是链接获取的问题。我在获取链接的同时也需要获取后面的文本,便于给文件夹分类。
如何准确的获取链接呢?仔细观察一下,每一个链接都有一个共同的地方:blog-category-,从这里入手吧w

struct SubIndex
{
public int urlFirstIndex;
public int urlLastIndex;
public int nameFirstIndex;
public int nameLastIndex;
}    
//从硬盘读取我复制好的部分
FileStream fileStream = File.OpenRead("C:/Users/Yukiy/Desktop/getUrls.txt");
StreamReader streamReader = new StreamReader(fileStream);
string fileStr = streamReader.ReadToEnd();
//遍历出网址出现的次数与字符位置
List<SubIndex> subStrs = new List<SubIndex>();
int count = 0;
int index = 0;
while(fileStr.IndexOf("blog-category-",index + 1) != -1)
{
count++;
index = fileStr.IndexOf("blog-category-", index + 1);
//保存索引
SubIndex subStr;
subStr.urlFirstIndex = index;
subStr.urlLastIndex = fileStr.IndexOf("\"", index) - 1;
subStr.nameFirstIndex = subStr.urlLastIndex + 3;
subStr.nameLastIndex = fileStr.IndexOf(" (", subStr.nameFirstIndex) - 1;
subStrs.Add(subStr);
}

blog-category-的两边获取出现的链接和分类名的首字符与末字符索引,然后使用String.Substring()函数截取。计划通√
获取了链接后怎么获得图片呢?先打开链接读取源代码吧。要注意的是这里要使用UTF8的形式读取流。
然而并不是所有的图片都在同一页上,还要能够翻页才行。

<!--■ENDナビゲーション■-->
<div id="center_navi">|<a href="http://daybreakforce.blog129.fc2.com/" title="先頭ページへ戻る">ホーム</a>|<a href="http://daybreakforce.blog129.fc2.com/?all" title="記事の一覧を表示する">全記事一覧</a>|<a href="http://daybreakforce.blog129.fc2.com/category105-1.html" title="次のページへ移動する">次のページ</a> >>  </div>

观察源码得到可以翻页的文章都会加上次のページへ移動する这个title,点击下一页之后地址的变化也是有规律的。
第一页:http://daybreakforce.blog129.fc2.com/blog-category-105.html
下一页:http://daybreakforce.blog129.fc2.com/category105-1.html
所以这是又是一个关键点。

//读取网页源码
string webStr;
Picture picture = (Picture)obj;
failedToGetHtml:
try
{
WebRequest request = WebRequest.Create(picture.sourseUrl);
WebResponse response = (WebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream, Encoding.UTF8);
webStr = reader.ReadToEnd();
//查询该页面是否有下一页
for (int i = 1; webStr.IndexOf("次のページへ移動する") != -1; i++)
{
//删除原来的 次のページへ移動する 便于下一个页面判断
webStr = webStr.Replace("次のページへ移動する", string.Empty);
//获取下一页链接
int firstIndex = Path.GetFileName(picture.sourseUrl).LastIndexOf("-") + 1;
int lastIndex = Path.GetFileName(picture.sourseUrl).LastIndexOf(".") - 1;
string secondUrl = @"http://daybreakforce.blog129.fc2.com/category" + Path.GetFileName(picture.sourseUrl).Substring(firstIndex, lastIndex - firstIndex + 1) + "-" +i + ".html";
//写入原网页源码中
request = WebRequest.Create(secondUrl);
response = (WebResponse)request.GetResponse();
dataStream = response.GetResponseStream();
reader = new StreamReader(dataStream, Encoding.UTF8);
string secondWebUrl = reader.ReadToEnd();
webStr += secondWebUrl;
}
}
catch
{
goto failedToGetHtml; //读取失败后重复读取
}

换浏览器查看源代码,观察到大图和缩略图的差别是后面多了一个字符s
大图:https://blog-imgs-95-origin.fc2.com/d/a/y/daybreakforce/20161106093301a33.jpg
缩略图:https://blog-imgs-95-origin.fc2.com/d/a/y/daybreakforce/20161106093301a33s.jpg

<a href="https://blog-imgs-95-origin.fc2.com/d/a/y/daybreakforce/20161106093301a33.jpg" target="_blank"><img src="https://blog-imgs-95-origin.fc2.com/d/a/y/daybreakforce/20161106093301a33s.jpg" alt="俺の妹がこんなに可愛いわけがない 黒猫 06_剑空藏月" border="0" width="540" height="338" /></a>

以此为依据获取图片的链接,我使用了正则表达式来获取链接。(这里有一个反复出现的图片,把它排除掉)

List<string> urls = new List<string>();
string regexStr = @"https://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)+\.jpg";  //查找.jpg的正则表达式
Regex reg = new Regex(regexStr, RegexOptions.IgnoreCase);  //正则表达式的类实例化
MatchCollection mc = reg.Matches(webStr);  //进行匹配
for (int i = 0; i < mc.Count; i++)
{
//避免搜集固定存在的一个图片
if(mc[i].Groups[0].Value != @"https://blog-imgs-110.fc2.com/d/a/y/daybreakforce/20170917_060838_270.jpg")
{
urls.Add(mc[i].Groups[0].Value);
}
}
//删除缩略图url
for (int i = 0; i < urls.Count; i++)
{
if (urls[i].LastIndexOf("s") == urls[i].LastIndexOf(".") - 1)
{
urls.RemoveAt(i);
}
}

好了,这下得到了链接和图片分类名称,开始下载吧ww


下载代码不贴出来了,具体看源码。
同时也使用了多线程编程,看源码吧XD
大体的方法就是这些,有更好的方法请回复我,我在这里先抛砖引玉了。

写在后面

我感觉爬虫其实就是抓住网页关键存在的地方,自己再随着规律写代码来完成任务。
你要图包?
1LbTgIH5sUy9LUJzVKUQvEQ x7s4
源码:http://yukino.nos-eastchina1.126.net/code/WebSpider.zip

结尾点题

我老婆

AMD平台安装Mac High Sierra:啃一口黑苹果如何?

前言


一直在折腾的黑苹果终于成功了。
从初三到高三,断断续续尝试了几次,都是死在显卡驱动上。这次换了张GTX960再来,显卡很简单就驱了。
我使用了来自国外AMD OS X论坛的教程:https://forum.amd-osx.com/viewtopic.php?f=24&t=4127
在此发出此教程的中文翻译和我安装的流程。

我的配置

  • CPU:AMD X4 860K
  • 主板:技嘉F2A88XM-DS2
  • 显卡:GTX 960 2G
  • 声卡:集成Realtek ALC887 8声道音效芯片
  • 网卡:板载Realtek RTL8111F千兆网卡

原文中使用的镜像以及过程中使用的程序都在这里:
链接: https://pan.baidu.com/s/1X1HAQKABBvI5Q4YA3MMFpA 密码: adrd

教程

开始之前电脑需要为UEFI启动模式
(以下文本翻译自原教程)

安装之前

使用Transmac将镜像文件(HighSierraV3Unofficial.dmg)Restore至USB设备
务必以管理员的方式运行Transmac

BIOS设置

设置你的SATA接口为AHCI

开启 USB Legacy support 和 EHCI handoff

关闭 Serial Port

开启 CSM 和 UEFI for Hard drives and USB devices
即将BOOT启动顺序设置为UEFI优先

设置 Secure Boot 为 Other OS

这里的一些设置可能找不到,没有的话就不用设置。

开始安装

选择启动方式界面的按键因主板而异,自己上网查一下。
以UEFI的方式从你的USB设备启动系统

选择Boot macOS from HighSierraAMD 按回车键

如果这是一次新的安装MAC(你还没分区),选择Disk Utility,点击Continue

在左边的饼状图里选择你要作为系统盘的区域,点击Partition按钮将其分离出来。
左边格式选择为GUID/Extended Journaled,填入你的磁盘名字,点击Apply。
(这一步你也可以选择抹去你的分区再创建,见仁见智了ww 反正目的是要建立出MAC系统的磁盘。)

返回。选择 Reinstall macOS,点击Continue

点击Continue

都点击Agree

选择刚才的系统盘,点Continue

开始复制文件,几分钟后会重启

再次以UEFI的方式从你的USB设备启动系统

选择Boot macOS from HighSierraAMD

选择 Utilities 下的 Open Terminal

输入 cd /Volumes/HighSierraAMD at the prompt
再输入 preinstall

输入你之前创建的系统盘的名字

等它完成之后,点击苹果标志,选择Restart

再次以UEFI的方式从你的USB设备启动系统

选择 Boot macOS Install from 你刚才输入的系统盘名字

之后会进入安装界面,安装时间取决于你的硬盘。一般为25到45分钟。

安装完成后会自动重启

再次以UEFI的方式从你的USB设备启动系统

选择Boot macOS from HighSierraAMD

进入以后从点击Utilities里面的Terminal

输入cd /Volumes/HighSierraAMD
再输入amd

输入你之前选择的系统盘名称

完成后的一分钟将自动重启

再次以UEFI的方式从你的USB设备启动系统

A卡用户

对于使用AMD显卡的人,这里你需要以下步骤来驱动显卡

  1. 在Clover界面选择Options – Configs 选择 config_injectATI
  2. 添加你的FakeID到Options – Graphics Injector

你需要视频?
   0:00 / 01:30速度洗脑循环 00:00

选择 Boot macOS Install from 你刚才输入的系统盘名字

选择你的国家

选择你的键盘

对着图片上的光标点就好




输入你的信息

点击Customize

对着光标自己点

在地图上选择你的时区

全不选

开启或关闭Siri随你

完成你的安装

系统安装完成后

驱动安装

镜像直接集成了网卡驱动和万能声卡驱动,我的直接就驱了。若是没有正常驱动的话就去找解决方案吧。
关于声卡驱动参考:http://bbs.pcbeta.com/viewthread-1508611-1-1.html

AMD主板请放弃声卡驱动仿冒,直接使用万能驱动

N卡驱动:我使用WebDriver,需要注意的一点是需要找到对应版本的WebDriver。(对于这个镜像的WebDriver我已经放在上面的百度云里)
A卡驱动:按照上面教程里说的方式来。

安装Clover

照着视频做就好
   0:00 / 0:00速度洗脑循环 00:00视频加载失败

我在这里出现了问题:只有UEFI U盘的方式才能启动MAC,用硬盘无法启动MAC或者从硬盘启动后驱动出现问题。
解决方案:
使用Clover Configurator来挂在U盘和硬盘的EFI分区,然后将U盘的EFI分区里面的EFI文件夹复制到硬盘EFI分区里覆盖。(你也可以使用EFI MountainShow来代替Clover Configurator挂载分区)

进入另一个U盘的WinPE,使用EasyUEFI添加Clover的启动项并设为首选,问题解决。(你也可以先从之前的U盘启动电脑里的Windows来操作)

请移步 http://bbs.pcbeta.com/viewthread-1791875-1-1.html 回复一下,让更多人看到吧
享受你的MAC!

Moonligt:手机串流实现流畅玩PC游戏

Steam

关于Moonlight

Moonlight能使你的PC游戏串流到其他设备上。

Moonlight (formerly known as Limelight) is an open source implementation of NVIDIA’s GameStream protocol. We implemented the protocol used by the NVIDIA Shield and wrote a set of 3rd party clients.

What does this mean for you? Moonlight allows you to stream your collection of games from your GameStream-compatible PC to any supported device and play them remotely. Moonlight is perfect for gameplay on the go without sacrificing the graphics quality of your gaming computer.

访问官网:https://moonlight-stream.com

正文

想在手机上推游戏,我尝试过TeamViewer,但画面并不流畅。
TeamViewer的远程控制应该是架设在服务器上的,我需要一个本地的分流软件,然后就找到了现在的Moonlight。
恰巧我的配置符合Moonlight的要求,Game Start!(中二脸XD

三色绘恋

具体教程在:https://www.iplaysoft.com/moonlight-stream.html 我就不重复造轮子了ww

但是,虚拟手柄玩游戏并不是很满意,我从淘宝入了一根Otg转接线,打算在手机上接入Xbox手柄玩。

Sublime Text 3 For Mac最新版安装密钥及使用方法

前言

Sublime Text是一款十分优秀的代码编辑器,使用它修改各种配置文件十分地方便。对于Mac用户来说,它是一个不错的选择。

优点

  • 体积较小,运行速度快
  • 文本功能强大
  • 支持编译功能且可在控制台看到输出
  • 内嵌python解释器支持插件开发以达到可扩展目的
  • Package Control:ST支持的大量插件可通过其进行管理

正文

build 3176

准备

最新版:https://pan.baidu.com/s/1T_6Bex2yYFlJ5zYRxdP1eA 密码:6rnx

安装密钥:

1
2
3
4
5
6
7
8
9
10
11
12
13
—– BEGIN LICENSE —–
sgbteam
Single User License
EA7E-1153259
8891CBB9 F1513E4F 1A3405C1 A865D53F
115F202E 7B91AB2D 0D2A40ED 352B269B
76E84F0B CD69BFC7 59F2DFEF E267328F
215652A3 E88F9D8F 4C38E3BA 5B2DAAE4
969624E7 DC9CD4D5 717FB40C 1B9738CF
20B3C4F1 E917B5B3 87C38D9C ACCE7DD8
5F7EF854 86B9743C FADC04AA FB0DA5C0
F913BE58 42FEA319 F954EFDD AE881E0B
—— END LICENSE ——

安装方法

打开Finder,按住command+shift+g,输入/private/etc

修改Hosts文件,在最下面加入
127.0.0.1 www.sublimetext.com
127.0.0.1 license.sublimehq.com

安装Sublime Text后打开,右上角将显示Unregister,打开Help>Enter License,输入上面的密钥即可。

如果有能力,请支持正版。

解决windows10磁盘占用100%并出现卡顿、假死现象

win10娘

前言

原帖子发布于百度贴吧:http://tieba.baidu.com/p/4359125660
现根据回复对教程做进一步修订。

解决流程

(原写于 2016-02-17 22:16 初三)
先上我的配置(随便找了个软件,这不是槽点)

lz自从上win10以来经常会出现这种情况:磁盘突然占用100%然后开始出现假死现象,电脑卡住,点击任何软件没反应,播放的歌曲卡住,主机硬盘灯长亮不闪,过了数秒或者数十秒又恢复正常像是没发生一样…
之后我发现我并不是个例,像我一样出现类似情况的有很多例如:

…更多的不在列举
刚开始我也是开使各种求助度娘,然后就有了类似下列的做法:关闭家庭组服务、关闭WindowsDefender、关闭Windows Search、关闭ipv6等等,几乎百度的方法我全试过,结果然并卵。
好吧,这下百度的方法行不通了,只能自己来解决了。
我开始试着仔细观察出现问题的帖子,初步判断是硬盘的问题,然后在win8PE上和win10上分别使用DiskGenius进行扫描坏道处理。

显而易见的,win10上扫描坏道出现了成吨的timeout坏道,而win8PE上并没有这种问题
现在思路是这样的:

  1. 难道是我的sata硬盘线有问题?尝试着换了一根,结果依旧没用。
  2. 硬盘4K对齐出现了错误?我重新进行了分区并4K对齐,没用。

当时的心情就是Mlgb老子不干了!换回win7继续用了一个月。
时间推到上周末晚上,心血来潮买了个win7专业版key,又想上win10了。但上了win10之后还是出现了同样的问题,继续折腾吧。

回到上次的思路:硬盘有问题。
开始各种刷帖子整理症状。
偶然间看到一位吧友说到可能是APU驱动有问题?
我想我的不是APU也出现了此类问题,然后就是驱动。
和硬盘有关的驱动就是启动方式的驱动了,然后就…嗯,有思路了,从ahci驱动入手,设备管理器查看了一下ahci驱动。win10是微软自带的ahci驱动,驱动日期在2006年,这么老的驱动时间能不出问题么?我换成了AMD提供的最新的ahci启动驱动之后……
问题解决!

解决方法

(更新于 2018-07-21 23:52)

微软官方解决方案

https://support.microsoft.com/en-us/help/3083595/task-manager-might-show-100-disk-utilization-on-windows-10-devices-wit

AMD平台

下载驱动并解压到一个位置:https://pan.baidu.com/s/1udw7uu3CDD_J_XA0ZWtfmw 密码: c3er
然后按住win+X,选择设备管理器->展开IDEATA/ATAPI控制器->在标准sata ahci控制器上右键属性->驱动程序>更新驱动程序->浏览计算机以查找驱动程序软件

然后浏览,选择 刚才解压出来的SBDrv文件夹,之后点击下一步会执行安装,安装完毕后会提示重启计算机,重启之后问题就解决了w

intel平台

下载并安装intel快速存储驱动:
https://downloadcenter.intel.com/zh-cn/product/55005/-RST-