#爬取lol全英雄皮肤
 import re
 import traceback #  异常跟踪
 import requests
 from bs4 import BeautifulSoup
 #获取html
 def get_url(url, hander):
     try:
         r = requests.get(url, headers=hander, timeout=30)
         r.raise_for_status()
         r.encoding = r.apparent_encoding
         return r.text
     except:
         traceback.print_exc() #将异常信息打印出来
         return ""
 #解析html
 def prasing_page(lst,html):
     try:
         soup = BeautifulSoup(html, "html.parser")
         for a in soup.find_all('li', class_=re.compile('boxShadow')):
             tag_a = a('a')
             for i in tag_a:
                 lst.append(i['href'])
         return lst
     except:
         traceback.print_exc()
         return ""

 #解析获取到的单个html并筛选和下载
 def getUrl_prasingpag(lst, hander):
     hero_img_url = []
     hero_skin_name = []
     hero_name = []
     for u in lst:
         try:
             r = requests.get(u, headers=hander, timeout=30)
             r.raise_for_status()
             r.encoding = r.apparent_encoding
        #二次解析
             soup = BeautifulSoup(r.text, "html.parser")
             pag = soup.find_all('div', class_=re.compile('othersPifuBox'))
             for m in pag:
                 tag_img = m('img')
                 tag_p = m('p')
                 tag_span = m('span')
                 for m in tag_p:
                     hero_skin_name.append(m.string)
                 for m in tag_img:
                     hero_img_url.append(m['src'])
                 for m in tag_span:
                     hero_name.append(m.string)
         except:
             traceback.print_exc()  # 将异常信息打印出来
             continue
               #下载到本地
         for i in range(len(hero_name)):
             try:
                 path = 'O:/lol_hero_jpg/' + hero_skin_name[i]+'--' + hero_name[i] + '.jpg'
                 f = open(path, 'wb')
                 r = requests.get(hero_img_url[i], stream=True)
                 f.write(r.content)
                 print("\r当前进度>>>>>>>>>>>>>>>>>>{:.0f}%>>>>>>>>>>>>>>>>>>".format(i * 100 / len(lst)), end="")
                 f.close()
             except:
                 traceback.print_exc()  # 将异常信息打印出来
                 continue

 def main():
     hander = {"User-Agent":"Mozilla/5.0"}
     deep = 43 #定义爬取页数
     list = []
     for i in range(deep):
         try:
             url = "http://********/hero_"+str(1+i)+".shtml"
             html = get_url(url, hander)
             prasing_page(list, html)
             getUrl_prasingpag(list, hander)
         except:
             continue

 main()

最新文章

  1. 项目管理_FindBugs的使用
  2. DevExpress XtraTreeList的复选框 禁用
  3. Magento Service Temporarily Unavailable解决方法
  4. MySQL ibdata1撑爆占满磁盘空间
  5. C#_MySql 主从复制
  6. C#创建https请求并使用pfx证书
  7. CSS左中右布局,规范案例
  8. Gulp思维——Gulp高级技巧
  9. 原生js实现的轮播图,易用+可多用
  10. 用ToggleButton和ImageView实现不同状态下显示的切换
  11. Spring Boot,Spring Data JPA多数据源支持
  12. sql 根据字段查询不同表
  13. iOS回顾笔记(03) -- 自定义View的封装和xib文件的使用详解
  14. MySQL一对一:一对多:多对多: 实例!!!!
  15. Specify 的含义 ------ 转载
  16. 什么是Java序列化,如何实现java序列化
  17. javaweb开发1.环境配置(javaweb插件下载及tomact在eclips中配置)
  18. 借助强大的IDEA开发ide高效实现equals,hashcode以及toString方法
  19. Leetcode题库——38.报数
  20. Eslint 配置及规则说明(报错)

热门文章

  1. etcd 在超大规模数据场景下的性能优化
  2. 生成所有2^n个长度为n的比特串
  3. 实现三个div,固定左右两边的div宽为200,中间的div宽度自适应的四种方法
  4. Python--day72--ajax完整版
  5. Oracle备库宕机启动解决方案
  6. H3C OSPF可选配置命令
  7. 查看php-fpm的进程和端口号
  8. Django入门8--Templates过滤器
  9. mpvue的坑,持续更新-.-
  10. 免费开源3D模型设计软件汇总