先打开想爬取的壁纸站点,分析一下:http://www.win4000.com/zt/xiaoqingxin.html
单击上面的套图封面会跳转到一个新的页面,如第一个封面的链接:http://www.win4000.com/zt/xiaoqingxin.html
单击切换到第二页,看到链接变成了 http://www.win4000.com/zt/xiaoqingxin_2.html ,
再 单 击 下 一 页, 链 接 变 成 了http://www.win4000.com/zt/xiaoqingxin_3.html,不难发现 URL 的拼凑规律。接下来介绍爬取流程。

  1. 获取每个套图封面跳转的网页地址,这里注意要抓取的页面有五个。
  2. 获得所有的套图链接后,打开套图链接,解析页面获得页数,遍历构造图片对应的网页链接。
  3. 解析网页链接,获得图片 URL,下载到本地。
    流程清晰了,接下来一步步来实现,先获得所有的套图链接,套图链接节点如下:
<li>
<a href="http://www.win4000.com/wallpaper_detail_148779.html" alt="小清新蓝色风景
图片桌面壁纸" title="小清新蓝色风景图片桌面壁纸" target="_blank">
<img src="http://pic1.win4000.com/wallpaper/2018-07-24/5b56d7e5acf53_270_185.jpg"
data-original="http://pic1.win4000.com/wallpaper/2018-07-24/5b56d7e5acf53_270_185.jpg
style="display: inline;">
<p>小清新蓝色风景图片桌面壁纸</p>
</a>
</li>

套图链接在 a 标签的 href 属性里,通过写代码来提取。代码如下:

#依次导入需要用到的库
import os
import requests as r
from bs4 import BeautifulSoup#添加header头信息,应对网站简单的反爬机制
headers={'Referer':'https://shop.freebuf.com/static/shop/css/style.css','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\(KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36 Edg/83.0.478.44'}base_url = "http://www.win4000.com"
theme_base_url = "http://www.win4000.com/zt/xiaoqingxin_"
# 利用列表表达式生成每页链接列表
theme_url_list = [theme_base_url + str(x) + '.html' for x in range(1, 6)]
# 套图链接列表
series_url_lists = []
# 获取所有套图的链接列表
def get_series_url_lists(url):#resp为获取响应内容resp = r.get(url)#如果响应内容不为空,添加到resultif resp is not None:result = resp.text#bs解析网页内容bs = BeautifulSoup(result, 'html.parser')#查找带有tab_tj属性的div标签ul = bs.find('div', attrs={'class': 'tab_tj'})#提取出ul(div)标签中的a标签a_s = ul.find_all('a')#循环提取a标签的href属性,添加到series_url_lists中for a in a_s:series_url_lists.append(a.get('href'))
if __name__ == '__main__':#遍历theme_url_list,一次提取出每个页面的图片封面urlfor url in theme_url_list:get_series_url_lists(url)#打印筛选出的套图url数量print(len(series_url_lists))

代码执行结果如下:

120

总共爬取到 120 条套图记录,接下来写提取套图里所有链接的方法。

<a href="http://www.win4000.com/meinv202633_3.html"><img class="pic-large" src="http://pic1.win4000.com/pic/f/57/95f3b4f285.jpg" data-original="http://pic1.win4000.com/pic/f/57/95f3b4f285.jpg" url="http://pic1.win4000.com/pic/f/57/95f3b4f285.jpg" style="display: block;">
</a>

代码如下:

# 保存文件夹名
#os.getcwd()是获取当前文件位置
#os.path.join()拼接路径
save_root_dir = os.path.join(os.getcwd(), 'tmp/')
# 获取某个套图里的所有图片
def fetch_all_series_pic(url):cur_page = 1while True:#current_url即为套图中每个图片的urlcurrent_url = url#根据数量来替换urlif cur_page > 1:current_url = url.replace('.html', '_' + str(cur_page) + '.html')#一次访问urlresp = r.get(current_url)#如果404访问不到推出循环,下载下一套图if resp.status_code == 404:breakelse:#如果可以访问则继续深入解析if resp is not None:result = resp.textbs = BeautifulSoup(result, 'lxml')# 使用lxml来获取标题,用作文件夹名title_name = bs.find('div', attrs={'class': 'ptitle'}).h1.textsave_dir = os.path.join(save_root_dir, title_name)#如果save_dir不存在则创建文件夹if not os.path.exists(save_dir):os.makedirs(save_dir)# 使用CSS选择器选择图片节点imgs = bs.select('img.pic-large')for img in imgs:#根据src属性提取连接,并将保存地址传给download_pic函数download_pic(img.attrs.get('src'), save_dir)cur_page += 1# 下载图片的方法
def download_pic(url, path):print("下载图片:" + url)try:#将文件url以/分割取出最后一部分作为文件名#如http://pic1.win4000.com/pic/f/57/95f3b4f285.jpg则取出95f3b4f285.jpgpic_name = url.split('/')[-1]#去访问文件url,得到图片信息img_resp = r.get(url).content#保存文件with open(path + '/' +pic_name, "wb+") as f:f.write(img_resp)#如果有异常输出异常报错except Exception as reason:print(str(reason))
if __name__ == '__main__':#循环调用get_series_url_lists(url)获得套图的urlfor url in theme_url_list:get_series_url_lists(url)for url in series_url_lists:fetch_all_series_pic(url)

上边是分了两步来实现功能
以下为最终完全版

import os
import requests as r
from bs4 import BeautifulSoup
base_url = "http://www.win4000.com"
theme_base_url = "http://www.win4000.com/zt/xiaoqingxin_"
# 利用列表表达式生成每页链接列表
theme_url_list = [theme_base_url + str(x) + '.html' for x in range(1, 6)]
# 套图链接列表
series_url_lists = []
# 获取所有套图的链接列表
def get_series_url_lists(url):resp = r.get(url)if resp is not None:result = resp.textbs = BeautifulSoup(result, 'html.parser')ul = bs.find('div', attrs={'class': 'tab_tj'})a_s = ul.find_all('a')for a in a_s:series_url_lists.append(a.get('href'))# 保存文件夹名
save_root_dir = os.path.join(os.getcwd(), 'tmp/')
# 获取某个套图里的所有图片
def fetch_all_series_pic(url):cur_page = 1while True:current_url = urlif cur_page > 1:current_url = url.replace('.html', '_' + str(cur_page) + '.html')resp = r.get(current_url)if resp.status_code == 404:breakelse:if resp is not None:result = resp.textbs = BeautifulSoup(result, 'lxml')# 使用lxml来获取标题,用作文件夹名title_name = bs.find('div', attrs={'class': 'ptitle'}).h1.textsave_dir = os.path.join(save_root_dir, title_name)if not os.path.exists(save_dir):os.makedirs(save_dir)# 使用CSS选择器选择图片节点imgs = bs.select('img.pic-large')for img in imgs:download_pic(img.attrs.get('src'), save_dir)cur_page += 1
# 下载图片的方法
def download_pic(url, path):print("下载图片:" + url)try:pic_name = url.split('/')[-1]img_resp = r.get(url).contentwith open(path + '/' +pic_name, "wb+") as f:f.write(img_resp)except Exception as reason:print(str(reason))if __name__ == '__main__':for url in theme_url_list:get_series_url_lists(url)for url in series_url_lists:fetch_all_series_pic(url)

(复制的话注意缩进,四个点是正确的)

执行效果如下:


博客:http://www.qin2001.top

爬虫批量下小姐姐壁纸相关推荐

  1. Python项目--批量下载小姐姐壁纸

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 你还在为一个一个下载壁纸而烦恼吗,那有没有更加简单的方法呢? 跟着我,一起来看看我是如何批量下载的吧 环境使用: python ...

  2. 我花 1 分钟写了一段爬虫,帮助小姐姐解放了双手

    1. 场景 最近有一位小姐姐向我抱怨,说她家宝宝最近要打预防针,受疫情影响,市区定点的社康医院太少,导致预约号基本靠抢,根本是一号难求 每次预约都要一直守在手机旁,不停地刷新页面去抢号,太耽误功夫了, ...

  3. 【Python爬虫实战】爬取5K分辨率超清唯美小姐姐壁纸

    目录 简介 使用教程 编写思路 演示图片 全部代码 简介 壁纸的选择其实很大程度上能看出电脑主人的内心世界,有的人喜欢风景,有的人喜欢星空,有的人喜欢美女,有的人喜欢动物.然而,终究有一天你已经产生审 ...

  4. Python爬虫:头条小姐姐们都来给你拜年啦!

    觉得上面的小姐姐漂亮的,可以举个爪子. 今天就来教大家来爬取头条上的美女. 但是,不要着急,在学爬虫之前,大家需要先学会分析Ajax请求. 前言 有时候我们会用requests抓取页面的时候,得到的结 ...

  5. python爬虫 爬取小姐姐图片

    前言 大致熟悉了python的基础语法以后,开始学习爬虫基础. 一.爬取前的准备工作 python3.7环境(只要是python3版本都可以): 依赖包 : time requests re (缺少包 ...

  6. Python批量下载小姐姐视频,总有你喜欢的,你一般在哪个平台看?

    兄弟们学Python如果不是为了爬小姐姐,那将毫无意义! 而且爬图片有什么意思,咱们要爬就爬视频,话不多说,开整! 1.动态数据抓包演示 2.json数据解析方法 3.视频数据保存 这是今天的大概方法 ...

  7. Web自动化神器,批量下载小姐姐美图,可直接导入使用

    大家好,我是小碗汤,今天为大家分享一款前端自动化操作神器: Automa 文末有流程图获取方式,可自行导入享用. Automa介绍 它是一款 Chrome 插件,即使你不会写代码,也能按照自己的需求, ...

  8. 循环爬取图片_Python爬虫爬取小姐姐照片!

    哔哩哔哩上有一个相簿板块,里面有很多绘画和摄影,自己动手一张一张保存太慢,于是想到了python爬虫. 今天就用python来写个爬虫,爬取每月月榜上的小姐姐,一劳永逸. 爬虫步骤: 1.在bilib ...

  9. python爬取海量精美高清漂酿纯真可爱善良小姐姐壁纸(老司机福利)

    爬取的目标网址: http://www.zdqx.com/qingchun/index.html 话不多说,直接上代码: import requests import re,osheaders = { ...

最新文章

  1. redis-4.0.1安装配置(CentOS 6.6)
  2. go语言学习(4)接口,duck typing
  3. android 静态list,android studio 利用gradle和cmakelist生成c++静态库.a的方法总结
  4. html登陆不刷新flask,Flask Button运行Python而不刷新页面?
  5. jQuery Mobile中链接(包含button和表单提交的链接)的data-*选项
  6. LNMP环境下压力测试时的主要调试参数
  7. 克隆模式----快速与数据库比对数据
  8. Changer常用的软件
  9. CefSharp方法汇总
  10. Java 实现树结构计算各个节点数的和
  11. 字模提取软件的使用(pctolCD2002,基于FPGA的VGA显示汉字)
  12. Ubuntu查看硬盘序列号
  13. 基于单片机的水壶自动加热系统_基于单片机电热水壶控制系统的设计
  14. Zigbee基础理论知识总结
  15. python示例--下载mysql数据库中数据--excel表格,合并表格
  16. USB-C版3.7V锂电池充电与升压输出电路(5V/1A输出)-充电电源板(附电路图和PCB 抄板直接可用)
  17. vim教程之基本使用
  18. salesforce学习资源
  19. nsis安装包(四)_软件环境
  20. 炒股高手:两年200万赚1亿 现只卖不买

热门文章

  1. AT89C51定时器
  2. 游戏中的图像识别:CV的新战场
  3. 2010年春节夫妻团游云南(昆明 大理 丽江
  4. 继续卷技术 埋头苦学,越学越会
  5. 小学六年级计算机教案超链接,第12课 为幻灯片设置超链接和动作链接
  6. js 伪造referer_js伪造Referer来路
  7. 光明勇士iOS服务器维护,《光明勇士》iOS全服停机维护公告
  8. Go字符串比较,终于有人讲清楚了
  9. 平遥电影宫春节上线儿童欢乐市集 打造文旅复合空间
  10. 安卓计步器stepCounter无法执行onSensorchanged()的内容