介绍

目标网站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爬虫相关推荐

  1. html,xml_网页开发_爬虫_笔记

    20220402 笔记本走手机热点,重连之后又是另一个ip 20220331 https://mp.weixin.qq.com/s/znXuCB0Fl32TbP_0UaO6SQ 爬虫相关知识快速复习 ...

  2. Python 爬虫框架Scrapy安装汇总

    传统方式安装Scrapy(慎用) 练习了基本的操作之后,当然就要找框架来进行爬虫实验啊.于是就在网上找Windows 64安装Scrapy的方法,查到的都是非常繁琐的安装方式,由于Scrapy有很多个 ...

  3. Python:爬虫框架Scrapy的安装与基本使用

    一.简单实例,了解基本. 1.安装Scrapy框架 这里如果直接pip3 install scrapy可能会出错. 所以你可以先安装lxml:pip3 install lxml(已安装请忽略). 安装 ...

  4. Python:从零搭建Redis-Scrapy分布式爬虫

    Scrapy-Redis分布式策略: 假设有四台电脑:Windows 10.Mac OS X.Ubuntu 16.04.CentOS 7.2,任意一台电脑都可以作为 Master端 或 Slaver端 ...

  5. Python案例:使用XPath的爬虫

    案例:使用XPath的爬虫 现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地. # tieba_xpath.py#!/usr/b ...

  6. Python案例:使用正则表达式的爬虫

    案例:使用正则表达式的爬虫 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起尝试一下爬取内涵段子网站: http://www.neihan8.com/ ...

  7. 关于Python爬虫原理和数据抓取1.1

    为什么要做爬虫? 首先请问:都说现在是"大数据时代",那数据从何而来? 企业产生的用户数据:百度指数.阿里指数.TBI腾讯浏览指数.新浪微博指数 数据平台购买数据:数据堂.国云数据 ...

  8. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  9. Rstudio 实现 爬虫 文本分词 个性化词云设计--我爱中国我爱党

    Rstudio 爬虫 文本分词个性化词云设计 目录 1.环境准备,加载依赖 2.rvest 爬虫,数据爬取 3.jiebaR用于分词,词频统计 4.wordcloud2 结果可视化 ========= ...

  10. 『Scrapy』爬虫框架入门

    框架结构 引擎:处于中央位置协调工作的模块 spiders:生成需求url直接处理响应的单元 调度器:生成url队列(包括去重等) 下载器:直接和互联网打交道的单元 管道:持久化存储的单元 框架安装 ...

最新文章

  1. 嵌入式Linux教程一:安装Ubuntu并进行基本配置、交叉编译环境和Minicom
  2. el search 查询排序
  3. MySQL中如何通过修改表实现约束的添加与删除
  4. 你需要的是持续的服务改进
  5. OpenCV使用Harris-Stephens方法检测角点的实例(附完整代码)
  6. pytorch入门学习(三) 神经网络
  7. Java命令:jinfo — 查看进程参数
  8. POI EXCEL读取 性能问题
  9. javascript 阻止冒泡和浏览器的默认行为
  10. 8-3 redis sentine
  11. MySQL外键约束详解
  12. c语言程序员英文简历,程序员it英文简历模板范文
  13. tkinter canvas绘图全攻略(图形项、配置参数和案例详解)
  14. mysql查询下个月过生日的说说_查询优化:说说一个数据库的查询方法
  15. h5调用指纹识别_基于HTML Canvas实现“指纹识别”技术,canvas指纹
  16. 计算机组装与维修(一)
  17. iOS UITextView自动识别链接(自动识别URL)
  18. 校园 爆料 开怀一笑
  19. 【计算机网络】物理层 : 编码与调制 ( 基带信号 | 宽带信号 | 编码 | 调制 )
  20. 求Fibonacci(斐波那契)数列的的前n项

热门文章

  1. 【HTML】HTML网页设计----植物网站设计
  2. 2016.8.26 动态规划及杂题选讲 [树形dp] [数论] [矩阵快速幂]
  3. 【k8s系列5】KubernetesClientException: too old resource version 原因分析
  4. 35岁以后你还能干嘛?
  5. epoch和episode
  6. 怎样查找MP3音乐链接地址 用于QQ空间背景
  7. JavaScript 基础(一)
  8. python钻石和玻璃球游戏_python使用pygame实现笑脸乒乓球弹珠球游戏
  9. Proof of Stake FAQ
  10. WTL 自绘控件库 (CQsEdit)