Python3x 爬取妹子图
思路: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 爬取妹子图的更多相关文章
- Python 爬虫入门(二)——爬取妹子图
Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...
- Python 爬虫入门之爬取妹子图
Python 爬虫入门之爬取妹子图 来源:李英杰 链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...
- scrapy 也能爬取妹子图?
目录 前言 Media Pipeline 启用Media Pipeline 使用 ImgPipeline 抓取妹子图 瞎比比前言 我们在抓取数据的过程中,除了要抓取文本数据之外,当然也会有抓取图片的需 ...
- 使用request+Beautiful爬取妹子图
一.request安装 pip install requests request使用示例 import requests response = requests.get('https://www.mz ...
- requests+正则表达式 爬取 妹子图
做了一个爬取妹子图某张索引页面的爬虫,主要用request和正则表达式. 感谢 崔庆才大神的 爬虫教学视频 和 gitbook: B站:https://www.bilibili.com/video/a ...
- 爬取妹子图(requests + BeautifulSoup)
刚刚入门爬虫,今天先对于单个图集进行爬取,过几天再进行翻页爬取. 使用requests库和BeautifulSoup库 目标网站:妹子图 今天是对于单个图集的爬取,就选择一个进行爬取,我选择的链接为: ...
- 小白学 Python 爬虫(16):urllib 实战之爬取妹子图
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- 利用 PhpQuery 随机爬取妹子图
前言 运行下面的代码会随机得到妹子图的一张图片,代码中的phpQuery可以在这里下载:phpQuery-0.9.5.386.zip <?php require 'phpQuery.php'; ...
- python 爬取妹子图
作为一个python还没入门的小白,搞懂这段代码实在是很不容易,还要去学html的知识(#黑脸) 因此我加上了注释,比较好读懂点 #coding=utf-8 import time import re ...
随机推荐
- 重要:Linux下IDE--KDevelop (用来跟踪调试C++) Ubuntu下QT4开发环境的搭建及初体验
Linux下安装Qt4有两大问题,一是环境变量,二是IDE(集成开发环境).安装Qt4也有两种方法,一种是apt-get,一种是下载源码包,而后 一种方法已经人证实是最有可能不好使的方法.所以我最终采 ...
- Python translate()方法
描述 Python translate() 方法根据 maketrans() 方法给出的字符映射转换表转换字符串中的字符. 语法 translate() 方法语法: Python3中: S.trans ...
- Python 算法(2) 哈夫曼编码 Huffman Encoding
这个问题原始是用来实现一个可变长度的编码问题,但可以总结成这样一个问题,假设我们有很多的叶子节点,每个节点都有一个权值w(可以是任何有意义的数值,比如它出现的概率),我们要用这些叶子节点构造一棵树,那 ...
- MS SQL server中的isnull函数
一.ISNULL语法格式 ISNULL ( check_expression , replacement_value ) 二.参数简介 check_expression:将被检查是否为 NULL的表达 ...
- jmx 配置
1.启动添加jmx参数 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom. ...
- docker 下 alpine 镜像设置时区的有效办法
在使用Docker的时候,由于很多基础linux镜像都比较大,alpine这个仅仅几兆的linux基础镜像受到了很多人喜欢,笔者也不例外,可是由于alpine中的一些配置及命令与常见的centos等系 ...
- 11个常用的Linux命令
Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.今天为你解释下面几个命令:sudo.python.mtr.Ctrl+x+e.nl.s ...
- 示例 Demo 工程和 API 参考链接
Camera Explorer:有关 Windows Phone8 中有关增强 Camera API 的使用.文章链接 Filter Effects:对拍摄的照片或者图片库中的照片应用 Nokia I ...
- Python删除列表中元素
Python中列表(list)是很常用的数据结构,删除列表中的元素有几种方法 列表的remove方法 lst = [1, 1, 3, 4] lst.remove(1) # lst->[1, 3, ...
- 【转】CentOS下expect 安装
Expect是在Tcl基础上创建起来的,它还提供了一些Tcl所没有的命令,它可以用来做一些linux下无法做到交互的一些命令操作,在远程管理方面发挥很大的作用. spawn命令激活一个Unix程序 ...