picture_scrapy

项目地址: https://github.com/HeLiangHIT/picture_scrapy

.=======================================================================================================.
||           _          _                                                                              ||
||   _ __   (_)   ___  | |_   _   _   _ __    ___           ___    ___   _ __    __ _   _ __    _   _  ||
||  | '_ \  | |  / __| | __| | | | | | '__|  / _ \  _____  / __|  / __| | '__|  / _` | | '_ \  | | | | ||
||  | |_) | | | | (__  | |_  | |_| | | |    |  __/ |_____| \__ \ | (__  | |    | (_| | | |_) | | |_| | ||
||  | .__/  |_|  \___|  \__|  \__,_| |_|     \___|         |___/  \___| |_|     \__,_| | .__/   \__, | ||
||  |_|                                                                                |_|      |___/  ||
|'-----------------------------------------------------------------------------------------------------'|
||                                                                                   -- 美女图片爬取框架。||
|'====================================================================================================='|
||                                                  .::::.                                             ||
||                                                .::::::::.                                           ||
||                                                :::::::::::                                          ||
||                                                ':::::::::::..                                       ||
||                                                .:::::::::::::::'                                    ||
||                                                  '::::::::::::::.`                                  ||
||                                                    .::::::::::::::::.'                              ||
||                                                  .::::::::::::..                                    ||
||                                                .::::::::::::::''                                    ||
||                                     .:::.       '::::::::''::::                                     ||
||                                   .::::::::.      ':::::'  '::::                                    ||
||                                  .::::':::::::.    :::::    '::::.                                  ||
||                                .:::::' ':::::::::. :::::.     ':::.                                 ||
||                              .:::::'     ':::::::::.::::::.      '::.                               ||
||                            .::::''         ':::::::::::::::'       '::.                             ||
||                           .::''              '::::::::::::::'        ::..                           ||
||                        ..::::                  ':::::::::::'         :'''`                          ||
||                     ..''''':'                    '::::::.'                                          ||
|'====================================================================================================='|
||                                                                              helianghit@foxmail.com ||
||                                                                       https://github.com/HeLiangHIT ||
'======================================================================================================='

项目介绍

使用 scrapy 实现的图片爬取框架,融合了 UserAgentMiddleware/ChromeDownloaderMiddleware 中间件,RedisSetPipeline 管道用于将爬取到的图片保存到redis的set类型中,另外提供一个多线程异步下载器从redis中依次取出图片地址进行批量下载并保存。

下载结果示例:



PS. 爬取过程看似有点缓慢实际很惊人,感觉爬一晚上后得到的图片这辈子都已经看不完?了…美图太多看不过来现在已经审美疲劳了。

软件架构

实现了四个美女图片的爬虫:

  • http://jandan.net/ooxx : ./picture_scrapy/spiders/jandan_spider.py scrapy crawl jiandan
  • http://www.mzitu.com/all/: ./picture_scrapy/spiders/mzitu_spider.py scrapy crawl mzitu
  • http://www.meizitu.com/: ./picture_scrapy/spiders/meizitu_spider.py scrapy crawl meizitu
  • http://www.mmjpg.com/: ./picture_scrapy/spiders/mmjpg_spider.py scrapy crawl mmjpg

这样做的优势是"支持分布式爬取 + 分布式下载",比如我就使用 mac 爬取图片地址,然后用 windows 连上移动硬盘下载图片, win/mac 搭配,干活不累。如果有更多电脑的话可以更好的配合。

安装教程 && 使用说明

  1. 在某台机器上启动 redis-server path/to/redis.conf 注意配置中注释掉 bind 127.0.0.1 ::1
  2. 在多个电脑上分别 git clone 本项目地址, 然后到工程目录下使用 pip install -r requirement.txt 或者使用 pipenv shell
  3. 在 settings.py 中设置正确的 REDIS_IPREDIS_PORT 参数。
  4. 分别使用 scrapy crawl xxx 爬取指定的网站
  5. 分别使用 python picture_downloader.py --key='xxx' --dir='xxx' 下载指定网站的图片,更多参数python picture_downloader.py --help
异步协程下载器:从 redis 里面连续读取图片json信息,然后使用协程下载保存到指定文件夹中。有效的json举例如下:
`{"url": "http://www.a.com/a/a.jpg", "name": "a.jpg", "folder": "a", "page":"www.a.com"}`Usage:picture_download.py [--dir=dir] [--ip=ip] [--port=port] [--key=key] [--empty_exit=empty_exit] [--concurrency=concurrency]picture_download.py --version
Options:--dir=dir                    select picture save dir. * default: '$HOME/Pictures/scrapy/'--ip=ip                      select redis ip. [default: 127.0.0.1]--port=port                  select redis ip. [default: 6379]--key=key                    select redis key. [default: picture:jiandan]--empty_exit=empty_exit      select if exit when redis set empty. [default: true]--concurrency=concurrency    select the concurrency number of downloader. [default: 20]

example of mine:

function start_crawl(){name=$1rm -f log/name.logscrapy crawl ${name} &sleep 2 && python picture_downloader.py --key=picture:${name} --dir=/Users/heliang/Pictures/scrapy/${name} --empty_exit=0 --concurrency=20
}
function stop_crawl(){name=$1while [ $(ps -ef | grep "scrapy crawl ${name}" | grep -v grep | wc -l) -ge 1 ]; dops -ef | grep "scrapy crawl ${name}" | awk '{print $2}' | xargs kill # 停止爬虫sleep 1done
}
function clear_all(){while [ $(ps -ef | grep "scrapy crawl" | grep -v grep | wc -l) -ge 1 ]; dops -ef | grep 'scrapy crawl' | awk '{print $2}' | xargs kill # 停止所有爬虫donewhile [ $(ps -ef | grep "chromedriver" | grep -v grep | wc -l) -ge 1 ]; dops -ef | grep chromedriver | awk '{print $2}' | xargs kill -9 # 清理后台可能残留的 chromedriver 进程donerm -f log/*.log
}start_crawl jiandan # meizitu mzitu mmjpg

todo

  1. 代理ip: 当前没有遇到封锁ip的现象,所以未实现ip池,如果后期有需要可以增加。
  2. 下载文件去重复功能,发现本地已经存在的文件就不再下载了。 – done
  3. 爬取网页去重复功能,爬取过的网页就不再爬了(某些主页列表例外) - 即使重启机器/爬虫,如何实现? – 使用RedisCrawlSpider

参与贡献

  1. Fork 本项目
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

欢迎扫码关注作者,获取更多信息哦~另外如果本源码对你有所帮助,可以点赞以支持作者的持续更新。

[picture_scrapy] 关于美女爬虫的一个集合相关推荐

  1. python3 27270网站美女爬虫(二)

    对于27270网站美女 进行了一个尝试 使用 python3 库: urllib BeautifulSoup lxml 主要是下载静态网页的图片 显示从IP代理网站上获取代理池,然后在从静态页面获取图 ...

  2. 怎样实现两个线程共享一个集合_面试高频考察点:几种线程安全的Map解析

    Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的. 看下面两个场景: 1.当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全不 ...

  3. 【Groovy】集合遍历 ( 操作符重载 | 集合中的 “ << “ 操作符重载 | 使用集合中的 “ << “ 操作符添加一个元素 | 使用集合中的 “ << “ 操作符添加一个集合 )

    文章目录 一.集合中的 " << " 操作符重载 1.使用集合中的 " << " 操作符添加一个元素 2.使用集合中的 " & ...

  4. 有3个集合, 从其中一个集合中删除同时存在于另外两个集合的元素

    如下分享的邮件,在博客园做个记录,以便以后使用. 在这里,其实也想倡导一下程序员要具有的分享精神.鼓励大家多分享,平时有什么新的收获,最好在team里做个分享 .分享也是一种很好的事情.对团队来说,可 ...

  5. 求一个集合的所有子集 Python实现

    求一个集合的所有子集 Python实现 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat ...

  6. tcl中的string trim使用时需要注意substring是一个集合

    如题: string trim string <substring> substring 默认为空 (bin) 72 % string trim "abcdefga" ...

  7. 递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况

    求一个集合S的m个元素组合的所有情况,并打印出来,非常适合采用递归的思路进行求解.因为集合的公式,本身就是递归推导的: C(n,m) = C(n-1,m-1) + C(n-1,m). 根据该公式,每次 ...

  8. Python--set集合讲解; 什么是集合?创建一个集合;集合的操作函数;

    什么是集合? 创建一个集合 第一种方式: set={"1","2"} 第二种方式 list = ['1','2'] set1 = set(list) 集合的操作 ...

  9. java list 拆分_Java面试题怎么确保一个集合不能被修改?

    点击上方"千锋Java学院",选择"置顶公众号" 每天一道面试模拟真题及解析 课前导读 ●回复"每日一练"获取以前的题目,持续更新! ●我希 ...

  10. scala通过mkString方法把一个集合转化为一个字符串

    Problem 如果你想要把集合元素转化为字符串,可能还会添加分隔符,前缀,后缀. Solution 使用mkString方法来打印一个集合内容,下面给一个简单的例子: scala> val a ...

最新文章

  1. 王爽汇编语言C硬盘读写,王爽汇编语言学习笔记(范文).doc
  2. linux is not unix由来,一些奇怪的 unix 指令名字的由来
  3. python对列表的删除,挺有意思的东西
  4. Yum (yellow dog update manager)
  5. isinstance()函数的应用
  6. VS2010编译:_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
  7. Flexsim国外视频教程
  8. 程序员 你努力的方向对吗?
  9. 永久免费使用免费20G空间的推荐
  10. Windows11、win11、Windows10、win10系统安装
  11. 新零售背景下“农村淘宝“线下和线上服务
  12. python爬虫——https请求
  13. 雅加达(印度尼西亚)出差小记
  14. PKI 公钥基础设施
  15. 计算机考试水平划分,计算机水平等级划分
  16. os.path.abspath() 和 os.path.realpath() 区别
  17. 【游戏建模全流程】ZBrush生物模型雕刻教程:豹纹壁虎
  18. MTK tpd驱动框架
  19. 【SEO优化技术】企业网站微创新方法
  20. 2014 ACM亚洲区域赛 - 北京现场赛

热门文章

  1. 计算机恶搞bat代码,电脑重启bat代码怎么设置 电脑整人bat代码大全
  2. 【十分钟开发物联网】楼宇访客门禁管理(Wifi版)
  3. 2021上半年软考数据库系统工程师真题完整版
  4. 免费RDP报表工具试用感受
  5. svn管理ad元件库_AD元器件库服务器管理指南
  6. java面试之反射机制
  7. 16进制储存的农历信息的正确打开方式
  8. log4cpp 详解及使用操作
  9. 卫星通信系统按照工作轨道分类
  10. tf卡可以自己裁剪成nm卡_真假TF卡鉴定方法