八月入职新公司,发现公司的爬虫系统主要用Java实现的偶尔用一些python,为此又看了下Java爬虫,顺便用之前同事推荐我的美女图片网站练手(之前推荐时候python爬虫勉强算经验丰富,感觉难度太低没去爬,这次刚好拿来练手),附上网址http://www.mm131.com/,(对了,这个网站爬取要注意在请求头中加上refer的参数,不然你会发现爬到的是百度和腾讯的图标),在踩了几个Java的坑后完成了页面的爬取,但感觉接下来都是老套路,无非是按网站几大分类循环爬取进行页面网址拼接之类的,就想省事减少页面分析工作,想了下可行度极高,因为网站的分类和图片链接的域名都是一样的,可以以此为过滤条件。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------思路如下:
根据该网站相关链接爬取整个图片网站可行,主要有两点要注意:
(1)url链接的存储和消重;
解决方法:用布隆过滤器或直接用列表(List)进行存储和去重,每次将爬取完毕的url存储到列表(或布隆过滤器),并写入到文件中进行记录,在停止后重新爬取时直接将文件内的链接读取到列表(或布隆过滤器)中即可,为了减小内存消耗,就不记录图片的链接,图片链接可根据我们设定的图片命名方式直接利用os模块的os.path.isfile(filepath)或os.path.exisits(filepath)检查该图片链接是否在对应路径已存在该名称的图片。
(2)图片的分类和存储
解决方法:直接根据图片和人物分级创建文件夹存储图片,如mingxing(明星),chemo(车模),qipao(旗袍)。。
链接示例:
http://www.mm131.com/mingxing/2016.html
http://img1.mm131.me/pic/2016/1.jpg
爬取:1. 直接利用python的Scrapy框架进行分布式爬取;
2. (推荐推荐)自己写个,用python的urllib或requests(推荐)模块,再用上yield(生成器),简单实现分布式盘爬取,效率更高;
3. 用Java的HttpClient(功能强,更广泛)或Jsoup(使用简单)。
ps:今天大致就这样了,今天浪的太厉害,没啥时间写代码了(懒),,,浪荡的周日啊。。。