iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python3 实现妹子图爬虫
  • 781
分享到

Python3 实现妹子图爬虫

爬虫妹子 2023-01-31 01:01:01 781人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

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

一.项目说明

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.     src=soup.select('body > div.main > div.content > div.main-image > p > a > img')  
  7.     for src in src:  
  8.         image_url=src.get('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')
    src=soup.select('body > div.main > div.content > div.main-image > p > a > img')
    for src in src:
        image_url=src.get('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

--结束END--

本文标题: Python3 实现妹子图爬虫

本文链接: https://www.lsjlt.com/news/185222.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Python3 实现妹子图爬虫
    一.项目说明 1.项目介绍 本项目通过使用Python 实现一个妹子图图片收集爬虫,学习并实践 BeautifulSoup、Request,Urllib 及正则表达式等知识。在项目开发过程中采用瀑布流开发模型。 2.用到的知识点 ...
    99+
    2023-01-31
    爬虫 妹子
  • python shell 爬虫 妹子图片
    最近开始学Python,人们学一门语言潜移默化的第一个命令往往那个就是 hello world!这里也差不多,用python写了个小爬虫,爬妹子图的"照片".感觉效率好慢,应该是代码的问题,在此献丑了!!!需要安装两个好用的库,分别是 re...
    99+
    2023-01-31
    爬虫 妹子 图片
  • 使用Python爬虫爬取妹子图图片
            最近在学习Python的爬虫部分。看到有网友在分享使用爬虫爬取各种网站的图片的代码,也想自己写个玩玩。今天花时间分析了一下妹子图网站的结构和HTML代码,使用urllib2和BeautifulSoup写出了一个自动下载妹子图...
    99+
    2023-01-31
    爬虫 妹子 图图
  • python-python爬取妹子图片
    1 # -*- conding=utf-8 -*- 2 3 import requests 4 from bs4 import BeautifulSoup 5 import io 6 7 url = "ht...
    99+
    2023-01-30
    妹子 图片 python
  • Media Pipeline如何爬取妹子图
    这篇文章给大家介绍Media Pipeline如何爬取妹子图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言我们在抓取数据的过程中,除了要抓取文本数据之外,当然也会有抓取图片的需求。那我们的 scrapy 能爬取图片...
    99+
    2023-06-02
  • Seleninum&PhamtomJS爬取煎蛋网妹子图
    目标网站:需要爬取的网站:http://jandan.net/ooxx 目标分析:先找到总页数,即可以利用selenium的模拟点击到下一个页面找到每个图片的地址:右键检查图片的代码,找到图片的代码爬虫代码:创建一个getJianDan.p...
    99+
    2023-01-30
    煎蛋 妹子 Seleninum
  • Python3网络爬虫实战-10、爬虫框
    我们直接用 Requests、Selenium 等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-11、爬虫框
    ScrapySplash 是一个 Scrapy 中支持 JavaScript 渲染的工具,本节来介绍一下它的安装方式。ScrapySplash 的安装分为两部分,一个是是 Splash 服务的安装,安装方式是通过 Docker,安装之后会...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-15、爬虫基
    在写爬虫之前,还是需要了解一些爬虫的基础知识,如 HTTP 原理、网页的基础知识、爬虫的基本原理、Cookies 基本原理等。 那么本章内容就对一些在做爬虫之前所需要的基础知识做一些简单的总结。 在本节我们会详细了解 HTTP 的基本原理...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-17、爬虫基
    爬虫,即网络爬虫,我们可以把互联网就比作一张大网,而爬虫便是在网上爬行的蜘蛛,我们可以把网的节点比做一个个网页,爬虫爬到这就相当于访问了该页面获取了其信息,节点间的连线可以比做网页与网页之间的链接关系,这样蜘蛛通过一个节点后可以顺着节点连线...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-9、APP爬
    Appium 是移动端的自动化测试工具,类似于前面所说的 Selenium,利用它我们可以驱动 Android、iOS 等设备完成自动化测试,比如模拟点击、滑动、输入等操作,其官方网站为:http://appium.io/,本节来了解一下 ...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-7、APP爬
    MitmProxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler、Charles 的功能,只不过它是一个控制台的形式操作。同时 MitmProxy 还有两个关联组件,一个是 MitmDump,它是 MitmProx...
    99+
    2023-01-31
    爬虫 实战 网络
  • python实现简单爬虫--爬图片
    首先有两个功能需求:第一:获取到要爬的页面html内容;第二:使用正则表达式进行匹配并进行保存到本地。#!/usr/bin/env python #encoding:utf-8 import urllib import re def get...
    99+
    2023-01-31
    爬虫 简单 图片
  • Python3网络爬虫实战-8、APP爬
    MitmProxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler、Charles 的功能,只不过它是一个控制台的形式操作。同时 MitmProxy 还有两个关联组件,一个是 MitmDump,它是 MitmProx...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-6、APP爬
    除了 Web 网页,爬虫也可以对 APP 的数据进行抓取,APP 中的页面要加载出来,首先需要获取数据,那么这些数据一般是通过请求服务器的接口来获取的,由于 APP 端没有像浏览器一样的开发者工具直接比较直观地看到后台的请求,所以对 APP...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3爬虫系列:理论+实验+爬取
    Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 (理论) - I/O Mode...
    99+
    2023-01-30
    爬虫 理论 系列
  • 【Python3爬虫】自动查询天气并实现
    之前写过一篇用Python发送天气预报邮件的博客,但是因为要手动输入城市名称,还要打开邮箱才能知道天气情况,这也太麻烦了。于是乎,有了这一篇博客,这次我要做的就是用Python获取本机IP地址,并根据这个IP地址获取物理位置也就是我所在...
    99+
    2023-01-30
    爬虫 天气
  • Python3网络爬虫实战-30、PyQ
    在上一节我们介绍了 BeautifulSoup 的使用,它是一个非常强大的网页解析库,可有没有觉得它的一些方法使用有点不适应?有没有觉得它的 CSS 选择器功能没有那么强大? 如果你对 Web 有所涉及,如果你比较喜欢用 CSS 选择器,如...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-18、Ses
    在浏览网站的过程中我们经常会遇到需要登录的情况,有些页面只有登录之后我们才可以访问,而且登录之后可以连续访问很多次网站,但是有时候过一段时间就会需要重新登录。还有一些网站有时在我们打开浏览器的时候就自动登录了,而且很长的时间都不会失效,这种...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-25、req
    在前面一节我们了解了 Requests 的基本用法,如基本的 GET、POST 请求以及 Response 对象的用法,本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等。 我们知道 Re...
    99+
    2023-01-31
    爬虫 实战 网络
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作