Hawk: 无编程抓取淘女郎的所有高清照片

简介:

1.这是什么鬼?

哦?美女?
最近看了这一篇文章:http://cuiqingcai.com/1001.html

大概说的是用Python和Pyspider(这货好像是我的一位师兄写的,吓尿),抓取淘宝淘女郎的所有美女照片。只是里面还要敲一堆代码,还要用其他动态js运行框架,看着好不烦人啊。

Hawk是沙漠君开发的一款爬虫和清洗工具,目前已经在Github开源:
https://github.com/ferventdesert/Hawk

最近沙漠君很开心啊,开发的Hawk在GitHub上上百个star,还有歪果仁来帮忙做英文国际化,哈哈哈。

那既然如此,我也用Hawk练练手,基本无需编程,直接无视动态js调用,下载高清图片。造福各位园友。

这简直就是用Hawk做坏事,顺便炫技啊~~

2.先让兄弟们饱饱眼福?

先看看抓取的效果,我才不直接放高清图呢!
image_1aj6540v01l2r16t41sn31o681jpf5v.png-435.4kB
恩,先去下载软件吧,在百度云盘(这货最近经常脑抽),如果你之前下过软件,一定要更新Hawk开头的dll和exe文件,其他不需要。因为勤劳的沙漠君又更新代码了...
http://pan.baidu.com/s/1c8zBiQ 密码:4iy0
注意三个后缀名为config和xml的配置文件一定要下载回来,之后双击Hawk.exe.
我已经把工程文件共享出来了。地址在:
https://github.com/ferventdesert/Hawk-Projects/tree/master/淘女郎

在Hawk菜单->文件->加载工程,把project.xml加载进来。会是下面的样子:
image_1aj60o43kdusbibtco90c1pc29.png-18kB
然后,双击“主流程”(点这三个字所在的位置)

之后任务就会被加载进来,在右下角显示所有的任务和数据表:
image_1aj627e2913bck1r1gi216jd195l9.png-20.2kB

接下来,在算法视图上,双击主流程,就可以看到这个任务的窗口和属性配置框了:
image_1aj629ekg175h1lc21er5nh3e4om.png-84.6kB
哈哈,不仅有详细的名字,地址,甚至还有身高体重等详细信息,各位慢慢看。

说好的保存图片呢?别急别急,这只是在模拟运行模式,保存图片这种有副作用的任务是不会执行的。

那我的图片保存在哪里了?注意看到刚才的project.xml文件同目录下,还有主流程.py,这是一个用于配置流程的py脚本。我把一部分内容贴在下面:


#########下面是正式配置文件
#是否要抓取图片?
get(主流程.etls,-1).Enabled=True;

#照片保存路径
path='D:\淘女郎'

#将相册表保存起来吗?
get(相册.etls,-1).Enabled=True;

#保存大图吗?False则只保存小图
find(相册.etls,lambda x:x.Name=='大图').Enabled=True

#每个女郎最多抓取多少张照片
照片数量控制.Take=1000

find(相册.etls,lambda x:x.Name=='图片位置').NewValue=path;

我应该不用解释了吧?对文件进行修改,注意编码格式是UTF-8,然后在模块管理卷展栏的主流程位置点右键,执行任务脚本:
image_1aj62jeam47ska11d4p1j451dq313.png-14.2kB
它就会对当前的任务进行修改,如果下面的日志文件显示:
image_1aj62k9dv1r1e15mu3mcj9a1a0t1g.png-3.7kB
那么脚本没有语法错误,已经成功提交。

之后,激动人心的时刻到了,在属性对话框点击执行:
image_1aj62nhqn1agd94gh591g5dapp1t.png-10.8kB
然后,20个并行抓取任务线程就已经开始了:
image_1aj62olin1q82bafkgc1n0cch72a.png-20.9kB
系统会自动维持线程列表中的线程数量,只有旧任务工作完毕后,才会添加新的线程进来。
下面的三个表,分别是淘女郎信息表,相册信息表,和照片信息表。采集完毕后,你可以点右键,导出到excel,csv..
image_1aj62r4721j2g1tch1a7g1g8t5ng2n.png-7.5kB
至于图片嘛,看看你设置的那个文件夹吧:
image_1aj62t6171lmh1jpc13jf1hlg1r9t34.png-45.9kB

Enjoy!

3.代码是怎么写的?

Hawk本身是开源的,本质上是个编译和解释器。生成的xml就是代码和控制逻辑。很多个模块构成处理链条,你可以控制链条上的模块数量,就能观察数据是如何被采集和处理的。
整个程序包含两个流程:

  • 主流程:负责从页面生成淘女郎的详细信息列表
  • 相册:负责从淘女郎的id和姓名,获取其对应的照片。

主流程:获取女孩信息

先看主流程,我们把调试数量改为1,勾选显示调试详情,点击下一步:
image_1aj6359r1uc61t0teih1fj4vbg3h.png-15.6kB

会有下面的信息显示出来,绿色代表该模块输入的列,蓝色代表输出的列。在调试模块属性中显示的是当前模块的基本信息和配置。

image_1aj63ol1t122ihj974v1mdg1tvc4b.png-41.4kB

基本的逻辑就是,生成从1到4700页的区间数,然后将它们分别转换成url:
https://mm.taobao.com/json/request_top_list.htm?page={0}
然后通过从爬虫采集,获取女孩的列表,再根据用户的id,组合出详情页,并把详情页的信息附加到当前表。将表的内容写入到“淘女郎”表,再针对每个女孩的id,去获取她的相册信息。

相册:获取单个女孩的照片

如果你直接双击相册模块,肯定是出现下面的情况,什么数据都没有:
image_1aj643ha01hpn5cd1r51kak1r0v4o.png-12.4kB
为什么呢?因为没有提供数据源。在主流程中,相册模块会读取主流程的id和名字两个列的内容,作为输入参数。但独立运行时,需要两个从文本生成来提供任务参数。

因此,我们勾选那两个从文本生成的单选框,表示启用之:
再点刷新,是不是就都有了?
image_1aj647fqh1p7kur6a6h1ke01sh755.png-76.5kB

你也可以单步调试,看看这个模块是怎么获得的。基本流程如下:

  1. 通过女孩的id,组合出相册的url,比如下面:
    mm.taobao.com/self/album/open_album_list.htm?_charset=utf-8&user_id%20=687471686
  2. 通过一个网页采集器,名称为相册列表获取相册
  3. 再通过相册ID,获取相册的URL。相册的URL需要构造请求,获得的是Json。
  4. 把Json的头部Jsonp和末尾的括号去掉,形成正确格式的json
  5. 送入文本到Json转换模块,得到的是字典
  6. 使用Python转换器,提取里面的picList,再转换为文档列表。这就是照片列表
  7. 将路径和相册id,组合成实际要保存的图片的位置
  8. 加入保存超链接文件,会把指定url的文件保存到指定位置

欣赏完相册是怎么执行的之后,在切换回主流程之前,记得把那两个从文本生成关掉。否则会影响主流程的调用。
有两种方法,一种是在主流程任务那里,执行任务脚本,系统会自动操作。
也可以直接在相册的属性对话框中,点击编辑集合,把最上面两个的启用去掉:
image_1aj64ovh3d9t17nost2re5rn45i.png-67.7kB

值得一提的是,模块上都有标签属性,你可以给某一组的模块打上固定的标签,在外部的python代码中通过标签搜索这些模块,进行批量处理。具体可以参考刚才的那个py文件。

3.下一篇文章的内容?

限于篇幅,本文没有详细地讲解如何模拟动态请求,如何探测请求的内容,这些都会在下一篇文章介绍。
Hawk系列文章:
Hawk-数据抓取工具:简明教程
Hawk: 20分钟无编程抓取大众点评17万数据
etlpy: 并行爬虫和数据清洗工具
有任何问题,欢迎随时交流。


作者:热情的沙漠
出处:http://www.cnblogs.com/buptzym/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类: 开源项目

本文转自FerventDesert博客园博客,原文链接:http://www.cnblogs.com/buptzym/p/5511781.html,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
存储 搜索推荐
小红书InstantID来了, 一张照片几秒钟就能生成个性化图片
【2月更文挑战第24天】小红书InstantID来了, 一张照片几秒钟就能生成个性化图片
33 2
小红书InstantID来了, 一张照片几秒钟就能生成个性化图片
|
2月前
|
数据采集 JSON JavaScript
Python爬虫案例:抓取猫眼电影排行榜
python爬取猫眼电影排行榜数据分析,实战。(正则表达式,xpath,beautifulsoup)【2月更文挑战第11天】
68 2
Python爬虫案例:抓取猫眼电影排行榜
|
9月前
|
容器
借助开源项目,又好又快的实现视频文件”剧情连拍(剧情截图)”功能
借助开源项目,又好又快的实现视频文件”剧情连拍(剧情截图)”功能
651 0
借助开源项目,又好又快的实现视频文件”剧情连拍(剧情截图)”功能
|
10月前
|
人工智能
【必备工具】兔哥视频助手,一键配音、字幕、配图,让你的视频秒变高大上!
通过输入文字,自动生成视频,让你的视频制作更加高效。
|
10月前
|
开发工具
语音聊天室源码技术美颜滤镜功能的配置
美颜滤镜功能从现身以来一直受到人们的火爆追捧,所以为了顺应市场的需求,开发语音聊天室源码平台也必须要有美颜滤镜功能,今天我就将语音聊天室源码技术美颜滤镜功能的配置知识分享给大家。
语音聊天室源码技术美颜滤镜功能的配置
|
12月前
|
编解码 算法 数据可视化
用 Real-ESRGAN 拯救座机画质,自制高清版动漫资源
用 Real-ESRGAN 拯救座机画质,自制高清版动漫资源
128 0
|
数据采集 Python
Python爬虫系列16-采集网易音乐百万好听的歌曲进行批量下载
业精于勤而荒于嬉,行成于思而毁于随。 吃得苦中苦,方为人上人,受得累中累,方成富贵人。完全赞同
Python爬虫系列16-采集网易音乐百万好听的歌曲进行批量下载
|
数据采集 Python
❤️不到100行把流式热榜截屏合成一张?爬虫终极秘诀【建议收藏】❤️
爬虫如何应对流式加载页面,这100行代码请收藏!
127 0
❤️不到100行把流式热榜截屏合成一张?爬虫终极秘诀【建议收藏】❤️