思路: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. session 防止表单重复提交

    防止表单重复提交应该现在前台做一遍,再在后台做一遍.这样双重安全而且减轻服务器负担. 代码: package flying.form; import java.io.IOException; impo ...

  2. 【费用流】【网络流24题】【cogs 739】运输问题

    739. [网络流24题] 运输问题 ★★ 输入文件:tran.in 输出文件:tran.out 简单对照 时间限制:1 s 内存限制:128 MB «问题描写叙述: «编程任务: 对于给定的m 个仓 ...

  3. 【微信小程序】request请求POST提交数据,记得要加上header

    wx.request({ url: '*******', data: { "type":"nearest_village", "district&qu ...

  4. Spring velocity 中文乱码 解决方案

    主要有这么几步,在spring web 的  [sevlet-name]-servlet.xml文件中,修改为: 黑体字体为关键,其它根据你的实际情况配置: <!-- ============= ...

  5. python --特殊方法与多范式

    转自:http://www.cnblogs.com/vamei/archive/2012/11/19/2772441.html Python一切皆对象,但同时,Python还是一个多范式语言(mult ...

  6. Linux关机和重启命令总结

    一.shutdown 命令 作用:关闭或重启系统 使用权限:超级管理员使用 常用选项 1. -r 关机后立即重启 2. -h关机后不重启 3. -f快速关机,重启时跳过fsck(file system ...

  7. Oracle 11g安装图文攻略

    一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官方下地址: http://www.ora ...

  8. Django REST framework 知识点总结

    一.安装DjangoREST framework #先安装Django #安装必要的包 pip install djangorestframework coreapi (1.32.0+) - Sche ...

  9. 进一步优化SPA的首屏打开速度(模块化与懒载入) by 嗡

    前言 单页应用的优点在于一次载入全部页面资源,利用本地计算能力渲染页面.提高页面切换速度与用户体验.但缺点在于全部页面资源将被一次性下载完,此时封装出来的静态资源包体积较大,使得第一次打开SPA页面时 ...

  10. JSON 文件格式解析

    JSON 文件大致说明 JSON 文件你可以理解为就是一个字典文件. 格式为 { 索引:数据, 索引:{ 索引:数据, 索引:{ 索引:数据, 索引:数据 } } } 自己写一个 my.json { ...