python3 爬虫 爬取美女图片
本文基于python3,练手爬取http://www.mm131.com/网站美女图片,对该网站表示感谢,本文仅用于交流学习使用,滥用造成的责任自担。
python3 不同于python2 将urllib\urllib2合并为urllib(官方文档),
urllib.request
for opening and reading URLsurllib.error
containing the exceptions raised byurllib.request
urllib.parse
for parsing URLsurllib.robotparser
for parsingrobots.txt
files
首先对网站进行分析打开首页,共有如下类型
picType=[{"name":"性感美女","type":"xinggan"},{"name":"清纯美眉","type":"qingchun"},{"name": "美女校花", "type": "xiaohua"},{"name": "性感车模", "type": "chemo"},{"name": "旗袍美女", "type": "qipao"},{"name": "明星写真", "type": "mingxing"} ]
上面是我构建的一个dic数组,点进一个类型后,按F12可以看到DOC结构如下
如是,我们可以定义一个取得某类型下首个地址函数
def getTypeFirstUrl(self,type):typeurl=self.siteURL+typepage=self.getPage(typeurl)tree = etree.HTML(page) reg = "/html/body/div[@class='main']/dl[@class='list-left public-box']/dd[1]/a/@href" return tree.xpath(reg)[0]
其中取得网站地址响应函数如下
def getPage(self,url):hearders = {'Connection': r'keep-alive','Accept': r'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding': r'gzip, deflate','Accept-Language': r'zh-CN,zh;q=0.8','User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',}requset=urllib.request.Request(url)response=urllib.request.urlopen(requset)return response.read().decode('gbk')
不知道请求头哪里设置不对,添加了请求头后就报错,不要就OK了
我们通过DOC文档发现点击一张照片即可进入链接进入下张图片网址,因此我们可以迭代分析每页图片链接的网址,取得图片自身url,然后下载到本地
def saveUrlPic(self,url):if self.curCount>self.maxCount:return else:contents=self.getContents(url)# 保存图片 paths = contents[1].split('/')[::-1]path="./"+paths[1]bMkdir = self.mkdir(path)if not bMkdir:return else:fileName = path + '/' + paths[0]self.saveImg(contents[1], fileName)nextChildPageUrl = contents[2]urlSplit=nextChildPageUrl.split('/')if len(urlSplit)<2:nextChildPageUrl = self.siteURL + nextChildPageUrlself.saveUrlPic(nextChildPageUrl)
这里我做了个判断,下载的图片数量超过设定数量即终止下载,避免爬光耗时间
程序运行截图
文件代码如下:
import urllib.request
import re
import os
from lxml import etreeclass Spider:def __init__(self):self.siteURL='http://www.mm131.com/'self.curCount=0self.maxCount=0def getPage(self,url):hearders = {'Connection': r'keep-alive','Accept': r'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding': r'gzip, deflate','Accept-Language': r'zh-CN,zh;q=0.8','User-Agent': r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',}requset=urllib.request.Request(url)response=urllib.request.urlopen(requset)return response.read().decode('gbk')def getContents(self,url):page=self.getPage(url)tree = etree.HTML(page)regChildUrl="/html/body/div[@class='content']/div[@class='content-pic']/a/@href"nextChildUrl = tree.xpath(regChildUrl)[0]picUrl=tree.xpath("/html/body/div[@class='content']/div[@class='content-pic']/a/img/@src")[0]picName = tree.xpath("/html/body/div[@class='content']/div[@class='content-pic']/a/img/@alt")[0]contents=[picName,picUrl,nextChildUrl]return contents# 保存个人简介def saveBrief(self, content, name):fileName = name + "/" + name + ".txt"f = open(fileName, "w+")printu"正在偷偷保存她的个人信息为", fileNamef.write(content.encode('utf-8'))# 传入图片地址,文件名,保存单张图片def saveImg(self, imageURL, fileName):u = urllib.request.urlopen(imageURL)data = u.read()f = open(fileName, 'wb')f.write(data)self.curCount=self.curCount+1print(u"正在悄悄保存一张美女图片为", fileName)f.close()# 创建新目录def mkdir(self, path):path = path.strip()# 判断路径是否存在# 存在 True# 不存在 FalseisExists = os.path.exists(path)# 判断结果if not isExists:# 如果不存在则创建目录print("偷偷新建了名字叫做", path, "的文件夹")# 创建目录操作函数os.makedirs(path)return Trueelse:# 如果目录存在则不创建,并提示目录已存在#print("名为"+path+"的文件夹已经创建成功")return Truedef saveUrlPic(self,url):if self.curCount>self.maxCount:returnelse:contents=self.getContents(url)# 保存图片paths = contents[1].split('/')[::-1]path="./"+paths[1]bMkdir = self.mkdir(path)if not bMkdir:returnelse:fileName = path + '/' + paths[0]self.saveImg(contents[1], fileName)nextChildPageUrl = contents[2]urlSplit=nextChildPageUrl.split('/')if len(urlSplit)<2:nextChildPageUrl = self.siteURL + nextChildPageUrlself.saveUrlPic(nextChildPageUrl)def getTypeFirstUrl(self,type):typeurl=self.siteURL+typepage=self.getPage(typeurl)tree = etree.HTML(page)reg = "/html/body/div[@class='main']/dl[@class='list-left public-box']/dd[1]/a/@href"return tree.xpath(reg)[0]def savePic(self,size):self.maxCount=size;picType=[{"name":"性感美女","type":"xinggan"},{"name":"清纯美眉","type":"qingchun"},{"name": "美女校花", "type": "xiaohua"},{"name": "性感车模", "type": "chemo"},{"name": "旗袍美女", "type": "qipao"},{"name": "明星写真", "type": "mingxing"}]print("现在美女类型如下:\n")i=1for type in picType:print(str(i),":",picType[i-1].get('name', 0))i=i+1inttype=int(input("请选择想要爬取的类型,输入对应的序号:\n"))typename=picType[inttype-1].get('type', 0)firstUrl=self.getTypeFirstUrl(typename)self.siteURL=self.siteURL+typename+"/"self.saveUrlPic(firstUrl)
#
spider = Spider()
spider.maxCount=int(input("请输入想抓取的图片数量:\n"))
spider.savePic(spider.maxCount)
python3 爬虫 爬取美女图片相关推荐
- python爬虫爬取美女图片(selenium)
之前爬一个美女图片网站,因为是动态加载网站,爬下来的图片全是转呀转的GIF图,气死我了,学了selenium之后,龙王归来,势在必得 先看需要的库 from selenium import webdr ...
- scrapy-redis分布式爬虫爬取美女图片
背景: 爬取目标:(你懂得) url: h t t p s : / / w w w . j p x g y w . c o m 为什么要用scrapy-redis: 为什么用scrapy-redis, ...
- python3爬虫爬取百度贴吧下载图片
python3爬虫爬取百度贴吧下载图片 学习爬虫时没事做的小练习. 百度对爬虫还是很友好的,在爬取内容方面还是较为容易. 可以方便各位读者去百度贴吧一键下载每个楼主的图片,至于是什么类型的图片,就看你 ...
- 使用python3爬取美女图片
给大佬们观赏观赏,爬取美女图片,各位大佬们小心身子哈. #目标:爬取网页所有图片并保存到本地 #目标url = http://www.umei.cc/tags/meishaonv_1.htm impo ...
- Scrapy爬取美女图片续集 (原创)
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...
- Python爬虫爬取美女写真实例
Python爬虫爬取美女写真实例 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持! 这是我写的一个较为简单的爬虫代码,用于爬取美女写真(咳咳,当然是正规 ...
- Scrapy爬取美女图片续集
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用. 在学习Scra ...
- node:爬虫爬取网页图片 1
代码地址如下: http://www.demodashi.com/demo/13845.html 前言 周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图 ...
- python3 爬虫 爬取华为应用市场 APP应用评论(一)爬取全部评论——学霸君
python3 爬虫 爬取华为应用市场 APP应用评论(一)爬取全部评论--学霸君 import requests import re import requests from bs4 import ...
- python3 爬虫 爬取华为应用市场 APP应用评论(一)爬取全部评论——作业帮
python3 爬虫 爬取华为应用市场 APP应用评论(一)爬取全部评论--作业帮 import requests import re import requests from bs4 import ...
最新文章
- 同步与异步,阻塞与非阻塞的区别
- 用于3D摄像头的VCSEL技术
- byte[]数组下标的最大值
- python手机版怎么运行项目或脚本-python脚本运行的几种方式
- Ubuntu ssh 服务开启方法
- 设置Dialog全屏显示(转)
- 游戏开发中 UI 是由谁来完成的?
- RequireJS 主要函数
- 【SF】开源的.NET CORE 基础管理系统 -介绍篇
- linux的less命令如何退出,Linux命令详解之less命令
- mysql漏洞包_MySQL npm包中的本地文件泄露漏洞
- [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组]
- .NET (二)委托第二讲:内置委托Func
- MySQL实验7存储过程_mysql的总结7--存储过程-阿里云开发者社区
- mybatis中的mapper代理的应用
- MySQL 入门(七)—— 视图
- jQuery EasyUI/TopJUI创建日期输入框
- 使用RDPWrapper实现多用户远程登录并限制IP
- GPT分区和MBR分区切换
- vue3.0页面模板-示例