思路:1、get_totalpages(url)  通过【性。感。美。女。图】获得该版块的总页数 【首页1234567891011下一页末页共 21页1034条】

2、get_sercoverurl(pageurl) 版块每一页有50个系列的封面,获得每个封面的地址。

3、 进入该封面(即系列),获得该系列图片的总张数【[url=]共79页:[/url]上一页12345678910111213下一页】

4、get_serurl(sercoverurl) 获得每一个图片所在页面的地址

5、urllib.request.urlretrieve(picurl, filename) 获得图片的下载地址。

根据网站结构,总结了 版块 -< 系列 -- 系列封面 -< 图片页面 -- 图片下载地址 的编排规律,

其中" -< " 表示 1对多,即1个版块有多个系列, 1个系列封面有多个图片;

" -- " 表示 1对1, 如1个系列只有1个封面, 1个图片页面只有1个图片下载地址

搞清楚这些就明白哪些地方需要循环了。

废话太多,直接上代码吧!

import urllib.request
import os
import re def url_open(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36')
response = urllib.request.urlopen(url)
html = response.read()
return html def get_totalpages(url): #通过版块地址获得该版块所有页数(每页有50个系列),返回值为数字
html = url_open(url).decode('gbk')
reg = r'共 <strong>(.*?)</strong>页'
totalpages = re.findall(reg,html)[0]
return int(totalpages) def get_sercoverurl(pageurl): #通过页面地址获得该页面下所有系列的封面地址,返回值为列表
html = url_open(pageurl).decode('gbk')
reg = r'<p><a href="(.*?)"'
sercoverurl = re.findall(reg, html)
return sercoverurl #各个系列的封面 列表 def get_serurl(sercoverurl): #通过封面获得该系列的所有图片所在的页面地址 (每个页面有一张图片,其地址待下一步获取)
html = url_open(sercoverurl).decode('gbk') #
reg1 = r'<li><a>共(.*?)页'
totalsheets = int(re.findall(reg1, html)[0]) # 获得该系列图片总张数
serurls = []
serurls.append(sercoverurl)
for eachsheet in range(2,totalsheets+1):
serurl = sercoverurl[:-5] + '_' + str(eachsheet) + sercoverurl[-5:]
serurls.append(serurl)
return serurls def get_picurl(serurl):
html = url_open(serurl).decode('gbk')
reg = r"<img src='(.*?)'"
picurl = re.findall(reg,html)[0] return picurl #只有一个地址,即封面地址 def download_cl(folder = '爬虫youmzi'): #主程序
try:
os.mkdir(folder)
os.chdir(folder)
except:
os.chdir(folder)
url = 'http://www.youmzi.com/meinv.html'
totalpages = get_totalpages(url)
print(totalpages)
for eachpage in range(1,totalpages+1):
pageurl = url[:-5] + '_'+ str(eachpage) + url[-5:]
print(pageurl)
sercoverurl = get_sercoverurl(pageurl) #获得系列的封面地址 列表
print(sercoverurl)
for eachsercover in sercoverurl:
serurl = get_serurl(eachsercover) #返回系列的所有地址 列表
for oneser in serurl:
picurl = get_picurl(oneser)
print(picurl)
filename = picurl.split('/')[-1]
urllib.request.urlretrieve(picurl, filename) if __name__ == '__main__':
download_cl()

Python3x 爬取妹子图的更多相关文章

  1. Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...

  2. Python 爬虫入门之爬取妹子图

    Python 爬虫入门之爬取妹子图 来源:李英杰  链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...

  3. scrapy 也能爬取妹子图?

    目录 前言 Media Pipeline 启用Media Pipeline 使用 ImgPipeline 抓取妹子图 瞎比比前言 我们在抓取数据的过程中,除了要抓取文本数据之外,当然也会有抓取图片的需 ...

  4. 使用request+Beautiful爬取妹子图

    一.request安装 pip install requests request使用示例 import requests response = requests.get('https://www.mz ...

  5. requests+正则表达式 爬取 妹子图

    做了一个爬取妹子图某张索引页面的爬虫,主要用request和正则表达式. 感谢 崔庆才大神的 爬虫教学视频 和 gitbook: B站:https://www.bilibili.com/video/a ...

  6. 爬取妹子图(requests + BeautifulSoup)

    刚刚入门爬虫,今天先对于单个图集进行爬取,过几天再进行翻页爬取. 使用requests库和BeautifulSoup库 目标网站:妹子图 今天是对于单个图集的爬取,就选择一个进行爬取,我选择的链接为: ...

  7. 小白学 Python 爬虫(16):urllib 实战之爬取妹子图

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  8. 利用 PhpQuery 随机爬取妹子图

    前言 运行下面的代码会随机得到妹子图的一张图片,代码中的phpQuery可以在这里下载:phpQuery-0.9.5.386.zip <?php require 'phpQuery.php'; ...

  9. python 爬取妹子图

    作为一个python还没入门的小白,搞懂这段代码实在是很不容易,还要去学html的知识(#黑脸) 因此我加上了注释,比较好读懂点 #coding=utf-8 import time import re ...

随机推荐

  1. Eclipse默认编码格式设置方式

    看图即可 STEP ONE: STEP TWO: STEP THREE: STEP FOUR: 项目右击——>Properties 参阅: eclipse编码格式设置 - AlanLee(Jav ...

  2. 用PL/pgSQL写postgreSQL的存储过程[转]

    http://blog.chinaunix.net/uid-7591044-id-1742967.html 今天学会了用 PL/pgSQL 写 postgreSQL 的存储过程,网上资料实在少得可怜, ...

  3. 值得分享的Bootstrap Ace模板实现菜单和Tab页效果(转)

    Ace模板地址:http://code.google.com/p/ace-engine/wiki/AceTemplate(有时会打不开) Ace英文官网:http://wrapbootstrap.co ...

  4. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof

    JVM性能调优监控工具jps.jstack.jmap.jhat.jstat.hprof

  5. 关于 AngularJS 的数据绑定

    单向绑定(ng-bind) 和 双向绑定(ng-model) 的区别 ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}. 1 <span n ...

  6. ui-router(三)controller与template

    这篇就是在以前的基础上,把客户端angular.js 负责的部分整体串起来演示一下. 我们按照angular执行顺序来做前提准备: (1)Client 根目录下 index.html 首先加载angu ...

  7. 喵神 onevcat 的直播首秀

    喵神 onevcat 的直播首秀   王巍在圈内人称喵神,我和他在网上很早就认识,平时多有交流.在我眼中,他是一个幽默风趣高手.虽然他的博客中主要内容是 iOS 开发,但是他实际上涉及的技术领域还包括 ...

  8. 简单集成高大上的ImagePicker无标题文章

    简单集成高大上的ImagePicker无标题文章   现在是个项目就要有图片上传所以下面介绍一下简单高端的图片选择器 感谢读者的细心发现bug,最近bug已经修复(github更新)所以对文章部分内容 ...

  9. 页面跳转时候拼接在url后面的多个 参数获取

    function GetRequest() { var url = location.search; var theRequest = new Object(); if (url.indexOf(&q ...

  10. oracle 使用occi方式 批量插入多条数据

    if (vecInfo.empty()) { ; //数据为空,不上传,不上传标志设置为1,只有0表示上传成功 } std::string strUserName = userName; std::s ...