拿下ABB需要多少代码!《abb机器人资料》
拿下ABB资源需要多久?
用python告诉你
只需要200秒!
---------------------------------------------------------------------------------
成品预览
资源图片
代码块预览
运行成功后代码
过程难点
1.正则匹配时犯的错误
2.爬虫时遇到的反爬机制
3.文件名因为粗心导致debug了两个小时
代码:
import requests
import re
import os
import random
import time
import threading
import urllib3
from urllib.parse import quoteurllib3.disable_warnings()
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
} # 常规请求头
up_url = "https://new.abb.com/products/robotics/zh/industrial-robots/"
up_url1 = "https://new.abb.com"# 定义一个生成四位随机数并×当前的秒数的函数
def get_random_num():return str(random.randint(1, 9) * int(time.time()))
# 文件夹创建
def if_exists(path):if not os.path.exists(path):os.makedirs(path)
# 获取所有的类型
def get_mian_rb():mian_url = "https://new.abb.com/products/robotics/zh/industrial-robots" # 首页地址robot_type_all = requests.get(mian_url, headers=headers, verify=False)re_rb = re.findall('<a class="gradientGrayscale1112 inner clickable"[\s\S]*?header3">(.*?)</span>',robot_type_all.text) # 获取所有的机器人类型re_url = re.findall('<a class=".*?" href="(.*?)"[\s\S]*?data-', robot_type_all.text) # 获取所有的机器人类型的链接del re_rb[0] # 删除第一个元素del re_url[0] # 删除第一个元素print("全部机器人已获取成功")return re_rb, re_url # 返回所有的机器人类型和链接
# 获取所有的图片的连接
def get_png_url(rb_url):response = requests.get(up_url1 + rb_url, headers=headers, verify=False)rb_photo = re.findall("<a class='gradientGrayscale1112 inner mPhotoLB abbHtmlImageLightbox clickable ' href='(.*?)' > ",response.text) # 图片库rb_one_photo = re.findall('<h1 class="tile-headline"[\s\S]*?img src="(.*?)" class="stretch',response.text) # 首页横屏图片pid = re.findall('cid":"(.*?)"', response.text) # 访问js的pidif len(rb_photo) != 0:print("已获取" + rb + "的图片库" + rb_photo[0])if len(rb_one_photo) != 0:print("已获取" + rb + "的首页横屏图片" + rb_one_photo[0])else: # 如果方法1没成功调用方法2再次匹配rb_one_photo = re.findall('<div class=".*"[\s\S]*?<img src="(.*?)" alt="" style="',response.text) # 首页横屏图片if len(pid) != 0:print("已获取" + rb + "的pid" + pid[0])return rb_photo, rb_one_photo, pid
# 获取pdf的连接
def get_pdf_url(js_url, url):url = quote(url, 'utf-8') # 防止机器人名称中中文, 进行编码js_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36","Referer": url # 防盗链操作}response = requests.get(js_url, headers=js_headers, verify=False)pdf_info = re.findall('RepresentationFileName": "(.*?)"[\s\S]*?"Title": "(.*?)"[\s\S]*?"DocumentURL": "(.*?)"[\s\S]*?RepresentationFileSize',response.text)print("PDF资料已获取成功")pdf_url_list1 = []pdf_name_list1 = []file_type_list1 = []for i in pdf_info:# 判断i包含 =zh关键字 也就是中文文档if 'zh' in i[2]:pdf_url_list1.append(i[2])pdf_name_list1.append(i[1])file_type_list1.append(i[0])return pdf_url_list1, pdf_name_list1, file_type_list1
# 下载图片
def down_png(png_url, rb):if png_url is None: # 如果是空的直接退出returnresponse = requests.get(png_url, headers=headers, verify=False)with_file = "ABB资源\\" + rb + "\\" + get_random_num() + ".png" # 文件存放路径with open(with_file, "wb") as f:f.write(response.content)print("已下载成功" + rb + "的图片 路径为:" + with_file)
# 下载pdf
def down_pdf(pdf_url, pdf_name, rb, url):url = quote(url, 'utf-8') # 防止机器人名称中中文, 进行编码js_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36","Referer": url # 防盗链操作}response = requests.get(pdf_url, headers=js_headers, verify=False)down_url = re.findall('<iframe src="(.*?)" id=', response.text)# 判断 down_url是否为空if len(down_url) != 1:print("获取pdf下载链接失败")returnwith open("ABB资源\\" + rb + "\\资料\\" + pdf_name + ".pdf", "wb") as f:f.write(requests.get(down_url[0], verify=False).content)print("已下载成功" + rb + "的pdf 路径为:" + "ABB资源\\" + rb + "\\资料\\" + pdf_name + ".pdf")
# 下载视频 跟down_pdf一样
def down_video(video_url, rb):if video_url is None:returnresponse = requests.get(video_url, headers=headers, verify=False)with_file = "ABB资源\\" + rb + "\\" + get_random_num() + ".mpg"with open(with_file, "wb") as f:f.write(response.content)print("已下载成功" + rb + "的视频 路径为:" + with_file)
# 遍历ABB资源文件夹下文件格式为( ? )的文件
def get_file_list(suffix_name):video_list = []for root, dirs, files in os.walk("ABB资源"):for file in files:if file.endswith("." + suffix_name):video_list.append(file)return video_liststart_time = time.time() # 开始时间
if_exists("ABB资源")
rb_mian = get_mian_rb() # 获取全部机器人信息
wait_down_num = len(rb_mian[0]) # 计算待下载数量
wait_down_num1 = 0 # 初始化计数器
end_down_num = 0 # 计算下载失败数量
end_down_rb = [] # 记录下载失败的机器人for rb, rb_url in zip(rb_mian[0], rb_mian[1]): # 循环遍历机器人print("待下载数量为:" + str(wait_down_num))print("当前下载机器人为:" + rb)rb = rb.strip() # 去除头尾空格if_exists("ABB资源\\" + rb) # 判断文件夹是否存在error_num = 1 # 错误次数rb_photo_url, rb_exhibit_url, pid = get_png_url(rb_url) # 得到图片库的连接 横展图的连接 和 pid listwhile error_num < 3:if not pid or not rb_exhibit_url: # 如果pid或者图片库或者横展图的连接为空print(rb)print("获取" + rb + "的图片和pdf失败,正在重新获取 次数:" + str(error_num))rb_photo_url, rb_exhibit_url, pid = get_png_url(rb_url) # 重新获取if error_num > 3: # 如果获取失败三次,则跳过continueerror_num += 1else:breakif error_num != 1: # 如果获取失败,则跳过print("获取" + rb + "的图片和pdf失败,已跳过")error_num = 1end_down_num += 1end_down_rb.append(rb)continuejs_url = f"https://download-section-services-abblibrary.azurewebsites.net/api/downloadsection/documents/public/list/CN/zh/c?categoryIds={pid[0]}&languageCode=zh&countryCode=CN&clientCode=newabbcom&includeDocumentsFromSubcategories=true&includeExternalPublicLimitedDocuments=false&source=sf&documentKinds=&productIdDomains=*&pageNumber=1&pageSize=20&dontGroupResults=true"pdf_url_list, pdf_name_list, file_type_list = get_pdf_url(js_url, up_url + rb) # 得到pdf的连接和pdf的名字 list# 此时得到了全部资源地址down_png(rb_exhibit_url[0], rb) # 下载横展图if_exists("ABB资源\\" + rb + "\\资料")for i in rb_photo_url: # 循环遍历图片库的连接t = threading.Thread(target=down_png, args=(i, rb)) # 开启线程t.start()for i in range(len(pdf_url_list)): # 循环遍历pdf的连接# 将pdf_name_list[i] 中 ? /等字符替换成 _pdf_name_list[i] = pdf_name_list[i].replace("?", "_").replace("/", "_")# 判断字符串中是否包含pdfif "pdf" in file_type_list[i]: # 如果包含pdft = threading.Thread(target=down_pdf, args=(pdf_url_list[i], pdf_name_list[i], rb, up_url + rb)) # 开启线程elif "mpg" in file_type_list[i]: # 如果包含视频t = threading.Thread(target=down_video, args=(pdf_url_list[i], rb)) # 开启线程else:print(rb + "的资源不符合下载条件,已跳过") # 如果不包含pdf和视频,则跳过continuet.start()print("已下载完成" + rb + "的资源")wait_down_num -= 1 # 待下载数量减1wait_down_num1 += 1 # 下载成功数量加1print("本次任务完成,请查看ABB资源文件夹下的文件")
print("视频文件完成下载:数量:" + str(len(get_file_list("mpg"))) + "\n" +str(get_file_list("mpg")))
print("pdf文件完成下载:数量:" + str(len(get_file_list("pdf"))) + "\n" +str(get_file_list("pdf")))
print("png文件完成下载:数量:" + str(len(get_file_list("png"))) + "\n" +str(get_file_list("png")))
print("失败下载机器人资料数量:" + str(end_down_num) + " --- " + str(end_down_rb))
print("下载成功机器人资料数量:" + str(wait_down_num1))
print("任务耗时:" + str(time.time() - start_time) + "秒")作者:csdn伍少小帅哥 b站不息崽
请勿商用 侵删联系 lh168_vx@qq.com
拿下ABB需要多少代码!《abb机器人资料》相关推荐
- abb机械手故障代码20082_ABB机器人报错代码:按事件日志进行故障排除报错代码1...
5.3 1 xxxx 10002, 程序指针已经复位 说明 任务arg 的程序指针已经复位. 后果 启动后,程序将在任务录入例行程序发出第一个指令时开始执行. 请注意重新启动后机械手可能移动到非预期位 ...
- fanuc机器人编程手册_是谁需要G代码编程机器人?
用G代码编程机器人是一个5,6年前就碰到过的一个概念.当时就有点困惑,不过没有细究为何提出这样的想法.这个问题一直搁置很久也没有想起来主动去了解,去和同行去交流.今天在翻阅西门子自动化产品手册时,看到 ...
- dotnet 将自动代码格式化机器人带入团队 GitLab 平台
给团队带入一个 代码格式化机器人 能提升团队的幸福度,让团队的成员安心写代码,不用关注代码格式化问题,将格式代码这个粗活交给机器人去做.同时也能减少在代码审查里撕格式化问题的时间,让更多的时间投入到更 ...
- dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人
是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的,但是不审查又觉得过不去?是否有个专门的工具人,用来协助修复代码格式化的问题?本文来安利大家一个特别好用的方法,使用 dotnet 完全开源的 ...
- python代码在线回归中怎么运行_手把手教你用Python进行回归(附代码、学习资料)...
原标题:手把手教你用Python进行回归(附代码.学习资料) 作者: GURCHETAN SINGH翻译:张逸校对:丁楠雅 本文共5800字,建议阅读8分钟. 本文从线性回归.多项式回归出发,带你用P ...
- C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流
C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流 说明:学做了4关推箱子, 仅供初学者参考可用g++ 编译,可以将内容复制到TXT文件,将后缀改为".cp ...
- ABB选项添加,ABB万能密钥
ABB选项添加,ABB万能密钥 ID:34500641651500680朗朗上口929
- 【CAP】代码即策略(CaP):编写自己代码的机器人 | Robots That Write Their Own Code
编写自己代码的机器人 | Robots That Write Their Own Code 目录 编写自己代码的机器人 | Robots That Write Their Own Code
- 微信控制家庭智能小管家机器人资料免费下载
微信控制家庭智能小管家机器人资料免费下载 今天分享微信控制家庭智能小管家机器人(附语音聊天.人脸检测.自主巡航等)的资料,内容比较多,这边文章不够放,更详细资料到闯客网技术论坛下载,或加群获取:813 ...
最新文章
- Silverlight 2 beta 2 中目前不支持共享 WCF 的客户端类型
- R语言在ggplot中使用变量指定柱状图的名称实战
- Centos 安装 NodeJS
- openstack 虚拟机如何修改ip地址
- Cocos2d-x CCNotificationCenter 通知中心
- l298n电机哪一端为正_L298N控制直流电机正反转
- Java集合框架讲解【泛型、Collection接口、Map接口、以及子接口和实现类、集合的遍历形式等】
- PDF文件怎么制作,PDF文件制作方法
- sin35 在C语言中怎么表示,sin35度等于多少
- 7岁儿童智力检测题_7岁-11岁儿童智商测试题
- 访问远程Redis服务。Connect to Remote Redis Server
- QQ个人文件夹保存位置无效
- 07-白盒测试方法-逻辑覆盖法
- Cortex-M系列处理器对比
- IBM3650M4实体机安装ESXI7.0
- 谷歌adwords—点击诱饵被拒登
- web课程设计网页规划与设计—— 中西餐美食餐饮网站(10页面) html+css+javascript网页设计实例...
- 泉州计算机英语ppt,介绍泉州的英文.ppt
- 《华为工作法》4 科学合理的工作原则
- 软件服务外包大赛全员总结和心得