[picture_scrapy] 关于美女爬虫的一个集合
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 搭配,干活不累。如果有更多电脑的话可以更好的配合。
安装教程 && 使用说明
- 在某台机器上启动
redis-server path/to/redis.conf
注意配置中注释掉bind 127.0.0.1 ::1
- 在多个电脑上分别
git clone 本项目地址
, 然后到工程目录下使用pip install -r requirement.txt
或者使用pipenv shell
- 在 settings.py 中设置正确的
REDIS_IP
和REDIS_PORT
参数。 - 分别使用
scrapy crawl xxx
爬取指定的网站 - 分别使用
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
- 代理ip: 当前没有遇到封锁ip的现象,所以未实现ip池,如果后期有需要可以增加。
- 下载文件去重复功能,发现本地已经存在的文件就不再下载了。 – done
- 爬取网页去重复功能,爬取过的网页就不再爬了(某些主页列表例外) - 即使重启机器/爬虫,如何实现? – 使用
RedisCrawlSpider
?
参与贡献
- Fork 本项目
- 新建 Feat_xxx 分支
- 提交代码
- 新建 Pull Request
欢迎扫码关注作者,获取更多信息哦~另外如果本源码对你有所帮助,可以点赞以支持作者的持续更新。
[picture_scrapy] 关于美女爬虫的一个集合相关推荐
- python3 27270网站美女爬虫(二)
对于27270网站美女 进行了一个尝试 使用 python3 库: urllib BeautifulSoup lxml 主要是下载静态网页的图片 显示从IP代理网站上获取代理池,然后在从静态页面获取图 ...
- 怎样实现两个线程共享一个集合_面试高频考察点:几种线程安全的Map解析
Java中平时用的最多的Map集合就是HashMap了,它是线程不安全的. 看下面两个场景: 1.当用在方法内的局部变量时,局部变量属于当前线程级别的变量,其他线程访问不了,所以这时也不存在线程安全不 ...
- 【Groovy】集合遍历 ( 操作符重载 | 集合中的 “ << “ 操作符重载 | 使用集合中的 “ << “ 操作符添加一个元素 | 使用集合中的 “ << “ 操作符添加一个集合 )
文章目录 一.集合中的 " << " 操作符重载 1.使用集合中的 " << " 操作符添加一个元素 2.使用集合中的 " & ...
- 有3个集合, 从其中一个集合中删除同时存在于另外两个集合的元素
如下分享的邮件,在博客园做个记录,以便以后使用. 在这里,其实也想倡导一下程序员要具有的分享精神.鼓励大家多分享,平时有什么新的收获,最好在team里做个分享 .分享也是一种很好的事情.对团队来说,可 ...
- 求一个集合的所有子集 Python实现
求一个集合的所有子集 Python实现 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sat ...
- tcl中的string trim使用时需要注意substring是一个集合
如题: string trim string <substring> substring 默认为空 (bin) 72 % string trim "abcdefga" ...
- 递归算法之排列组合-求一个集合S的m个元素的组合和所有可能的组合情况
求一个集合S的m个元素组合的所有情况,并打印出来,非常适合采用递归的思路进行求解.因为集合的公式,本身就是递归推导的: C(n,m) = C(n-1,m-1) + C(n-1,m). 根据该公式,每次 ...
- Python--set集合讲解; 什么是集合?创建一个集合;集合的操作函数;
什么是集合? 创建一个集合 第一种方式: set={"1","2"} 第二种方式 list = ['1','2'] set1 = set(list) 集合的操作 ...
- java list 拆分_Java面试题怎么确保一个集合不能被修改?
点击上方"千锋Java学院",选择"置顶公众号" 每天一道面试模拟真题及解析 课前导读 ●回复"每日一练"获取以前的题目,持续更新! ●我希 ...
- scala通过mkString方法把一个集合转化为一个字符串
Problem 如果你想要把集合元素转化为字符串,可能还会添加分隔符,前缀,后缀. Solution 使用mkString方法来打印一个集合内容,下面给一个简单的例子: scala> val a ...
最新文章
- 王爽汇编语言C硬盘读写,王爽汇编语言学习笔记(范文).doc
- linux is not unix由来,一些奇怪的 unix 指令名字的由来
- python对列表的删除,挺有意思的东西
- Yum (yellow dog update manager)
- isinstance()函数的应用
- VS2010编译:_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
- Flexsim国外视频教程
- 程序员 你努力的方向对吗?
- 永久免费使用免费20G空间的推荐
- Windows11、win11、Windows10、win10系统安装
- 新零售背景下“农村淘宝“线下和线上服务
- python爬虫——https请求
- 雅加达(印度尼西亚)出差小记
- PKI 公钥基础设施
- 计算机考试水平划分,计算机水平等级划分
- os.path.abspath() 和 os.path.realpath() 区别
- 【游戏建模全流程】ZBrush生物模型雕刻教程:豹纹壁虎
- MTK tpd驱动框架
- 【SEO优化技术】企业网站微创新方法
- 2014 ACM亚洲区域赛 - 北京现场赛