我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python3 实现妹子图爬虫

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python3 实现妹子图爬虫

一.项目说明

1.项目介绍

本项目通过使用Python 实现一个妹子图图片收集爬虫,学习并实践 BeautifulSoup、Request,Urllib 及正则表达式等知识。在项目开发过程中采用瀑布流开发模型。

2.用到的知识点

本项目中将会学习并实践以下知识点:

  1. Python3 编程
  2. 使用 BeautifulSoup 解析 HTML 页面
  3. 使用 Request 爬取 Web 页面
  4. 使用正则表达式提取所需的关键信息
  5. urllib下载图片
3.项目效果

爬取后的目录结构如下:(只爬取了一个专题的)



每个目录中都有一系列的图片:


(是不是感觉有点小激动,我也是嫌官网上的查看太麻烦了,so...爬下来慢慢看)

二.基础工具

1.安装Chrome,为了方便查看源代码,推荐开发者经常使用的Chrome浏览器



2.安装python3,如果你还不会安装,请看下基础安装python,然后安装pip,(打开你安装的文件夹,找到Script,将这个文件夹的路径添加到环境变量中)

使用下面命令测试下,当然window系统需要打开cmd输入

[php] view plain copy
print?
  1. pip --version  
pip --version

安装成功之后


3.window上安装Beautifulsoup,request,lxml

[python] view plain copy
print?
  1. pip install PackageName  
pip install PackageName
第一步:windows安装lxml


第二步,安装库BeautifulSoup4

[python] view plain copy
print?
  1. pip install beautifulsoup4  
pip install beautifulsoup4

第三步,安装库Requests

[python] view plain copy
print?
  1. pip install requests  
pip install requests

4.使用PyCharm进行开发,具体请自行google。

三.项目实现

1.目标

本个项目中我们将分别按照如下步骤:

  1. 抓取每个专题的等信息
  2. 抓取每个专题的列表,并按列表新建文件夹
  3. 抓取每一个列表的图片,把每一个MM的写真图片按照文件夹保存到本地

2.程序结构


3.流程说明

  1. 通过 Request 获得目标页面源码,之后通过 BeautifulSoup 解析概源码,通过正则表达式提取出专题链接
[python] view plain copy
print?
  1. from bs4 import BeautifulSoup  
  2. import requests  
  3. import urllib  
  4. start_url="http://www.mzitu.com/"  
  5. def get_mei_channel(url):  
  6.     web_data=requests.get(url)  
  7.     soup=BeautifulSoup(web_data.text,'lxml')  
  8.     channel=soup.select('body > div.main > div.sidebar > div.widgets_hot > span > a')  
  9.     for list in channel:  
  10.         print(list.get('href'))  
  11. #获取妹子图首页热门专题的链接  
  12. get_mei_channel(start_url)  
from bs4 import BeautifulSoup
import requests
import urllib
start_url="http://www.mzitu.com/"
def get_mei_channel(url):
    web_data=requests.get(url)
    soup=BeautifulSoup(web_data.text,'lxml')
    channel=soup.select('body > div.main > div.sidebar > div.widgets_hot > span > a')
    for list in channel:
        print(list.get('href'))
#获取妹子图首页热门专题的链接
get_mei_channel(start_url)
[html] view plain copy
print?
  1. http://www.mzitu.com/tag/xiuren  
  2. http://www.mzitu.com/tag/xinggan  
  3. http://www.mzitu.com/tag/youhuo  
  4. http://www.mzitu.com/tag/zhifu  
  5. http://www.mzitu.com/tag/shuiyi  
  6. http://www.mzitu.com/tag/qingchun  
  7. http://www.mzitu.com/tag/xiaohua  
  8. http://www.mzitu.com/tag/rosi  
  9. http://www.mzitu.com/tag/bikini  
  10. http://www.mzitu.com/tag/leg  
  11. http://www.mzitu.com/tag/zouguang  
  12. http://www.mzitu.com/tag/meitun  
  13. http://www.mzitu.com/tag/tgod  
  14. http://www.mzitu.com/tag/shishen  
  15. http://www.mzitu.com/tag/heisi  
  16. http://www.mzitu.com/tag/miitao  
  17. http://www.mzitu.com/tag/ugirls  
  18. http://www.mzitu.com/tag/mistar  
  19. http://www.mzitu.com/tag/bololi  
  20. http://www.mzitu.com/tag/yougou  
  21. http://www.mzitu.com/tag/imiss  
  22. http://www.mzitu.com/tag/dianannan  
http://www.mzitu.com/tag/xiuren
http://www.mzitu.com/tag/xinggan
http://www.mzitu.com/tag/youhuo
http://www.mzitu.com/tag/zhifu
http://www.mzitu.com/tag/shuiyi
http://www.mzitu.com/tag/qingchun
http://www.mzitu.com/tag/xiaohua
http://www.mzitu.com/tag/rosi
http://www.mzitu.com/tag/bikini
http://www.mzitu.com/tag/leg
http://www.mzitu.com/tag/zouguang
http://www.mzitu.com/tag/meitun
http://www.mzitu.com/tag/tgod
http://www.mzitu.com/tag/shishen
http://www.mzitu.com/tag/heisi
http://www.mzitu.com/tag/miitao
http://www.mzitu.com/tag/ugirls
http://www.mzitu.com/tag/mistar
http://www.mzitu.com/tag/bololi
http://www.mzitu.com/tag/yougou
http://www.mzitu.com/tag/imiss
http://www.mzitu.com/tag/dianannan
   2.通过 Request 获得每个专题链接的目标页面源码,之后通过 BeautifulSoup 解析概源码,通过正则表达式提取出列表链接,并提取列表标题,新建文件夹。

[python] view plain copy
print?
  1. #获取专题的列表页  
  2. def get_page_from(channel,pages):  
  3.     channel=channel+'/page/{}'.format(pages)  
  4.     web_data=requests.get(channel)  
  5.     soup=BeautifulSoup(web_data.text,'lxml')  
  6.     if soup.find('body > div.main > div.main-content > div.currentpath'):  
  7.         pass  
  8.     else:  
  9.         lists = soup.select('#pins > li > span > a')  
  10.         for lists in lists:  
  11.             path='E:\MM\{}'.format(lists.get_text())  
  12.             isExists = os.path.exists(path)  
  13.             if not isExists:  
  14.                 print("[*]偷偷新建了名字叫做" + path + "的文件夹")  
  15.                 os.mkdir(path)  
  16.             else:  
  17.                 # 如果目录存在则不创建,并提示目录已存在  
  18.                 print("[+]名为" + path + '的文件夹已经创建成功')  
  19.             for i in range(1,101):  
  20.                 get_list_info(lists.get('href'),i,path)  
  21.             # page_list.insert_one({'url': lists.get('href'), 'title': lists.get_text()})  
  22. get_page_from('http://www.mzitu.com/tag/xiuren',1)  
#获取专题的列表页
def get_page_from(channel,pages):
    channel=channel+'/page/{}'.format(pages)
    web_data=requests.get(channel)
    soup=BeautifulSoup(web_data.text,'lxml')
    if soup.find('body > div.main > div.main-content > div.currentpath'):
        pass
    else:
        lists = soup.select('#pins > li > span > a')
        for lists in lists:
            path='E:\MM\{}'.format(lists.get_text())
            isExists = os.path.exists(path)
            if not isExists:
                print("[*]偷偷新建了名字叫做" + path + "的文件夹")
                os.mkdir(path)
            else:
                # 如果目录存在则不创建,并提示目录已存在
                print("[+]名为" + path + '的文件夹已经创建成功')
            for i in range(1,101):
                get_list_info(lists.get('href'),i,path)
            # page_list.insert_one({'url': lists.get('href'), 'title': lists.get_text()})
get_page_from('http://www.mzitu.com/tag/xiuren',1)
  3.通过 Request 获得每个专题链接的目标页面源码,之后通过 BeautifulSoup 解析概源码,通过正则表达式提取出图片链接,本网站的图片是非常有规律的,这里用了点技巧来构造图片链接,以及做了异常处理,保存图片的到文件夹中

[python] view plain copy
print?
  1. #获取列表页的详细信息  
  2. def get_list_info(url,page,mmpath):  
  3.     # url='http://www.mzitu.com/69075'  
  4.     web_data=requests.get(url)  
  5.     soup=BeautifulSoup(web_data.text,'lxml')  
  6.     class="lazy" data-src=soup.select('body > div.main > div.content > div.main-image > p > a > img')  
  7.     for class="lazy" data-src in class="lazy" data-src:  
  8.         image_url=class="lazy" data-src.get('class="lazy" data-src').split('net')[1].split('01.')[0]  
  9.     if page < 10:  
  10.         pages='0'+str(page)  
  11.     else:  
  12.         pages =str(page)  
  13.     url_split='http://i.meizitu.net'+image_url+'{}.jpg'.format(pages)  
  14.     try:  
  15.         html = urlopen(url_split)  
  16.         name = url_split.split('/')[5].split('.')[0]  
  17.         data = html.read()  
  18.         fileName = '{}\meizi'.format(mmpath) + name + '.jpg'  
  19.         fph = open(fileName, "wb")  
  20.         fph.write(data)  
  21.         fph.flush()  
  22.         fph.close()  
  23.     except Exception:  
  24.         print('[!]Address Error!!!!!!!!!!!!!!!!!!!!!')  
#获取列表页的详细信息
def get_list_info(url,page,mmpath):
    # url='http://www.mzitu.com/69075'
    web_data=requests.get(url)
    soup=BeautifulSoup(web_data.text,'lxml')
    class="lazy" data-src=soup.select('body > div.main > div.content > div.main-image > p > a > img')
    for class="lazy" data-src in class="lazy" data-src:
        image_url=class="lazy" data-src.get('class="lazy" data-src').split('net')[1].split('01.')[0]
    if page < 10:
        pages='0'+str(page)
    else:
        pages =str(page)
    url_split='http://i.meizitu.net'+image_url+'{}.jpg'.format(pages)
    try:
        html = urlopen(url_split)
        name = url_split.split('/')[5].split('.')[0]
        data = html.read()
        fileName = '{}\meizi'.format(mmpath) + name + '.jpg'
        fph = open(fileName, "wb")
        fph.write(data)
        fph.flush()
        fph.close()
    except Exception:
        print('[!]Address Error!!!!!!!!!!!!!!!!!!!!!')
4.多线程实现抓取,并构造页码

[python] view plain copy
print?
  1. from multiprocessing import Pool  
  2. from mmspider_channel import channel_list  
  3. from mmspider_parase import get_page_from  
  4. def get_pages_from(channel):  
  5.     for i in range(1,100):  
  6.             get_page_from(channel,i)  
  7.   
  8. if __name__ == '__main__':  
  9.     pool = Pool()  
  10.     # pool = Pool(processes=6)  
  11.     pool.map(get_pages_from,channel_list.split())  
from multiprocessing import Pool
from mmspider_channel import channel_list
from mmspider_parase import get_page_from
def get_pages_from(channel):
    for i in range(1,100):
            get_page_from(channel,i)

if __name__ == '__main__':
    pool = Pool()
    # pool = Pool(processes=6)
    pool.map(get_pages_from,channel_list.split())
四.整个项目源码

项目目录如下


模块源码已经给出,具体自己整合吧!



转载自:http://blog.csdn.net/seven_2016/article/details/52245727

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python3 实现妹子图爬虫

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python3 实现妹子图爬虫

一.项目说明1.项目介绍本项目通过使用Python 实现一个妹子图图片收集爬虫,学习并实践 BeautifulSoup、Request,Urllib 及正则表达式等知识。在项目开发过程中采用瀑布流开发模型。2.用到的知识点本项目中将会学习并
2023-01-31

python shell 爬虫 妹子图片

最近开始学Python,人们学一门语言潜移默化的第一个命令往往那个就是 hello world!这里也差不多,用python写了个小爬虫,爬妹子图的"照片".感觉效率好慢,应该是代码的问题,在此献丑了!!!需要安装两个好用的库,分别是 re
2023-01-31

使用Python爬虫爬取妹子图图片

最近在学习Python的爬虫部分。看到有网友在分享使用爬虫爬取各种网站的图片的代码,也想自己写个玩玩。今天花时间分析了一下妹子图网站的结构和HTML代码,使用urllib2和BeautifulSoup写出了一个自动下载妹子图网站图片的脚本。
2023-01-31

python-python爬取妹子图片

1 # -*- conding=utf-8 -*- 2 3 import requests 4 from bs4 import BeautifulSoup 5 import io 6 7 url = "https://www.m
2023-01-30

Media Pipeline如何爬取妹子图

这篇文章给大家介绍Media Pipeline如何爬取妹子图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言我们在抓取数据的过程中,除了要抓取文本数据之外,当然也会有抓取图片的需求。那我们的 scrapy 能爬取图片
2023-06-02

Seleninum&PhamtomJS爬取煎蛋网妹子图

目标网站:需要爬取的网站:http://jandan.net/ooxx 目标分析:先找到总页数,即可以利用selenium的模拟点击到下一个页面找到每个图片的地址:右键检查图片的代码,找到图片的代码爬虫代码:创建一个getJianDan.p
2023-01-30

Python3网络爬虫实战-17、爬虫基

爬虫,即网络爬虫,我们可以把互联网就比作一张大网,而爬虫便是在网上爬行的蜘蛛,我们可以把网的节点比做一个个网页,爬虫爬到这就相当于访问了该页面获取了其信息,节点间的连线可以比做网页与网页之间的链接关系,这样蜘蛛通过一个节点后可以顺着节点连线
2023-01-31

Python3网络爬虫实战-15、爬虫基

在写爬虫之前,还是需要了解一些爬虫的基础知识,如 HTTP 原理、网页的基础知识、爬虫的基本原理、Cookies 基本原理等。那么本章内容就对一些在做爬虫之前所需要的基础知识做一些简单的总结。在本节我们会详细了解 HTTP 的基本原理,了解
2023-01-31

Python3网络爬虫实战-10、爬虫框

我们直接用 Requests、Selenium 等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久
2023-01-31

Python3网络爬虫实战-11、爬虫框

ScrapySplash 是一个 Scrapy 中支持 JavaScript 渲染的工具,本节来介绍一下它的安装方式。ScrapySplash 的安装分为两部分,一个是是 Splash 服务的安装,安装方式是通过 Docker,安装之后会启
2023-01-31

利用node.js写一个爬取知乎妹纸图的小爬虫

前言 说起写node爬虫的原因,真是羞羞呀。一天,和往常一样,晚上吃过饭便刷起知乎来,首页便是推荐的你见过最漂亮的女生长什么样?,点进去各种漂亮的妹纸爆照啊!!!,看的我好想把这些好看的妹纸照片都存下来啊!一张张点击保存,就在第18张得时候
2022-06-04

Python3网络爬虫实战-9、APP爬

Appium 是移动端的自动化测试工具,类似于前面所说的 Selenium,利用它我们可以驱动 Android、iOS 等设备完成自动化测试,比如模拟点击、滑动、输入等操作,其官方网站为:http://appium.io/,本节来了解一下
2023-01-31

python实现简单爬虫--爬图片

首先有两个功能需求:第一:获取到要爬的页面html内容;第二:使用正则表达式进行匹配并进行保存到本地。#!/usr/bin/env python#encoding:utf-8import urllibimport redef getHtml
2023-01-31

python3制作捧腹网段子页爬虫

0x01 春节闲着没事(是有多闲),就写了个简单的程序,来爬点笑话看,顺带记录下写程序的过程。第一次接触爬虫是看了这么一个帖子,一个逗逼,爬取煎蛋网上妹子的照片,简直不要太方便。于是乎就自己照猫画虎,抓了点图片。 科技启迪未来,身为一个程序
2022-06-04

Python3网络爬虫实战-8、APP爬

MitmProxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler、Charles 的功能,只不过它是一个控制台的形式操作。同时 MitmProxy 还有两个关联组件,一个是 MitmDump,它是 MitmProx
2023-01-31

Python3网络爬虫实战-6、APP爬

除了 Web 网页,爬虫也可以对 APP 的数据进行抓取,APP 中的页面要加载出来,首先需要获取数据,那么这些数据一般是通过请求服务器的接口来获取的,由于 APP 端没有像浏览器一样的开发者工具直接比较直观地看到后台的请求,所以对 APP
2023-01-31

Python3网络爬虫实战-7、APP爬

MitmProxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler、Charles 的功能,只不过它是一个控制台的形式操作。同时 MitmProxy 还有两个关联组件,一个是 MitmDump,它是 MitmProx
2023-01-31

Python3爬虫系列:理论+实验+爬取

Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star爬虫系列: (1) 理论Python3爬虫系列01 (理论) - I/O Models 阻塞 非
2023-01-30

Python3网络爬虫实战-27、Req

本节我们利用 Requests 和正则表达式来抓取猫眼电影 TOP100 的相关内容,Requests 相较于 Urllib 使用更加方便,而目前我们还没有系统学习 HTML 解析库,所以可能对 HTML 的解析库不是很了解,所以本节我们选
2023-01-31

Python3网络爬虫实战-25、req

在前面一节我们了解了 Requests 的基本用法,如基本的 GET、POST 请求以及 Response 对象的用法,本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等。我们知道 Reqe
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录