有时候

只是在人群中多看了一眼

就再也没办法忘掉那些容颜

小帅b在普通的一天

上着普通的网

不小心打开了一个不太普通的网站

https://www.mzitu.com/

从此进入了不普通的一天

看着不普通的妹纸

动起了不普通的心思

这么多妹纸

不爬取下来

可惜了

那么

接下来就是

学习 python 的正确姿势

首先我们来分析一下

打开这个妹纸的网站首页

可以看到一共有 211 页

其中

每一页有不同妹纸的主图

再点击进去就是每个妹纸的详情组图

每一个妹纸的组图中的图片数量不同

比如其中一个妹纸就有 46 张

够了

我们回到首页

看一下源代码

可以发现

每一页的每一个妹纸都被放在 li 标签里面了

再来

当我们点击第 2 页的时候

可以发现 URL 变了

https://www.mzitu.com/page/2/

这个我们遇到很多次了

直接当做变量处理

所以第一个思路就是拿到每一个页面的所有妹纸的地址

在这里

我们可以使用 for 循环来获取每一页的内容

bs4获取每一个地址然后放到 urls 里面去

def get_page_urls():
    for i in range(1,212): baseurl = 'https://www.mzitu.com/page/{}'.format(i) html = request_page(baseurl) soup = BeautifulSoup(html, 'lxml') list = soup.find(class_='postlist').find_all('li') urls= [] for item in list: url =item.find('span').find('a').get('href') urls.append(url) return urls

在这里 212 页太多了

小帅b来获取一页的数据

运行一下得到第一页每个妹纸的 URL

https://www.mzitu.com/171304https://www.mzitu.com/175090https://www.mzitu.com/171608https://www.mzitu.com/171795https://www.mzitu.com/171041https://www.mzitu.com/175154https://www.mzitu.com/170736https://www.mzitu.com/174947https://www.mzitu.com/174762https://www.mzitu.com/170806https://www.mzitu.com/174433https://www.mzitu.com/174860https://www.mzitu.com/173541https://www.mzitu.com/173063https://www.mzitu.com/173109https://www.mzitu.com/173760https://www.mzitu.com/170563https://www.mzitu.com/170263https://www.mzitu.com/166044https://www.mzitu.com/173721https://www.mzitu.com/168454https://www.mzitu.com/171747https://www.mzitu.com/173845https://www.mzitu.com/173635

下一步

拿到每一页的每个妹纸的地址之后

当然是要从每个地址进去

获取每个妹纸的所有组图

遍历一下刚刚获取到的 list

    for url in list_page_urls:        download(url)

那么进入一个妹纸的详情页面的时候

我们需要获取

组图的所有图片数量

组图的名称(真特么sao)

图片的地址

知道了这些信息之后

我们就可以很简单获取了

def download(url):    html = request_page(url)    soup = BeautifulSoup(html, 'lxml')    total = soup.find(class_='pagenavi').find_all('a')[-2].find('span').string    title = soup.find('h2').string    image_list = []    for i in range(int(total)):        html = request_page(url + '/%s' % (i + 1))        soup = BeautifulSoup(html, 'lxml')        img_url = soup.find('img').get('src')        image_list.append(img_url)    download_Pic(title, image_list)

在这里我们获取了 total 总页数

获取到了组图题目 title

根据总页数进行遍历

一个页面可以获取到组图中的一张图片

然后我们把这些图片都放到组图集合中

接着就可以开始下载了

我们可以根据这个组图的名字来创建文件夹

然后将下载的图片放进去


def download_Pic(title, image_list): # 新建文件夹 os.mkdir(title) j = 1 # 下载图片 for item in image_list: filename = '%s/%s.jpg' % (title,str(j)) print('downloading....%s : NO.%s' % (title,str(j))) with open(filename, 'wb') as f: img = requests.get(item,headers=header(item)).content f.write(img) j+=1

ok

我们运行一下吧

可以看到

每张图片都被我们爬下来了

名字太他妈引入犯罪

小帅b不得不打马赛克

反正你们阅片无数

心中自然无码

打开文件夹可以看到

每一个美女都根据组图生成文件夹

每个文件夹就是组图里面的图片

我这马赛克打得是不是很棒?

但其实

发现我们在爬的时候

有点慢了

还记不记得上次摸鱼提到的多线程?

python爬虫14 | 就这么说吧,如果你不懂多线程和线程池,那就去河边摸鱼!

我们来开启多线程试试

根据我们一开始获取到每个页面的多个妹纸的 URL 来使用线程池

def download_all_images(list_page_urls):    # 获取每一个详情妹纸    works = len(list_page_urls)    with concurrent.futures.ThreadPoolExecutor(works) as exector:        for url in list_page_urls:            exector.submit(download,url)

这次我们再爬取试试看

可以看到这次就不是一组一组的爬了

而是多个线程同时爬取多个组图

OMG

我的文件夹

不行了

我赶紧删掉

完整代码

公众号发送「mm」获取吧

警告

本文仅作为学习例子

你别乱来啊

咱们下回见

peace

点个好看啊~~(破音)

python爬虫15 | 害羞,用多线程秒爬那些万恶的妹纸们,纸巾呢?的更多相关文章

  1. Python爬虫进阶五之多线程的用法

    前言 我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 首先声明一点! 多线程和多进程是不一样的!一个是 thread ...

  2. Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(人人网)(下)

    Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(下) 自动使用cookie的方法,告别手动拷贝cookie http模块包含一些关于cookie的模块,通过他们我们可以自动的使用co ...

  3. [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息

    [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫   版权声明: ...

  4. Python爬虫实战(2):爬取京东商品列表

    1,引言 在上一篇<Python爬虫实战:爬取Drupal论坛帖子列表>,爬取了一个用Drupal做的论坛,是静态页面,抓取比较容易,即使直接解析html源文件都可以抓取到需要的内容.相反 ...

  5. Python爬虫个人记录(三)爬取妹子图

    这此教程可能会比较简洁,具体细节可参考我的第一篇教程: Python爬虫个人记录(一)豆瓣250 Python爬虫个人记录(二)fishc爬虫 一.目的分析 获取煎蛋妹子图并下载 http://jan ...

  6. Python爬虫教程-12-爬虫使用cookie爬取登录后的页面(人人网)(上)

    Python爬虫教程-12-爬虫使用cookie(上) 爬虫关于cookie和session,由于http协议无记忆性,比如说登录淘宝网站的浏览记录,下次打开是不能直接记忆下来的,后来就有了cooki ...

  7. Python爬虫入门教程: 27270图片爬取

    今天继续爬取一个网站,http://www.27270.com/ent/meinvtupian/ 这个网站具备反爬,so我们下载的代码有些地方处理的也不是很到位,大家重点学习思路,有啥建议可以在评论的 ...

  8. Python爬虫实战(1):爬取Drupal论坛帖子列表

    1,引言 在<Python即时网络爬虫项目: 内容提取器的定义>一文我们定义了一个通用的python网络爬虫类,期望通过这个项目节省程序员一半以上的时间.本文将用一个实例讲解怎样使用这个爬 ...

  9. Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐

    一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...

随机推荐

  1. C# 获得资源文件下图片的路径

    最终实现正确的代码是: button8.Image = System.Drawing.Image.FromFile(@"..\\..\\Resources\\GAOJIBAN.png&quo ...

  2. 把TXT GB2312文件转换成TXT UTF8文件

    /// <summary>        /// 把TXT GB2312文件转换成TXT UTF8文件        /// </summary>        /// < ...

  3. Kaggle "Microsoft Malware Classification Challenge"——就是沙箱恶意文件识别,有 Opcode n-gram特征 ASM文件图像纹理特征 还有基于图聚类方法

    使用图聚类方法:Malware Classification using Graph Clustering 见 https://github.com/rahulp0491/Malware-Classi ...

  4. 51Nod 1250 排列与交换 —— DP

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1250 看了半天... 把第一问想成逆序对的话似乎很容易想了,新加入 ...

  5. codevs2503失恋28天......(背包dp)

    503 失恋28天-缝补礼物  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold   题目描述 Description 话说上回他给女孩送了n件礼物,由于是廉价的所以 ...

  6. $CF1141A Game 23$

    这题很简单啊 可以用\(DFS\)来打 毕竟是 \(2^x*3^y=m 输出x+y啊\) 这是最简单的做法 #include <bits/stdc++.h> using namespace ...

  7. CSS怎样改变行内样式(通过外部级联样式表) css !important用法CSS样式使用优先级判断

    CSS样式优先级 行内>内部>外部 使用!important的css定义是拥有最高的优先级的.只是在ie6下出了一点小的bug,注意书写方式一般可以轻松避开的. CSS中的!importa ...

  8. HTML+CSS(12)

    n  CSS浮动和清除 Float:让元素浮动,取值:left(左浮动).right(右浮动). Clear:清除浮动,取值:left(清除左浮动).right(清除右浮动).both(同时清除上面的 ...

  9. mysql中返回当前时间的函数或者常量

    引用:http://blog.sina.com.cn/s/blog_6d39dc6f0100m7eo.html 1.1 获得当前日期+时间(date + time)函数:now() 除了 now() ...

  10. 关于Adaper的相关用法

    使用BaseAdapter的话需要重载四个方法: getCount getItem getItemId getView getView是用来刷新它所在的ListView的.在每一次item从屏幕外滑进 ...