Python素材下载爬虫,ui素材下载爬取采集源码
时间:2022-07-22
本文章向大家介绍Python素材下载爬虫,ui素材下载爬取采集源码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Uimaker是为UI设计师提供学UI设计的专业UI平台,拥有UI教程、UI素材、ICON、图标设计UI、手机UI、ui设计师招聘、软件界面设计、后台界面、后台模版等相关内容,快来uimaker学UI设计。
目标网站:
http://www.uimaker.com/uimakerdown/list_36_1.html
uimaker
爬取思路:
第一步:或缺素材页码总页数
第二步:爬取素材列表链接
第三步:爬取素材详情
python爬取采集关键点:
1.页码总数格式化处理
replace函数和split函数
pagenum=pagenum_url.replace(".html",'').split('_')[-1]
2.内容详情格式化处理
article=req.xpath('//div[@class="contentinfo"]/table//text()')
article =''.join(article)
article =article.strip()
3.是否需要u币下载,这里作了判断
b_num=req.xpath('//div[@class="download"]/dl[@class="downlink"]/dd[1]/b/text()')[0]
if int(b_num)==0:
4.特殊情况,无此链接信息的处理
try:
down_url=req.xpath('//div[@class="download"]/dl[@class="downlink"]/dt/li/a/@href')[0]
down_name=f'{h2}/{h2}.rar'
print(down_url,down_name)
self.down(down_url,down_name)
except Exception as e:
print("无此链接信息!")
运行情况:
运行情况
运行效果:
运行效果
完整源码:
#uimaker素材获取
#20200310 by 微信:huguo00289
# -*- coding: UTF-8 -*-
import requests,time,os
from lxml import etree
from fake_useragent import UserAgent
class Uimaker():
#初始化变量
def __init__(self):
self.ua=UserAgent()
self.headers={"User-Agent":self.ua.random}
#获取页码
def get_pagenum(self):
url="http://www.uimaker.com/uimakerdown/"
response=requests.get(url,headers=self.headers,timeout=6).content.decode("gbk")
req=etree.HTML(response)
pagenum_url=req.xpath('//div[@class="page"]/ul[@class="pagelist"]/li')[-1].xpath('.//a/@href')[0]
pagenum=pagenum_url.replace(".html",'').split('_')[-1]
pagenum=int(pagenum)
print(pagenum)
return pagenum
#获取列表链接
def get_urllist(self,i):
url=f"http://www.uimaker.com/uimakerdown/list_36_{i}.html"
print(url)
response = requests.get(url, headers=self.headers,timeout=6).content.decode("gbk")
req = etree.HTML(response)
urllist = req.xpath('//dl[@class="imglist"]/dt/ul[@class="listimg"]/li/span[@class="listpic"]/a/@href')
print(len(urllist))
print(urllist)
return urllist
#获取素材详情
def get_dowm(self,url):
response = requests.get(url,headers=self.headers,timeout=6).content.decode("gbk")
req = etree.HTML(response)
h2 = req.xpath('//div[@class="arcinfo"]/h2/text()')[0]
print(h2)
os.makedirs(f'{h2}/',exist_ok=True)
article=req.xpath('//div[@class="contentinfo"]/table//text()')
article =''.join(article)
article =article.strip()
print(article)
texts=f'{h2}n{article}'
self.get_text(h2,texts)
imgs=req.xpath('//div[@class="contentinfo"]/table//@src')
if imgs:
i=1
for img in imgs:
img_url=f'http://www.uimaker.com{img}'
suffix=os.path.splitext(img)[1]
img_name=f'{i}{suffix}'
print(img_url,img_name)
self.get_downimg(h2, img_url, img_name)
i=i+1
b_num=req.xpath('//div[@class="download"]/dl[@class="downlink"]/dd[1]/b/text()')[0]
if int(b_num)==0:
try:
down_url=req.xpath('//div[@class="download"]/dl[@class="downlink"]/dt/li/a/@href')[0]
down_name=f'{h2}/{h2}.rar'
print(down_url,down_name)
self.down(down_url,down_name)
except Exception as e:
print("无此链接信息!")
print(f'>>>获取素材成功!')
#保存文本内容
def get_text(self,h2,texts):
print("开始保存文本内容...")
with open(f'{h2}/{h2}.txt', 'w',encoding="utf-8") as f:
f.write(texts)
print(">>>保存文本内容完成!")
#下载图片
def get_downimg(self,h2,img_url,img_name):
print("开始下载图片...")
r = requests.get(img_url, headers=self.headers, timeout=6)
with open(f'{h2}/{img_name}', 'wb') as f:
f.write(r.content)
print(">>>下载素材完成!")
#下载素材
def down(self,down_url,down_name):
print("开始下载素材...")
r=requests.get(down_url,headers=self.headers,timeout=6)
with open(down_name,'wb') as f:
f.write(r.content)
print(">>>下载素材完成!")
#运行程序
def run(self):
pagenum=self.get_pagenum()
for i in range(1,pagenum+1):
urllist=self.get_urllist(i)
for url in urllist:
self.get_dowm(url)
if __name__=='__main__':
spider=Uimaker()
spider.run()
- 【直播】我的基因组59:把我的数据伪装成23andme或wegene的芯片数据
- asp.net web api客户端调用
- 细说WebSocket - Node篇
- TensorFlow从0到1丨 第六篇:解锁梯度下降算法
- .Net多线程编程—误用点分析
- Web开发常见的几个漏洞解决方法
- .Net多线程编程—同步机制
- .Net多线程编程—Parallel LINQ、线程池
- 没有自己的服务器如何学习生物数据分析(下篇)
- .Net多线程编程—并发集合
- .Net多线程编程—任务Task
- 学会WCF之试错法——安全配置报错分析
- 生物信息学技能面试题(第5题)-根据GTF画基因的多个转录本结构
- 学会WCF之试错法——超时
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现音乐播放进度条传递信息的两种方式(在service和activity中)
- Flutter 中 Dart的Mixin示例详解
- Android Studio 实现九宫格功能
- Android user版通过adb_enable开启adb 调试 不提示对话框的流程分析
- Android实现圆线按钮进度效果
- Flutter 透明状态栏及字体颜色的设置方法
- Android实现带有进度条的按钮效果
- Android 自定义View实现多节点进度条功能
- android studio无法添加 bmob sdk依赖问题及解决方法
- Android自定义ToolBar并实现沉浸式的方法
- python初学者笔记—入门基础知识
- Android SurfaceView画板操作
- Android利用Andserver搭建服务器的详细教程
- 位运算处理进制转换问题
- python的to_sql那点儿事