练手小项目,爬取3DM图片
博客原文: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图片相关推荐
- ssm练手小项目_20 个 JavaScript+Html+CSS 练手的小项目
前言: 最近在 GitHub 上发现了一个 vanillawebprojects[1] 开源仓库,里面收集了 20 个 JavaScript+Html+CSS的练手项目,没有使用任何框架,可以让你从基 ...
- 爬虫练手小项目:豆瓣高分图书TOP100
爬虫练手小项目:豆瓣高分图书TOP100 import requests import re from requests.exceptions import RequestException impo ...
- 练手小项目(5)安全卫士_程序锁
最近想做的小新工具箱,一直想做一个程序锁,其实原理,很简单,先注册一个服务,检测手机所有进程,如果发现被加锁的app启动,马上弹出一个输入程序锁界面,但是这样子bug很多.我先做一个基本后面慢慢把bu ...
- springboot+vue练手小项目[前台搭建+后台编写](非常详细)
[ springboot+vue练手小项目 ] 技术栈: springboot+vue3+element-plus +Mybaties-plus+hutool +mysql8 项目介绍 :最近刚学了s ...
- 台式小风扇(HTML+CSS+JS练手小项目)
台式小风扇(HTML+CSS+JS练手小项目) 功能介绍 外观展示 HTML代码 CSS代码 JS代码 总结 功能介绍 前段时间看到这样的风扇特效,感觉还挺好玩,就自己也写一个练练手. 风扇有四个档位 ...
- 小爬虫爬取小猫咪图片并存入本地文件夹
小爬虫爬取小猫咪图片并存入本地文件夹 本人是安徽工业大学电气与信息工程学院研一学生,最近还不能开学真的是很糟心哦,由于自己比较笨吧,起步较晚还要忙着学习机器学习还有计算机视觉,但是总学这个感觉很闷也没 ...
- 数据结构练手小项目(AVL树、哈希表、循环链表、MySQL数据库)
文章目录 前言 正文(无删减) 我的想法(删减修改版) 数据导入与数据存储 功能实现 数据结构 用户结构 SIM卡结构 AVL树数据结构 哈希表结构 数据表 用户表 SIM卡表 时间安排 前言 本月主 ...
- html+css+js之20个练手小项目(一)
html+css+js之20个练手小项目(一)--Hangman 前言 一.HTML 二.CSS 三.JS 前言 前端新手练习,记录不迷失. 主要练习html和CSS布局以及JS. 来源github, ...
- c语言模拟器怎么打程序,C语言初学者练手小项目——万花模拟器
原标题:C语言初学者练手小项目--万花模拟器 还记得小时候玩的万花尺么?好好玩,各种不同的点距能画出各种各样形状图形. C语言程序万花尺模拟 函数功能:每隔5秒随机生成万花图形 并自动保存作图参数以及 ...
最新文章
- iOS开发之AVKit框架使用
- hibernate搭建
- stm32的PWM占空比
- oracle if 嵌套语句吗,Lua嵌套if语句
- Source Generator:C# 9 将迎来编译时元编程
- js二级下拉被flash档住的解决办法
- java基础之设计模式
- xftp6设置默认打开文件的程序_xftp6如何使用?xftp6传输文件的使用详细方法--系统之家...
- 【实践案例】Databricks 数据洞察在美的暖通与楼宇的应用实践
- 2020年共享汽车发展趋势研究报告
- PHP 利用curl 模拟get post 请求
- [转载]如何学习ANSYS?
- 2014/2015年Mac Pro连接LG Ultra HD显示器刷新率低(30Hz)问题解决
- 最方便简单的经纬度查询方法
- 解决File “D:\ProgramData\Anaconda3\lib\site-packages\keras\engine\saving.py“,相关问题
- CC(标准)版D碟收藏指南(四)
- Larval Excel导入
- 2022-2-13 转换函数(conversion function) non-explicit-one argument ctor explicit-one argument ctor
- 参数use_sim_time
- 苹果笔记本,电源指示灯一直为橙色的解决办法
热门文章
- 初识神经网络——损失函数
- sony z2 android 6.0,索尼Z2/Z3已可升级Android6.0.1:国行一边哭去
- 【计算机系统结构】第7章 互联网络
- oracle数据库的字段怎么排序规则,Oracle中文、数字混杂字段的排序
- pomelo mysql_pomelo中使用mysql
- 解决elementaryos下报错W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125a-3.fw for module r8169
- 【重大更新】DevExpress v17.2新版亮点—WPF篇(三)
- 宝塔面板Nginx防火墙安装
- Access、Trunk、Hybrid模式详解
- 一篇弄懂LayoutInflater.from(context).inflate()