scratch作品导出html5,抓取scratch源码,使用二进制方式保存。
'''
http://www.kidsXXX.cn/product/scratch/0为作品汇总地址,为动画,游戏音乐故事科学编程大作战,依次到5
http://www.kidsXXX.cn/product/4285为信息页面,获取作品名称,作品说明,作品作者
http://www.kidsXXX.cn/getkey/8981为下源二进制文件,数字为ID
如果html源码中有canvas id="scratch-stage">则为sb3源文件,否则为sb2文件
目标:
1.下载优秀的作品(数量,加星)
2.建立sb(2/3)文件,文件名为类别名+作品名称
3.建立说明说明文档,内容为作者及说明
'''
import os,requests,sys,time,bs4
host=r'http://www.kidsXXX.cn/'
listurl=r'http://www.kidsXXXcn/product/scratch/'
infourl=r'http://www.kidsXXXe.cn/product/'
idurl=r'http://www.kidsXXX.cn/getkey/'
leibie=['动画','游戏','音乐','故事','科学','编程大作战']
rootdir=os.getcwd()+'\\scratch'
listtxt=rootdir+'\\list.txt'
listid=[]
if os.path.exists(listtxt):#读取已经写入的ID
with open(listtxt) as idfile:
for i in idfile.readlines():
listid.ap_pend(i.strip())
print(listid)
#time.sleep(300)
def getid(mypath,id):
res=requests.get(infourl+str(id))
html=bs4.BeautifulSoup(res.text,features="lxml")
#print(html.select('div h2')[0].text)#获取题目和作者
title_author=html.find('div',class_='zp_title zp_t').text.split(' ')[0]
#print(title_author)
if html.find('canvas') is None:#判断版本
s_name='.sb2'
else:
s_name='.sb3'
#获取说明
about=html.find('div',class_='zp_ec').text
#print(about)
#保存文件
s=requests.get(idurl+str(id))
s.raise_for_status()
#保存sb文件
sbfile=mypath+'\\'+title_author+s_name
print(str(id)+sbfile.encode('utf-8','ignore').decode('utf-8'))
try:
with open(sbfile,'wb') as f:
print(f.write(s.content))
except:
sbfile=mypath+'\\'+str(id)+s_name
with open(sbfile,'wb') as f:
print(f.write(s.content))
# with open(mypath+'\\'+title_author+'.txt','w') as b:
# print(b.write(unicode(about)))
return 'ok'
if os.path.exists(rootdir):
pass
else:
os.mkdir(rootdir)
#time.sleep(300)
for l in leibie:
#建立类别目录
lb_dir=rootdir+'\\'+l
if os.path.exists(lb_dir):
pass
else:
os.mkdir(lb_dir)
page=1
pages=1
#num=0
print(l)
while True:
print(str(page))
res=requests.get(listurl+str(leibie.index(l))+'/'+str(page))
html=bs4.BeautifulSoup(res.text,features="lxml")
if page==pages:
##获取页码
if html.find('a',class_='end') is None:
#比较页数得最大数
for n in html.find_all('a',class_='num'):
if int(n.text)>pages:
pages=int(n.text)
print(pages)
else:
pages=int(html.find('a',class_='end').text)#获取页码
print(str(pages)+'页码')
for a in html.select('a'):#获取当前页所有作品ID
if r'href' in str(a):
if r'/product/' in a.get('href') and '_blank' == a.get('target'):
#print(str(a.get('href')).split('/')[2])
#num+=1
scratid=a.get('href').split('/')[2]
if scratid in listid:
print('项目{n}重复下载保存'.format(n=scratid))
else:
getid(lb_dir,scratid)
listid.ap_pend(scratid)
with open(listtxt,'a+') as listf:
listf.write(str(scratid)+'\n')
if page==pages :
break
if pages>1:
page+=1
print(len(list(set(listid))))
对一个有scratch源码的网站进行抓取内容。遇到一个问题,项目名称中有特殊字符,在保存时报错。只能改为ID为文件名。
继续研究一下。
def noname(myname): #去除标题中不符合文件名的符号
no_name=['/','\\',':','*','"', '', '|', '?']
for n in range(len(no_name)):
myname=myname.replace(no_name[n],'')
return myname
scratch作品导出html5,抓取scratch源码,使用二进制方式保存。相关推荐
- 抓取网络源码python_使用Python进行网络抓取的新手指南
抓取网络源码python 有很多很棒的书可以帮助您学习Python,但是谁真正读了这些A到Z? (剧透:不是我). 接下来是我的第一个Python抓取项目指南. 假定的Python和HTML知识很少. ...
- 抓取网络源码python_python中的复仇者网络抓取实体提取和网络图
抓取网络源码python 2020 sent more bad news as Black Panther star Chadwick Boseman passed away aged 43. The ...
- 文章抓取(含源码下载)
最近都左做一些资源采集的工作,比如采集新闻,flash,图片等,下面我们通过一个小例子,来详细的说明一下我采集资源的步骤,希望各位能提点建议,不胜感激. 下面就开始吧!我们这次要采集的是这个少儿英语动 ...
- Java---网络蜘蛛-网页邮箱抓取器~源码
刚刚学完Socket,迫不及待的做了这个网页邮箱抓取~~~ 自己以前做过微商,而且还掏钱买过抓取网络邮箱的软件~现在O(∩_∩)O哈哈~我自己做~当然啦,没有别人做得好~只是功能还是差不多啦~ 给一个 ...
- vba抓取html源码数据,VBA代码、网页数据采集、爬取文章
应粉丝要求做一篇爬取网页上的文章. 实现功能:爬取网站上的一篇文章并保存到记事本上. 下面是代码分享 Sub 采集网页上的文章保存到记事本() Dim oHtml As Object Set oHtm ...
- 精仿CNZZ网站访客统计系统源码 | 网页访客抓取采集源码 | 网站访客流量统计源码
源码简介: 仿cnzz多用户统计系统,功能强大,界面完美仿照cnzz统计!支持所有浏览器不乱码,程序是完整,没有删除任何东西,请大家放心使用,想建立自己的统计站点就这么简单! 安装的时候先还原数据库 ...
- CNZZ网站访客统计系统源码 | 网页访客抓取采集源码 | 网站访客流量统计源码
简介: 仿cnzz多用户统计系统,功能强大,界面完美仿照cnzz统计!支持所有浏览器不乱码,程序是完整,没有删除任何东西,请大家放心使用,想建立自己的统计站点就这么简单! 安装的时候先还原数据库 sq ...
- python抓取直播源 并更新_电视直播源抓取工具箱
很多时候你们在pc端看电视直播,都会出现直播源失效的情况,这样就可以用到电视直播源抓取工具箱,帮助你们自动抓取最新的直播源,让你们能够随时的观看自己喜欢的电视内容. 软件简介: 经常看到大家电视直播源 ...
- java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署 本源码技 ...
- java计算机毕业设计HTML5运河古城网站源码+mysql数据库+系统+lw文档+部署
java计算机毕业设计HTML5运河古城网站源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计HTML5运河古城网站源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目 ...
最新文章
- yum安装nginx+PHP+Mysql
- 教你用Python解决非平衡数据问题(附代码)
- 微服务:Java EE的拯救者还是掘墓人?
- 项目中常用的19条MySQL优化
- Web.config文件使用
- springmvc学习资料整理
- react 组件连动效果_React组件开发中常见的陷阱
- Java虚拟机(JVM)面试题大集合
- Android 驱动(10)----设备树(二)linux内核顶层am335x-evm.dts
- centos7 查看oracle运行日志_Linux(CentOS7)部署系列---常规应用部署方案
- Android 服务
- 顶会集结+深度解析:医疗+AI如此火爆,NLP如何赋能?
- iOS 15 地图应用程序的所有新功能:更新的详细信息、AR 步行路线、全球视图等
- FireDac 组件说明二
- javaERP跨境电商平台,跨境电商源码,电商ERP源码,ERP源码
- usbserialch340驱动安装失败_CH340驱动|CH340系列USB转串口驱动下载win7/win10 64位 - 欧普软件下载...
- c语言汉诺塔递归算法
- java微信公众号支付开发平台_微信公众号支付demo,微信公众号支付Java DEMO
- PVE7.2-3直通独显 nvidia 1080ti
- czl蒻蒟的OI之路4
热门文章
- 12道 javaScript 经典逻辑题,是否承载着你的回忆
- 一款用C++语言实现的3D游戏引擎(附源码),适用于想学3D游戏开发
- AE缺失Form Trapcode Form
- Unity 提取资源 Disunity、Unity Studio
- 网易云通信 java 登录_Java接入网易云信工具类
- JavaScript 基础(超详细)
- A星寻路 A星算法优化
- 【2021山东大学数字逻辑实验7】异步模8加1计数器
- 学习笔记(20):Google开发专家带你学 AI:入门到实战(Keras/Tensorflow)(附源码)-深度学习“四件套”:数据、模型、损失函数与优化器...
- 淘宝客、返利机器人详细解读(个人理解)