某科学的爬虫原理
为了防止B站不给过这篇文章,大家自己猜测爬的是哪个图片站吧
正文
网上关于此站的教程多是python的,我讲一下C#实现过程中会遇到哪些技术问题
咱们一步一步来,写爬虫嘛,我认为第一步应该做到:知己知彼百战不殆
先来分析,找规律
这次开刀的网站,很有规律性
www.pixiv.net/search.php?s_mode=s_tag&word=miku 【关键字模式】
www.pixiv.net/search.php?s_mode=s_tag_full&word=miku 【标签模式】
差别只是mode不一样
再来看一下页数
www.pixiv.net/search.php?word=miku&order=date_d&p=2 【关键字模式】
www.pixiv.net/search.php?word=miku&s_mode=s_tag_full&order=date_d&p=2 【标签模式】

方法此站,需要搞个 User-Agent
感谢 cucmberium さん
[http://cucmberium.hatenablog.com/entry/2016/06/20/214109]
该博客的方法亲测有效

下载图片代码:
string url=“网址”;
string time=DateTime.Now.ToString("yyyyMMddHHm");
string downloadpath = Environment.CurrentDirectory+@"\"+"Cover"+@"\"+time+url.Substring(url.Length-4,4);
WebClient mywebclient = new WebClient();
mywebclient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36");
mywebclient.Headers.Add("Referer", url);
mywebclient.DownloadFile(url, downloadpath);

爬虫核心代码
string remoteUri =网址;
HtmlDocument doc = new HtmlDocument();
using (WebClient myWebClient = new WebClient())
{
myWebClient.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36");
doc.Load(myWebClient.OpenRead(remoteUri));
}

上面是最难鼓捣的东西,下面还有个东西需要考虑
https://i.pximg.net/img-original/img/2018/12/13/19/56/00/72095984_p0.png 【原图】
https://i.pximg.net/c/240x240/img-master/img/2018/12/13/19/56/00/72095984_p0_master1200.jpg 【缩略图】

https://i.pximg.net/img-master/img/2018/12/13/14/47/52/72092738_p0_master1200.jpg 【原图】
https://i.pximg.net/c/240x240/img-master/img/2018/12/13/14/47/52/72092738_p0_master1200.jpg 【缩略图】

唉~,我目前见到这两种。
f*ck,本来想根据缩略图链接,得到原图链接的
结果,原图有两种(可能以上)的形式
这就需要写个判断了,判断是否能打开网址

//C# 判断网站是否能访问或者断链
public bool CheckUrlVisit(string url)
{
try
{
WebClient mywebclient = new WebClient();
mywebclient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36");
mywebclient.Headers.Add("Referer", url);
string msg= mywebclient.DownloadString(url); //获取html源码
if (msg!="")
{
return true;
}
}
catch (WebException webex)
{
return false;
}
return false;
}

唉~,经过这么一顿分析,写出爬虫

然鹅,理论上都是放屁,下载速度跟蜗牛一样(貌似得鼓捣多线程的)
唉~

