'''

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源码,使用二进制方式保存。相关推荐

  1. 抓取网络源码python_使用Python进行网络抓取的新手指南

    抓取网络源码python 有很多很棒的书可以帮助您学习Python,但是谁真正读了这些A到Z? (剧透:不是我). 接下来是我的第一个Python抓取项目指南. 假定的Python和HTML知识很少. ...

  2. 抓取网络源码python_python中的复仇者网络抓取实体提取和网络图

    抓取网络源码python 2020 sent more bad news as Black Panther star Chadwick Boseman passed away aged 43. The ...

  3. 文章抓取(含源码下载)

    最近都左做一些资源采集的工作,比如采集新闻,flash,图片等,下面我们通过一个小例子,来详细的说明一下我采集资源的步骤,希望各位能提点建议,不胜感激. 下面就开始吧!我们这次要采集的是这个少儿英语动 ...

  4. Java---网络蜘蛛-网页邮箱抓取器~源码

    刚刚学完Socket,迫不及待的做了这个网页邮箱抓取~~~ 自己以前做过微商,而且还掏钱买过抓取网络邮箱的软件~现在O(∩_∩)O哈哈~我自己做~当然啦,没有别人做得好~只是功能还是差不多啦~ 给一个 ...

  5. vba抓取html源码数据,VBA代码、网页数据采集、爬取文章

    应粉丝要求做一篇爬取网页上的文章. 实现功能:爬取网站上的一篇文章并保存到记事本上. 下面是代码分享 Sub 采集网页上的文章保存到记事本() Dim oHtml As Object Set oHtm ...

  6. 精仿CNZZ网站访客统计系统源码 | 网页访客抓取采集源码 | 网站访客流量统计源码

    源码简介: 仿cnzz多用户统计系统,功能强大,界面完美仿照cnzz统计!支持所有浏览器不乱码,程序是完整,没有删除任何东西,请大家放心使用,想建立自己的统计站点就这么简单! 安装的时候先还原数据库  ...

  7. CNZZ网站访客统计系统源码 | 网页访客抓取采集源码 | 网站访客流量统计源码

    简介: 仿cnzz多用户统计系统,功能强大,界面完美仿照cnzz统计!支持所有浏览器不乱码,程序是完整,没有删除任何东西,请大家放心使用,想建立自己的统计站点就这么简单! 安装的时候先还原数据库 sq ...

  8. python抓取直播源 并更新_电视直播源抓取工具箱

    很多时候你们在pc端看电视直播,都会出现直播源失效的情况,这样就可以用到电视直播源抓取工具箱,帮助你们自动抓取最新的直播源,让你们能够随时的观看自己喜欢的电视内容. 软件简介: 经常看到大家电视直播源 ...

  9. java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署 本源码技 ...

  10. java计算机毕业设计HTML5运河古城网站源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计HTML5运河古城网站源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计HTML5运河古城网站源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目 ...

最新文章

  1. yum安装nginx+PHP+Mysql
  2. 教你用Python解决非平衡数据问题(附代码)
  3. 微服务:Java EE的拯救者还是掘墓人?
  4. 项目中常用的19条MySQL优化
  5. Web.config文件使用
  6. springmvc学习资料整理
  7. react 组件连动效果_React组件开发中常见的陷阱
  8. Java虚拟机(JVM)面试题大集合
  9. Android 驱动(10)----设备树(二)linux内核顶层am335x-evm.dts
  10. centos7 查看oracle运行日志_Linux(CentOS7)部署系列---常规应用部署方案
  11. Android 服务
  12. 顶会集结+深度解析:医疗+AI如此火爆,NLP如何赋能?
  13. iOS 15 地图应用程序的所有新功能:更新的详细信息、AR 步行路线、全球视图等
  14. FireDac 组件说明二
  15. javaERP跨境电商平台,跨境电商源码,电商ERP源码,ERP源码
  16. usbserialch340驱动安装失败_CH340驱动|CH340系列USB转串口驱动下载win7/win10 64位 - 欧普软件下载...
  17. c语言汉诺塔递归算法
  18. java微信公众号支付开发平台_微信公众号支付demo,微信公众号支付Java DEMO
  19. PVE7.2-3直通独显 nvidia 1080ti
  20. czl蒻蒟的OI之路4

热门文章

  1. 12道 javaScript 经典逻辑题,是否承载着你的回忆
  2. 一款用C++语言实现的3D游戏引擎(附源码),适用于想学3D游戏开发
  3. AE缺失Form Trapcode Form
  4. Unity 提取资源 Disunity、Unity Studio
  5. 网易云通信 java 登录_Java接入网易云信工具类
  6. JavaScript 基础(超详细)
  7. A星寻路 A星算法优化
  8. 【2021山东大学数字逻辑实验7】异步模8加1计数器
  9. 学习笔记(20):Google开发专家带你学 AI:入门到实战(Keras/Tensorflow)(附源码)-深度学习“四件套”:数据、模型、损失函数与优化器...
  10. 淘宝客、返利机器人详细解读(个人理解)