一、网页地址分析

首先打开我们爬取的网站,在搜索框输入一个不存在的壁纸关键字,例如:

我们可以发现,网页跳转到了一个新网页,
可得,该网站的不同类别有不同的对应链接(但不是按照顺序排的,中间缺少几个数据)

二、获取不同类别的壁纸对应的链接:

只需在后面加上id就可以得到,不同的类别链接,“https://wall.alphacoders.com/by_category.php?id=”

1、根据输入的id,输出对应的链接:

def choose():
#这里的关键词查询在后面会写search = int(input("请输入壁纸查询方式 1·····类别模糊查询||2·····关键词查询"))if search == 1:category = "https://wall.alphacoders.com/by_category.php?id="print("[INFO]下面是序号所对应的壁纸类别:\n""  1·····抽象   2·····动物   3·····动漫   4·····艺术   7·····名人   8·····漫画\n""  9·····黑暗  10·····自然  11·····奇幻  12·····食物  13·····幽默  14·····游戏\n"" 15·····节日  16·····人造  17·····人类  18·····军事  19·····综合  20·····电影\n"" 22·····音乐  24·····摄影  25·····产品  26·····宗教  27·····科幻  28·····运动\n"" 29·····电视  30·····技术  31·····座驾  32·····游戏  33·····女性  34·····武器")category_id = int(input("请输入你想爬取的壁纸类别序号:"))# 判断用户输入的数据是否正确while True:if category_id in range(1, 35):breakelse:print("看清楚提示,哈麻皮!!!")category_id = int(input("请输入你想爬取的壁纸类别序号:"))#这是根据用户输入,输出类别的名字name=category_name(category_id)print("你选择的类别是%s" % name)# 在链接后面加上lang=Chinese 网页就可以变成中文category_url = category + str(category_id) + "&lang=Chinese" print(category_url)return category_url,name

2、输入后在根据用户输入id输出对应的类别名称:

def category_name(name):if name == 1:category_name='抽象'return category_name
#没什么卵用 太长了不贴全部了 有需要去GitHub上复制

3、当然该网站也可以直接搜索关键词(不过好像,你想到的大部分关键词,都是跳转到什么的类别链接):

#根据上面输入的代码 输入2 就运行下面的代码,在输入你想搜索的壁纸关键字elif search == 2:#这是关键字搜索的链接search_ = "https://wall.alphacoders.com/search.php?search="key = input("输入你要获取的壁纸关键字:")#对输入的数据进行转码key_ = parse.quote(key)search_url = search_ + key_ + "&lang=Chinese"print(search_url)return search_url,keyelse:print("看清楚提示,哈麻皮!!!")

4、打开网页,分析源码,例如动漫类别

三、获取每页的链接

1、点击下一页,查看网页链接变化,发现只是简单的增长:

2、编写代码,输出每页的地址:

def main():#choose()函数的返回值是用户选择的图片检索方式对应的链接 返回值是一个元组类型 (url,name)#我把前面的代码写在单独的一个文件里面了tuple_=choose()url=tuple_[0]name=tuple_[1]#创建页面链接队列和图片链接队列PageQueue=Queue(100)ImgQueue=Queue(1000)start=int(input("输入开始页数:"))end=int(input("输入结束页数:"))for i in range(start,end):page_url=url+'&page='+str(i)#存到队列PageQueue.put(page_url)

四、获取每页所有的壁纸链接,并存入到队列:

我觉得我注释已经写的很清楚了

class GetImgUrl(threading.Thread):def __init__(self,PageQueue,ImgQueue):super(GetImgUrl, self).__init__()self.PageQueue=PageQueueself.ImgQueue=ImgQueueself.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}def run(self):while True:# if self.ImgQueue.empty():#     break#从队列中获取一个数据page_url=self.PageQueue.get()print(page_url)self.parse(page_url)def parse(self,page_url):response=requests.get(page_url,headers=self.headers)#获取重定向后的链接url=response.urlhtml=requests.get(url,headers=self.headers).texthtml=etree.HTML(html)img_list=html.xpath('//div[@class="boxgrid"]')for img in img_list:title=img.xpath("./a/@href")[0]'''这里的xpath是定位到class=boxgrid 然后定位到img浏览器能看到数据,解析却不行,直接输出etree.HTML()后的源码发现这个网站有很多"语法错误",许多标签没有</*>表示结束,例如<source> 导致解析的路径和Chrome浏览器获取的路径不一样离谱呀'''src = img.xpath("./a/picture/source/source/source/img/@src")[0]# 匹配不是数字的其他字符drop = re.compile("[^0-9]")# 将中匹配到的字符替换成空字符title = drop.sub('', title)#获取高清图片链接 这里直接把 thumbbig- 替换为空就得到链接src=src.replace('thumbbig-','')#获取图片格式suffix = os.path.splitext(src)[1]#最后的文件名filename=str(title)+suffix#存到队列self.ImgQueue.put((filename,src))

五、从队列中取出数据,对壁纸链接发送请求,下载到本地:

记得改一下路径

class DownloadImg(threading.Thread):def __init__(self,ImgQueue,name):super(DownloadImg, self).__init__()self.ImgQueue = ImgQueueself.name=nameself.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}def run(self):while True:#获取一个数据filename,img=self.ImgQueue.get()self.Dwonload(filename,img)def Dwonload(self,filename,img):try:resp = requests.get(img, headers=self.headers)if resp.status_code!=200:print("恭喜你请求失败了!!!"%resp.status_code)#设置保存路径 +选择的壁纸类别+文件名为图片idpath='E:/Wallpaper/'+self.name+'/'#如果目录不存在则创建目录if not os.path.exists(path):os.makedirs(path)with open(path+ filename, 'wb') as file:file.write(resp.content)print('[INFO] 保存%s成功' % filename)except Exception as e:print(e)print('[INFO]保存失败的图片地址:%s '%img)

六、保存到本地的效果如图所示:

源码地址

多线程爬取wall.alphacoders壁纸相关推荐

  1. 【Python爬虫学习实践】多线程爬取Bing每日壁纸

    在本节实践中,我们将借助Python多线程编程并采用生产者消费者模式来编写爬取Bing每日壁纸的爬虫.在正式编程前,我们还是一样地先来分析一下我们的需求及大体实现的过程. 总体设计预览 首先,我们先来 ...

  2. 爬取wall.alphacoders.com下的英雄联盟壁纸,爬虫完整过程

    爬取League of Legends壁纸 详细思路与过程 网址:https://wall.alphacoders.com/search.php?search=League+of+Legends 把鼠 ...

  3. python壁纸数据抓取_python 多线程爬取壁纸网站的示例

    基本开发环境 ・ Python 3.6 ・ Pycharm 需要导入的库 目标网页分析 网站是静态网站,没有加密,可以直接爬取 整体思路: 1.先在列表页面获取每张壁纸的详情页地址 2.在壁纸详情页面 ...

  4. Python爬虫实战 | 利用多线程爬取 LOL 高清壁纸

    来源:公众号[杰哥的IT之旅] 作者:阿拉斯加 ID:Jake_Internet 如需获取本文完整代码及 LOL 壁纸,请为本文右下角点赞并添加杰哥微信:Hc220088 获取. 一.背景介绍 随着移 ...

  5. 多线程爬取4k超高清美图壁纸

    多线程爬取4k美图壁纸 前言:看完此篇文章你可以更加深入的了解多线程的使用,并且最重要的你能够下载你自己想要的超高清4k壁纸 爬取结果: 1. 分析网站 要爬取的url :http://pic.net ...

  6. 多线程爬取王者荣耀皮肤壁纸

    今天写了个小demo,多线程爬取王者荣耀全皮肤,话不多说,直入主题. https://pvp.qq.com/web201605/herolist.shtml这个是玩王者荣耀官网上的英雄列表,这个时候一 ...

  7. python壁纸4k_【python日常学习】爬取4K桌面壁纸

    [Python] 纯文本查看 复制代码import re import requests import os from time import sleep def get_page(): page = ...

  8. python多线程爬虫数据顺序_多线程爬取小说时如何保证章节的顺序

    前言 爬取小说时,以每一个章节为一个线程进行爬取,如果不加以控制的话,保存的时候各个章节之间的顺序会乱掉. 当然,这里说的是一本小说保存为单个txt文件,如果以每个章节为一个txt文件,自然不会存在这 ...

  9. python多线程爬取斗图啦数据

    python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...

最新文章

  1. python_循环删除list中的元素,有坑啊!
  2. boost::prev_permutation相关的测试程序
  3. 精彩回顾 | Dapr闪电说系列
  4. jvm的client与server工作模式
  5. CSS层叠样式选择器归纳
  6. opencv 在工业中的应用:blob分析
  7. 互联网服务器使用ipset 和iptables禁止国外IP访问
  8. 李嘉诚:没有人愿意贫穷,但出路在哪(转自意林)
  9. Floyd-Warshall算法详解(转)
  10. form表单的enctype
  11. 为什么建议大家使用 Linux 开发?爽!!!!!!!
  12. android版怎么下载地址,负重前行怎么下载到手机 最新安卓版下载地址
  13. 抗旋转matlab算法,抗旋转核心训练:2个动作推荐
  14. 使用iozone测试磁盘性能(测试文件读写)
  15. [附源码]SSM计算机毕业设计志愿者管理系统论文2022JAVA
  16. JSCanvas画板
  17. 多人对战小游戏快速开发实例分享(附源码)
  18. 路由器交换机:单臂路由下的DHCP
  19. 六、Linux权限管理
  20. 【杭电错题】#12青年歌手大奖赛_评委会打分——最优解

热门文章

  1. 渡阡科技Edu——梦开始的地方
  2. 蒙特卡罗方法采样算法
  3. 2020款苹果iPad Pro将搭载3D感应后置摄像头
  4. ThinkBook 14P 15P 笔记本结束休眠后触控板手势失效问题解决 亲测可行
  5. 笔记本可自行更换CPU、独显了,老外用它手搓了台“PS5”
  6. JTAG、JLink、ULINK、ST-LINK仿真器区别
  7. java if或_java中if条件语句里条件的并列
  8. 【NLP开发】Python实现中文、英文分词
  9. Java和C语言有什么区别?
  10. 8/11 Perl和Postgresql联合在京交流会 Perl6项目经理远道参加