拿下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机器人资料》相关推荐

  1. abb机械手故障代码20082_ABB机器人报错代码:按事件日志进行故障排除报错代码1...

    5.3 1 xxxx 10002, 程序指针已经复位 说明 任务arg 的程序指针已经复位. 后果 启动后,程序将在任务录入例行程序发出第一个指令时开始执行. 请注意重新启动后机械手可能移动到非预期位 ...

  2. fanuc机器人编程手册_是谁需要G代码编程机器人?

    用G代码编程机器人是一个5,6年前就碰到过的一个概念.当时就有点困惑,不过没有细究为何提出这样的想法.这个问题一直搁置很久也没有想起来主动去了解,去和同行去交流.今天在翻阅西门子自动化产品手册时,看到 ...

  3. dotnet 将自动代码格式化机器人带入团队 GitLab 平台

    给团队带入一个 代码格式化机器人 能提升团队的幸福度,让团队的成员安心写代码,不用关注代码格式化问题,将格式代码这个粗活交给机器人去做.同时也能减少在代码审查里撕格式化问题的时间,让更多的时间投入到更 ...

  4. dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人

    是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的,但是不审查又觉得过不去?是否有个专门的工具人,用来协助修复代码格式化的问题?本文来安利大家一个特别好用的方法,使用 dotnet 完全开源的 ...

  5. python代码在线回归中怎么运行_手把手教你用Python进行回归(附代码、学习资料)...

    原标题:手把手教你用Python进行回归(附代码.学习资料) 作者: GURCHETAN SINGH翻译:张逸校对:丁楠雅 本文共5800字,建议阅读8分钟. 本文从线性回归.多项式回归出发,带你用P ...

  6. C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流

    C++ 简化 推箱子 小游戏 完整代码 参考网络资料 命令行运行 仅供初学者参考交流 说明:学做了4关推箱子, 仅供初学者参考可用g++ 编译,可以将内容复制到TXT文件,将后缀改为".cp ...

  7. ABB选项添加,ABB万能密钥

    ABB选项添加,ABB万能密钥 ID:34500641651500680朗朗上口929

  8. 【CAP】代码即策略(CaP):编写自己代码的机器人 | Robots That Write Their Own Code

    编写自己代码的机器人 | Robots That Write Their Own Code 目录 编写自己代码的机器人 | Robots That Write Their Own Code

  9. 微信控制家庭智能小管家机器人资料免费下载

    微信控制家庭智能小管家机器人资料免费下载 今天分享微信控制家庭智能小管家机器人(附语音聊天.人脸检测.自主巡航等)的资料,内容比较多,这边文章不够放,更详细资料到闯客网技术论坛下载,或加群获取:813 ...

最新文章

  1. Silverlight 2 beta 2 中目前不支持共享 WCF 的客户端类型
  2. R语言在ggplot中使用变量指定柱状图的名称实战
  3. Centos 安装 NodeJS
  4. openstack 虚拟机如何修改ip地址
  5. Cocos2d-x CCNotificationCenter 通知中心
  6. l298n电机哪一端为正_L298N控制直流电机正反转
  7. Java集合框架讲解【泛型、Collection接口、Map接口、以及子接口和实现类、集合的遍历形式等】
  8. PDF文件怎么制作,PDF文件制作方法
  9. sin35 在C语言中怎么表示,sin35度等于多少
  10. 7岁儿童智力检测题_7岁-11岁儿童智商测试题
  11. 访问远程Redis服务。Connect to Remote Redis Server
  12. QQ个人文件夹保存位置无效
  13. 07-白盒测试方法-逻辑覆盖法
  14. Cortex-M系列处理器对比
  15. IBM3650M4实体机安装ESXI7.0
  16. 谷歌adwords—点击诱饵被拒登
  17. web课程设计网页规划与设计—— 中西餐美食餐饮网站(10页面) html+css+javascript网页设计实例...
  18. 泉州计算机英语ppt,介绍泉州的英文.ppt
  19. 《华为工作法》4 科学合理的工作原则
  20. 软件服务外包大赛全员总结和心得

热门文章

  1. IRB 1600-6/1.45 ABB 改进DH参数计算正解逆解
  2. Python中类的定义与实例化
  3. 大数据挖掘分析工具集
  4. 二进制与十进制的整数转换
  5. 区块链技术开发(二)
  6. Mysql去重查询---DISTINCT、group by
  7. 使用逻辑分析仪抓串口波特率
  8. 基于Carsim和simulink联合仿真的路径跟踪测试
  9. Eclipse 调试 PHP 配置教程
  10. InternetOpen系列函数进行下载的测试例子