OLAINDEX-Magic:OLAINDEX的魔改版本,支持多账户挂载

这是什么?

一款 OneDrive 目录文件索引应用,基于优雅的 PHP 框架 Laravel5.8 搭建,并通过 Microsoft Graph 接口获取数据展示,支持多类型帐号登录,多种主题显示,简单而强大。

前言

读了代码,原作者很厉害,MS Graph接口封装得很优雅,前端也写得挺好。相比之下的我自惭形秽,想想二开只不过是把大佬的代码弄乱而已。

OLAINDEX许久没更新了,我决定尝试为它添加新功能,并长期维护,谨以此学习Laravel框架。

演示站点https://magic.yukino.co/
原项目地址:https://github.com/WangNingkai/OLAINDEX
魔改项目地址https://github.com/YukiCoco/OLAINDEX-Magic

魔改内容

  • 多Onedrive账户支持:
    • 可同时挂载多个Onedrive网盘
    • 图床可选择上传到不同的盘区
    • 多网盘命令支持
  • 一些小修复:
    • 一键获取下载链接
    • 图床复制链接
    • Ajax删除文件
    • ……

如何 绑定&使用多账户

登录Azure:https://portal.azure.com/https://portal.azure.cn/ (世纪互联)
点击 Azure Active Directory
点击 应用注册
点击 新注册 名字任意取,账户类型如图,重定向URL填你页面所显示的redirect_uri

接下来配置API权限,操作看gif:演示图片链接

接下来点击 概述 复制 应用程序(客户端) ID(client_id
点击 证书和密码 添加新客户端密码并复制(client_secret

在绑定页面填入client_id client_secret 选择好账户类型即可绑定。

绑定多账户见:

用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

结尾点题

我老婆