MVS获取当前相机支持的像素格式
获取相机当前像素格式可以使用MV_CC_GetEnumValue,调用 阅读更多…
这次爬取的网站图片URL并不规则,直接以UUID命名(性价比极高的反爬手段),下载完成后只能得到一堆不规则文件名的文件,所以还需要再多加一步重命名处理。
第四步 重命名(不是每次都需要这个步骤)
当文件名不规则的时候,需要把每页图片按页码来重命名,做法也很多。如果直接在代码里用http get的方式下载图片,推荐在下载的时候直接用页面作为文件名保存文件。如果用下载工具进行下载的话,就需要提取URL的同时保存页码-文件名的映射关系,以便在下载完成后重命名。
重命名的实现方式也不唯一,其中一种是在代码里直接生成批处理语句,把打印内容分完列以后,等所有图片下载完成,把重命名语句那列复制粘贴到命令提示符运行即可。
不过我在爬取的时候疏忽了,没有保存映射关系,只有一串URL,当然也不是没办法,URL列表其实已经隐含了页码和文件名的对应关系,第一条URL就是1.jpg,第二条就是2.jpg……依此类推。
首先确定一下最终目标:生成批处理语句,格式是 ren 旧文件名 新文件名。
这时候就该祭出EXCEL大杀器了(当然在程序里给url跑个循环,在循环里生成批处理语句也一样),把URL粘贴到A列,B列用公式填充 =”ren “&RIGHT(A1,36)&” “&ROW()&”.jpg” ,就可以生成批量重命名所需要的语句(right函数的长度36来自于32位uuid加上后缀名.jpg,一共36个字符)。
如果这个公式一时半会憋不出来,或者文件名长度不固定也没关系,按下面这个方法操作就可以:
excel生成批处理语句的时候,需要注意如下事项:
static void Main(string[] args)
{
string ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36";
using WebClient client = new WebClient();
for (int i = 2; i < 45; i++)
{
client.Headers["User-Agnet"] = ua;
string resp = client.DownloadString($"http://www.abcabc.com/index.php/pages/181818?Pages_page={i}");
string img = Regex.Match(resp, @"(?<=.*)https.*?(?=""\s+id=""image"")").Value;
Console.WriteLine($@"{i}\{img}\ren {Regex.Match(img, "[a-z0-9]+.jpg").Value} {i}.jpg");
//打印结果分三个部分:页码,url,重命名语句,中间以\符号分隔,
//这样就可以在粘贴到EXCEL后,用\符号进行数据分列。
//第二列是URL,批量下载后,把第三列复制到命令提示符进行重命名
Thread.Sleep(500);
//稍微延个时,过快的话很可能触发某些网站的反爬策略
//因为下载网页源码往往会在瞬间完成;
//这一点不像浏览器,获取到源码后还要下载资源,并把页面渲染出来
//网络稍微不稳定或者资源体积过大,整个过程将极为耗时。
}
Console.WriteLine("OK");
Console.Read();
}
这个例子比上面要简单得多,所有图片全在一个页面里,全程调试工具就能完成:F12打开调试工具,遍历所有img对象并拿到src属性里的url,扔到迅雷的批量任务即可,甚至严格来说这个都不能算是爬虫,虽然没什么挑战性,但也是一种特别典型的场景。
流程还是一样:分析页面,提取URL,下载。
先拿到所有img,遍历打印src的值,观察特征可以发现所有符合要求的图片都以https://photo开头。
在选择器上加个条件,以https://photo开头,得到符合要求的图片,复制地址下载即可。
放一张爬下来的图片治愈一下