爬取元气桌面壁纸

 要想创建一个动态壁纸网站,那么动态壁纸就是灵魂!

目前主流的动态壁纸网站没有几个,今天我分析一下元气桌面网站的动态壁纸:https://bizhi.cheetahfun.com/dn/d/

首先导入包:

import requests
import re
import MySQLdb

然后分析一下网站:

 通过每个分类的url得知,‘c1d’是风景分类,‘c2d’是动漫分类,其他的分类依次是:‘c3d’,‘c4d’......

防止反爬规则,我们写入:

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

命名一个变量:category_dict,里面写入所有的分类:

# 请求URL获取分类
category_dict = {
      '1': '风景',
      '2': '动漫',
      '3': '美女',
      '6': '动物',
      '5': '明星',
      '4': '游戏',
      '7': '科幻',
      '10': '小清新',
      '11': '其他'
}

新建for循环:

for page in range(start, end):
 category_dict1 = f'https://bizhi.cheetahfun.com/dn/c{page1}d/p{page}' + category_dict[category_id]
 category1 = requests.get(url=category_dict1, headers=headers).text
 # print(category1)
 href = re.findall(r'<a target="_blank" href="(.*?)" title="(.*?)" data-classify-id="(.*?)" data-image-id="(.*?)".*?>', category1)
 # print(href)

然后给代码增加输入效果:

start = int(input("开始页数:")) # 这里写要爬取的初始页面
end = int(input("结束页数:")) # 这里写要终止爬取的页面
category_id = input("分类翻页:") # 这里写category_dict中分类对应的数字,如:1,2,3,6......
page1 = int(input("分类:")) # 这里写category_dict中分类对应的数字,如:1,2,3,6......

现在,我们只是获得了该分类页面下的所有视频网页,如:https://bizhi.cheetahfun.com/dn/pd345388.html

新建for循环,目的是为了将每一个动态壁纸的链接提取出来:

 for h in href:
     img = re.findall(r'https://([^"]*)', h[0])
     print('https://' + img[0])

新建for循环,为了将每一个动态壁纸的视频与名字提取出来:

 for link in list_img:
     response = requests.get(link, headers=headers).text
     # print(response)
     pattern = re.findall(r'<video id="myVideo".*? src="(.*?)".*?></video>', response)
     name = re.findall(r'<div class="relative mb-3 float-left".*? alt="(.*?)".*?></div>', response)
     # print(name)

接下来,我们新建两个数组:

# 新建数组
list_img = []
list_mp4 = []
# 保存到数组里面
list_img.append('https://' + img[0])
list_mp4.append(name + pattern)

现在所有的视频链接与名字都可以提取出来啦!

需要将内容存储到数据库中:

# 连接到 MySQL 数据库
conn = MySQLdb.connect(host='localhost', user='root', passwd='123456', db='user')

# 创建游标
cursor = conn.cursor()

# 创建数据表
# 如果要想更改分类,就把数据表修改名字,重新创造一个数据表
try:
    cursor.execute("CREATE TABLE images (name VARCHAR(255), mp4_url VARCHAR(255))")
except:
    pass
for link in list_img:
    response = requests.get(link, headers=headers).text
    name = re.findall(r'<div class="relative mb-3 float-left".*? alt="(.*?)".*?></div>', response)[0]
    pattern = re.findall(r'<video id="myVideo".*? src="(.*?)".*?></video>', response)[0]
    cursor.execute("SELECT * FROM images WHERE name=%s AND mp4_url=%s", (name, pattern))
    if cursor.fetchone() is not None:
        print(f'Skipping duplicate: {name}')
    else:
        cursor.execute("INSERT INTO images VALUES (%s, %s)", (name, pattern))
        print(f'Saved: {name}')

# 提交更改
conn.commit()

# 关闭游标和连接
cursor.close()
conn.close()

完整代码如下:

import requests
import re
import MySQLdb
# PS:爬取多页运行速度很慢,可以调整一下软件的内存与运行内存

# 连接到 MySQL 数据库
conn = MySQLdb.connect(host='localhost', user='root', passwd='123456', db='user')

# 创建游标
cursor = conn.cursor()

# 创建数据表
# 如果要想更改分类,就把数据表修改名字,重新创造一个数据表
try:
    cursor.execute("CREATE TABLE images (name VARCHAR(255), mp4_url VARCHAR(255))")
except:
    pass


headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 请求URL获取分类
category_dict = {
      '1': '风景',
      '2': '动漫',
      '3': '美女',
      '6': '动物',
      '5': '明星',
      '4': '游戏',
      '7': '科幻',
      '10': '小清新',
      '11': '其他'
}

start = int(input("开始页数:")) # 这里写要爬取的初始页面
end = int(input("结束页数:")) # 这里写要终止爬取的页面
category_id = input("分类翻页:") # 这里写category_dict中分类对应的数字,如:1,2,3,6......
page1 = int(input("分类:")) # 这里写category_dict中分类对应的数字,如:1,2,3,6......
list_img = []
list_mp4 = []
for page in range(start, end):
 category_dict1 = f'https://bizhi.cheetahfun.com/dn/c{page1}d/p{page}' + category_dict[category_id]
 category1 = requests.get(url=category_dict1, headers=headers).text
# print(category1)
 href = re.findall(r'<a target="_blank" href="(.*?)" title="(.*?)" data-classify-id="(.*?)" data-image-id="(.*?)".*?>', category1)
 # print(href)
 for h in href:
     img = re.findall(r'https://([^"]*)', h[0])
     list_img.append('https://' + img[0])
 for link in list_img:
     response = requests.get(link, headers=headers).text
     # print(response)
     pattern = re.findall(r'<video id="myVideo".*? src="(.*?)".*?></video>', response)
     name = re.findall(r'<div class="relative mb-3 float-left".*? alt="(.*?)".*?></div>', response)
     list_mp4.append(name + pattern)
     # print(name)
for link in list_img:
    response = requests.get(link, headers=headers).text
    name = re.findall(r'<div class="relative mb-3 float-left".*? alt="(.*?)".*?></div>', response)[0]
    pattern = re.findall(r'<video id="myVideo".*? src="(.*?)".*?></video>', response)[0]
    cursor.execute("SELECT * FROM images WHERE name=%s AND mp4_url=%s", (name, pattern))
    if cursor.fetchone() is not None:
        print(f'Skipping duplicate: {name}')
    else:
        cursor.execute("INSERT INTO images VALUES (%s, %s)", (name, pattern))
        print(f'Saved: {name}')

# 提交更改
conn.commit()

# 关闭游标和连接
cursor.close()
conn.close()

程序的缺点就是爬下来的动态壁纸只有十秒时间!并且运行很慢!!!

PS:4K动态壁纸不要爬!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值