文档章节

小蜘蛛,爬妹子

Jerry_Baby
 Jerry_Baby
发布于 2016/07/10 20:03
字数 670
阅读 132
收藏 4

写这篇文章之前,不得不介绍一下我同事兼队友:洋叔。小三十的人了,还没个女朋友,看着周围这一个个结婚谈恋爱的,我俩也着实羡慕。“哎!大伟,这个小妹儿不赖!“几乎每天洋叔都看着 QQ 上蹦出来的相亲网站广告这样招呼我(我羞涩了,捂脸逃跑)我一时兴起,打算给他个福利,于是就有了这个小爬虫,专门抓妹子图片,满足一下这个老屌丝

整体上来说,这个爬虫并没有用到什么高级的功能,都是用最基础的模块实现的,爬取的网站是这个 妹子图

url 分析

先来分析一下这个网站的 url。我把这个网站分为两个部分,第一个是这个 http://www.meizitu.com/a/list_1_1.html,我叫它 index.html。这个页面下包含了这个网站的所有小项,每个小项点进去之后是这项的所有妹子的图片,也就是类似 http://www.meizitu.com/a/5399.html 这样的地址,我称之为 img.html。由此可知,我需要分析 url 的规律:读 index.html 页面,找出 img.html 页面,读 img.html 页面,分析图片 url 并下载到本地。稍微分析一下还可以发现,index.html 的最后一个数字就是这个网站的页码,所以可以根据这个规律,把这个网站的所有图片都爬下来,于是动手开干

代码实现

这个实现起来非常简单,首先我是定义了一个函数,读 index.html 匹配出 img.html 之后,迭代每个 img.html 然后把图片地址和索引存在一个字典里面:

def getImageUrls(page):                                                                                                                                                                        
    '''获取每个模块下的图片链接'''
    image_items = {}
​
    url_index = 'http://www.meizitu.com/a/list_1_%s.html' % page
​
    prog_index = r'<h3 class="tit"><a href="(.*)".*</a></h3>'
    prog_pages = r'<img alt=.*src="(.*)" /><br />'
​
    index_items = re.findall(prog_index, urllib2.urlopen(url_index).read())
​
    for index, item in enumerate(index_items):
        image_item = re.findall(prog_pages, urllib2.urlopen(item).read())
        image_items[index] = image_item
​
    return image_items

下载这部分用了一个多进程加速,这里注意下进程数量,我用公司跳板机 32 核所以我开了 24 个进程下载(原谅我这么无耻 😝):

def BeginDownload(page):
​
    pool = multiprocessing.Pool(24)
    store_dir = '/home/chendawei/demo/img/%s/' % page
        
    image_items = getImageUrls(page)
    for index in image_items:
        for i, image in enumerate(image_items[index]):
            if os.path.exists(store_dir):
                store_file = store_dir + str(index) + '-' + str(i) + '.jpg'
                pool.apply_async(downloadImage, (image, store_file))
            else:
                store_file = store_dir + str(index) + '-' + str(i) + '.jpg'
                os.makedirs(store_dir)
                pool.apply_async(downloadImage, (image, store_file))
    pool.close() 
    pool.join()

我下载了 45 页总共 1.2G,预计全部图片 2G 左右,完整代码 https://github.com/JerryBaby/Spider/blob/master/meizi.py

拿去爽吧 😍

© 著作权归作者所有

共有 人打赏支持
上一篇: Linux GRE
下一篇: 2016.06.06
Jerry_Baby
粉丝 25
博文 33
码字总数 35098
作品 0
海淀
系统管理员
私信 提问
Python 从爬虫到数据分析(一)定义

1.什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字...

China丶小可
2018/09/04
0
0
5个python爬虫教材,让小白也有爬虫可写,含视频教程!

认识爬虫   网络爬虫,如果互联网是一张蜘蛛网,网络爬虫既是一个在此网上爬行的蜘蛛,爬了多少路程即获取到多少数据。 python写爬虫的优势   其实以上功能很多语言和工具都能做,但是用...

柯西带你学编程
2018/06/12
0
0
最新最准确各大搜索引擎蜘蛛名称

1、百度蜘蛛:Baiduspider 网上的资料百度蜘蛛名称有BaiduSpider、baiduspider等,都洗洗睡吧,那是旧黄历了。百度蜘蛛最新名称为Baiduspider。日志中还发现了Baiduspider-image这个百度旗下...

专注97
2016/01/14
211
0
百度蜘蛛、Google蜘蛛、360蜘蛛如何辨别?

/** * 蜘蛛控制 */function spiderControl() { $useragent = strtolower ( $SERVER ['HTTP_USER_AGENT'] ); $allow_spiders = array ('Baiduspider', 'Googlebot' ); foreach ( $allow_spide......

lixiaokai2008
2015/04/15
0
0
python爬头条妹子,为了不被查水表,就不好 多介绍了

先来几张漂亮小姐姐照片 首先需要安装的Python库: requests urllib 直接pip安装就好了 接着我们在网页上打开今日头条,在搜索栏搜索“街拍”(视频教程) 因为这里面的小姐姐多,漂亮 之后,...

Python新世界
2018/07/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

dockerfile 镜像构建(1)

通用dockerfile 利用已经编译好的.jar 来构建镜像。要构建的目录如下: [root@iZuf61quxhnlk9m2tkx16cZ demo_jar]# docker build -t demo:1 . 运行镜像: [root@iZuf61quxhnlk9m2tkx16cZ de...

Canaan_
15分钟前
0
0
Redis radix tree源码解析

Redis实现了不定长压缩前缀的radix tree,用在集群模式下存储slot对应的的所有key信息。本文将详述在Redis中如何实现radix tree。 核心数据结构 raxNode是radix tree的核心数据结构,其结构体...

阿里云云栖社区
18分钟前
4
0
vue import 传入变量

在做动态添加component的时候,传入变量就会报错,出现以下错误信息: vue-router.esm.js?fe87:1921 Error: Cannot find module '@/components/index'. at eval (eval at ./src/components ......

朝如青丝暮成雪
20分钟前
0
0
Flutter开发 Dio拦截器实现token验证过期的功能

前言: 之前分享过在Android中使用Retrofit实现token失效刷新的处理方案,现在Flutter项目也有“token验证过期”的需求,所以接下来我简单总结一下在Flutter项目中如何实现自动刷新token并重...

EmilyWu
21分钟前
5
0
final Map可以修改内容,final 常量不能修改

1.final Map 可以put元素,但是不可以重新赋值 如: final Map map = new HashMap(); map = new HashMap();//不可以 因为栈中变量map引用地址不能修改 2.final str = “aa”; str = "bb";/......

qimh
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部