博客原文:https://weweweha.com

1. 概述

​ 爬取3DM指定网页的游戏壁纸,并且通过多线程来加速爬取图片的速度。

2.使用库

​ request库用来1解析指定网页,re库用来搜索指定网页中的图片地址,threading多线程模块用来加速图片爬取。

3.网页分析

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9drAZePc-1590219277095)(练手小项目,爬取3DM图片/1.JPG)]

#3DM
import requests#引入requests库
a = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
}#定义浏览器抬头,防止反爬
url="https://www.3dmgame.com/tu/3742411.html"
r = requests.get(url,headers=a)
r.encoding=r.apparent_encoding
print(r.text)

结果展示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WrteuwJd-1590219277097)(练手小项目,爬取3DM图片/2.JPG)]

3.找到需要的图片地址信息

​ 通过观察网页源代码可以发现所有的壁纸信息都以jpg格式存放,所以通过正则表达式来寻找所要的信息,正则表达式:https://.*?.jpg

#3DM
import requests  #引入requests库
import re  #引入re库
a = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
}#定义浏览器抬头,防止反爬
url="https://www.3dmgame.com/tu/3742411.html"
r = requests.get(url,headers=a)
r.encoding=r.apparent_encoding
demo=r.text
urllist=re.findall("https://.*?.jpg",demo)
print(urllist)

结果展示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JBaqnl6-1590219277097)(练手小项目,爬取3DM图片/3.JPG)]

4.定义下载图片的函数

#3DM
import requests  #引入requests库
import re  #引入re库
a = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
}#定义浏览器抬头,防止反爬
url="https://www.3dmgame.com/tu/3742411.html"
r = requests.get(url,headers=a)
r.encoding=r.apparent_encoding
demo=r.text
urllist=re.findall("https://.*?.jpg",demo)
def download(list):for i in list:try:r = requests.get(i, headers=a)path = "G://游戏图片//" + i.split("/")[-1]with open(path, "wb") as f:f.write(r.content)f.close()except:pass
download(urllist)
print("爬取完毕")

结果展示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-szj9KORZ-1590219277099)(练手小项目,爬取3DM图片/4.JPG)]

5.多线程爬取多组壁纸

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-htRTuvPR-1590219277100)(练手小项目,爬取3DM图片/5.JPG)]

​ 可以看到一个页面最多有20组壁纸,那就设定2个线程同时爬取这些壁纸:

#3DM
import requests  #引入requests库
import re  #引入re库
import threading    #引入多线程
a = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
}#定义浏览器抬头,防止反爬
url="https://www.3dmgame.com/tu_52_1/"
r = requests.get(url,headers=a)
r.encoding=r.apparent_encoding
demo = r.text
b = re.findall("[0-9]+.html", demo)
c = ["https://www.3dmgame.com/tu/" + x for x in b]
def download(urllist):#定义下载函数for url in urllist:try:picture = requests.get(url, headers=a)path = "G://游戏图片//" + url.split("/")[-1]with open(path, "wb") as f:f.write(picture.content)f.close()except:pass
def geturl(urllistall):#定义获取图片地址我的函数g=[]for i in urllistall:try:r = requests.get(i, headers=a)demo=r.textpicurl = re.findall("https://.*?jpg", demo)g+=picurl#叠加每个网页获取的图片地址信息并且存放在g数组中except:pass    return g
d = geturl(c)
h = d[0:len(d) // 2]
j = d[len(d) // 2:len(d) - 1]
t1=threading.Thread(target=download,args=(h, ))
t2 = threading.Thread(target=download, args=(j,))
t1.start()
t2.start()
t1.join()#线程阻塞
t2.join()
print("爬取完毕")

结果展示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BWlI6S7U-1590219277100)(练手小项目,爬取3DM图片/6.JPG)]

6.robots协议

​ 3DM网站根目录下没有robots协议,仅学习用,图片已经全部删除。

练手小项目,爬取3DM图片相关推荐

  1. ssm练手小项目_20 个 JavaScript+Html+CSS 练手的小项目

    前言: 最近在 GitHub 上发现了一个 vanillawebprojects[1] 开源仓库,里面收集了 20 个 JavaScript+Html+CSS的练手项目,没有使用任何框架,可以让你从基 ...

  2. 爬虫练手小项目:豆瓣高分图书TOP100

    爬虫练手小项目:豆瓣高分图书TOP100 import requests import re from requests.exceptions import RequestException impo ...

  3. 练手小项目(5)安全卫士_程序锁

    最近想做的小新工具箱,一直想做一个程序锁,其实原理,很简单,先注册一个服务,检测手机所有进程,如果发现被加锁的app启动,马上弹出一个输入程序锁界面,但是这样子bug很多.我先做一个基本后面慢慢把bu ...

  4. springboot+vue练手小项目[前台搭建+后台编写](非常详细)

    [ springboot+vue练手小项目 ] 技术栈: springboot+vue3+element-plus +Mybaties-plus+hutool +mysql8 项目介绍 :最近刚学了s ...

  5. 台式小风扇(HTML+CSS+JS练手小项目)

    台式小风扇(HTML+CSS+JS练手小项目) 功能介绍 外观展示 HTML代码 CSS代码 JS代码 总结 功能介绍 前段时间看到这样的风扇特效,感觉还挺好玩,就自己也写一个练练手. 风扇有四个档位 ...

  6. 小爬虫爬取小猫咪图片并存入本地文件夹

    小爬虫爬取小猫咪图片并存入本地文件夹 本人是安徽工业大学电气与信息工程学院研一学生,最近还不能开学真的是很糟心哦,由于自己比较笨吧,起步较晚还要忙着学习机器学习还有计算机视觉,但是总学这个感觉很闷也没 ...

  7. 数据结构练手小项目(AVL树、哈希表、循环链表、MySQL数据库)

    文章目录 前言 正文(无删减) 我的想法(删减修改版) 数据导入与数据存储 功能实现 数据结构 用户结构 SIM卡结构 AVL树数据结构 哈希表结构 数据表 用户表 SIM卡表 时间安排 前言 本月主 ...

  8. html+css+js之20个练手小项目(一)

    html+css+js之20个练手小项目(一)--Hangman 前言 一.HTML 二.CSS 三.JS 前言 前端新手练习,记录不迷失. 主要练习html和CSS布局以及JS. 来源github, ...

  9. c语言模拟器怎么打程序,C语言初学者练手小项目——万花模拟器

    原标题:C语言初学者练手小项目--万花模拟器 还记得小时候玩的万花尺么?好好玩,各种不同的点距能画出各种各样形状图形. C语言程序万花尺模拟 函数功能:每隔5秒随机生成万花图形 并自动保存作图参数以及 ...

最新文章

  1. iOS开发之AVKit框架使用
  2. hibernate搭建
  3. stm32的PWM占空比
  4. oracle if 嵌套语句吗,Lua嵌套if语句
  5. Source Generator:C# 9 将迎来编译时元编程
  6. js二级下拉被flash档住的解决办法
  7. java基础之设计模式
  8. xftp6设置默认打开文件的程序_xftp6如何使用?xftp6传输文件的使用详细方法--系统之家...
  9. 【实践案例】Databricks 数据洞察在美的暖通与楼宇的应用实践
  10. 2020年共享汽车发展趋势研究报告
  11. PHP 利用curl 模拟get post 请求
  12. [转载]如何学习ANSYS?
  13. 2014/2015年Mac Pro连接LG Ultra HD显示器刷新率低(30Hz)问题解决
  14. 最方便简单的经纬度查询方法
  15. 解决File “D:\ProgramData\Anaconda3\lib\site-packages\keras\engine\saving.py“,相关问题
  16. CC(标准)版D碟收藏指南(四)
  17. Larval Excel导入
  18. 2022-2-13 转换函数(conversion function) non-explicit-one argument ctor explicit-one argument ctor
  19. 参数use_sim_time
  20. 苹果笔记本,电源指示灯一直为橙色的解决办法

热门文章

  1. 初识神经网络——损失函数
  2. sony z2 android 6.0,索尼Z2/Z3已可升级Android6.0.1:国行一边哭去
  3. 【计算机系统结构】第7章 互联网络
  4. oracle数据库的字段怎么排序规则,Oracle中文、数字混杂字段的排序
  5. pomelo mysql_pomelo中使用mysql
  6. 解决elementaryos下报错W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw for module r8169
  7. 【重大更新】DevExpress v17.2新版亮点—WPF篇(三)
  8. 宝塔面板Nginx防火墙安装
  9. Access、Trunk、Hybrid模式详解
  10. 一篇弄懂LayoutInflater.from(context).inflate()