WallPaperAbyss爬虫
介绍
目标网站wallpaperAbyss
并发壁纸爬虫,添加了进度条功能
Wallpaper Abyss - 高清壁纸, 桌面背景
-------------------------------------------------------------------
Gitee
python-wallpaper-abyss-reptile: 并发壁纸爬虫,添加了进度条功能
-------------------------------------------------------------------
思路和步骤
首先我们进入总览网页,如近期热门
然后,我们在在近期热门下开始爬取,获取图片的过程分为三步
1.获取到总览网页中所有子网页的网址
这一步我们利用xpath来做
# 主页面pbar.update(3)pbar.set_description_str(" visting original webpage ")response = requests.get(url=base_url, headers=headers)data = response.text# 子页面html_data = parsel.Selector(data)data_list = html_data.xpath('//div[@class="thumb-container-big "]//div[@class="boxgrid"]/a/@href').extract()raw = parallel_sub_url(data_list) # 获取子页面链接组
2.在子界面提取参数,即待会请求图片源数据所需要的参数。
在进入子网页后,我们往下翻
这里获取图片源数据有两种办法,一是网页预览大图后保存,二是使用和下载原图一样的方法。
即请求服务器直接获取数据。一方法很慢,我们用二方法。
⬇
在这里我们看到有下载原图,然而分析html是找不到源数据链接的,但是通过网络分析可以找到请求地址
这里的content_id, file_type, image_server这三个是需要发送的参数,content_type不变
这三个参数我们可以在子网页中间的大图a标签中找到
<a href="https://images3.alphacoders.com/117/1172732.jpg">
即content_id="1172732", file_type="jpg", image_server="images3"
3.请求服务器获取数据
通过xpath分析子页面标签,我们已经获得了参数
请求url是 https://api.alphacoders.com/content/get-download-link
方法 post
用postman请求后,我们得到了下载地址
再次请求下载地址可以得到图片源数据
看似是乱码,但这就是图片数据。
保存图片注意后缀,前面的file_type="jpg",这里保存为jpg
打开后可以看到这就是原图
-------------------------------------------------------------------
改进
最开始我使用的是requests单线程的爬取,所以很慢,但也比下载网页预览原图快得多。
一是因为这是国外的网站
二是图片的大小确实有点大
后来我改用grequests并发下载,30个一组,这个时候下载完一组,即一页大概25s,10页在5分钟左右。
因为在头信息有个字符打错了,老是报错, 导致我以为被服务器发现是爬虫了
但是后来我想要做进度条效果时,我发现grequests不适合,因为他是全部下载完才返回数据。
我没有办法在中间插入进度条计数。
所有后来我就用gevent并发requests了,进度条使用的是tqdm,这个进度条模块确实很好
不过速度是慢了点,但可视性大大提升
另外,这个网站的手机版壁纸,因为网页结构不同,标签结构的提取和请求参数等要有所改动
WallPaperAbyss爬虫相关推荐
- html,xml_网页开发_爬虫_笔记
20220402 笔记本走手机热点,重连之后又是另一个ip 20220331 https://mp.weixin.qq.com/s/znXuCB0Fl32TbP_0UaO6SQ 爬虫相关知识快速复习 ...
- Python 爬虫框架Scrapy安装汇总
传统方式安装Scrapy(慎用) 练习了基本的操作之后,当然就要找框架来进行爬虫实验啊.于是就在网上找Windows 64安装Scrapy的方法,查到的都是非常繁琐的安装方式,由于Scrapy有很多个 ...
- Python:爬虫框架Scrapy的安装与基本使用
一.简单实例,了解基本. 1.安装Scrapy框架 这里如果直接pip3 install scrapy可能会出错. 所以你可以先安装lxml:pip3 install lxml(已安装请忽略). 安装 ...
- Python:从零搭建Redis-Scrapy分布式爬虫
Scrapy-Redis分布式策略: 假设有四台电脑:Windows 10.Mac OS X.Ubuntu 16.04.CentOS 7.2,任意一台电脑都可以作为 Master端 或 Slaver端 ...
- Python案例:使用XPath的爬虫
案例:使用XPath的爬虫 现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地. # tieba_xpath.py#!/usr/b ...
- Python案例:使用正则表达式的爬虫
案例:使用正则表达式的爬虫 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/ ...
- 关于Python爬虫原理和数据抓取1.1
为什么要做爬虫? 首先请问:都说现在是"大数据时代",那数据从何而来? 企业产生的用户数据:百度指数.阿里指数.TBI腾讯浏览指数.新浪微博指数 数据平台购买数据:数据堂.国云数据 ...
- python爬虫之Scrapy框架的post请求和核心组件的工作 流程
python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...
- Rstudio 实现 爬虫 文本分词 个性化词云设计--我爱中国我爱党
Rstudio 爬虫 文本分词个性化词云设计 目录 1.环境准备,加载依赖 2.rvest 爬虫,数据爬取 3.jiebaR用于分词,词频统计 4.wordcloud2 结果可视化 ========= ...
- 『Scrapy』爬虫框架入门
框架结构 引擎:处于中央位置协调工作的模块 spiders:生成需求url直接处理响应的单元 调度器:生成url队列(包括去重等) 下载器:直接和互联网打交道的单元 管道:持久化存储的单元 框架安装 ...
最新文章
- 嵌入式Linux教程一:安装Ubuntu并进行基本配置、交叉编译环境和Minicom
- el search 查询排序
- MySQL中如何通过修改表实现约束的添加与删除
- 你需要的是持续的服务改进
- OpenCV使用Harris-Stephens方法检测角点的实例(附完整代码)
- pytorch入门学习(三) 神经网络
- Java命令:jinfo — 查看进程参数
- POI EXCEL读取 性能问题
- javascript 阻止冒泡和浏览器的默认行为
- 8-3 redis sentine
- MySQL外键约束详解
- c语言程序员英文简历,程序员it英文简历模板范文
- tkinter canvas绘图全攻略(图形项、配置参数和案例详解)
- mysql查询下个月过生日的说说_查询优化:说说一个数据库的查询方法
- h5调用指纹识别_基于HTML Canvas实现“指纹识别”技术,canvas指纹
- 计算机组装与维修(一)
- iOS UITextView自动识别链接(自动识别URL)
- 校园 爆料 开怀一笑
- 【计算机网络】物理层 : 编码与调制 ( 基带信号 | 宽带信号 | 编码 | 调制 )
- 求Fibonacci(斐波那契)数列的的前n项
热门文章
- 【HTML】HTML网页设计----植物网站设计
- 2016.8.26 动态规划及杂题选讲 [树形dp] [数论] [矩阵快速幂]
- 【k8s系列5】KubernetesClientException: too old resource version 原因分析
- 35岁以后你还能干嘛?
- epoch和episode
- 怎样查找MP3音乐链接地址 用于QQ空间背景
- JavaScript 基础(一)
- python钻石和玻璃球游戏_python使用pygame实现笑脸乒乓球弹珠球游戏
- Proof of Stake FAQ
- WTL 自绘控件库 (CQsEdit)