练手小项目,爬取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.text
            picurl = 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协议,仅学习用,图片已经全部删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值