Python爬虫之selenium爬取英雄联盟官网英雄皮肤图片下载到本地和保存到数据库

news/2024/11/7 14:26:42/

从英雄联盟皮肤网站的网页源代码中获取不到英雄的皮肤地址 通过selenium可以轻松获取想要的内容

源码展示

from selenium import webdriver
from time import sleep
from pyquery import PyQuery as pq
import os,requests
from config import *
import pymongo
from selenium.common.exceptions import NoSuchElementExceptionbrowser = webdriver.Chrome()client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]def get_hero_url():browser.get("http://lol.qq.com/web201310/info-heros.shtml")html = browser.page_sourcedoc = pq(html)#通过PyQuery解析出来的网页 用css选择器获取li标签内容 并返回一个生成器items = doc('#jSearchHeroDiv.imgtextlist li').items()#通过循环获取生成器下的内容for item in items:data ={'hero_url':'http://lol.qq.com/web201310/'+item.find('a').attr('href'),'hero_name':item.find('p').text()}#print(len(data['hero_url']))# 在网页加载的时候可能会因为网络的问题 图片会加载不出来 然后css选择器就获取不到相应的内容#从未抛出异常  抛出异常后让网页重新加载一次try:get_hero_skin(data['hero_url'])except NoSuchElementException:print('出现异常再次请求网页')get_hero_skin(data['hero_url'])def get_hero_skin(url):browser.get(url)sleep(1)#只有点击第二个皮肤的时候所有的皮肤才会在网页的代码中显示出来 #所以这里设置了个自动点击的功能才能获取到英雄的所有皮肤#否则只能获取到一个默认皮肤skin = browser.find_element_by_css_selector('#skinNAV > li:nth-child(2)')skin.click()html = browser.page_sourcedoc = pq(html)items = doc('.defail-skin #skinBG li').items()for item in items:data ={'title':item.find('img').attr('alt'),'image':item.find('img').attr('src')}#print(data)save_to_mongo(data)download_image(data['image'],data['title'])def download_image(image_url,title):if not os.path.exists('images'):os.mkdir('images')response = requests.get(image_url)if response.status_code == 200:#每个英雄的第一个都是默认皮肤所以在保存到本地时候会将#之前的默认皮肤覆盖 所以文件中一个最后一个默认皮肤的图片 # 这里可以自己简单修改下  file_path = 'images/{}.jpg'.format(title)if not os.path.exists(file_path):print("正在获取%s的信息" % (title))# 图片以二进制格式保存with open(file_path, 'wb')as f:# content获取图片内存f.write(response.content)else:print("已经保存该图片")def save_to_mongo(data):try:#保存到mongodb数据库下的每一个数据都会有自己的id #所以数据库中的每个英雄的默认皮肤不会受到影响if db[MONGO_TABLE].insert(data):print("存储到数据库成功",data)except Exception:print('存储到数据库错误',data)get_hero_url()browser.close()

存储到MongoDB数据库需要一个配置文件

MONGO_URL = 'localhost'
MONGO_DB = 'lolskin'
MONGO_TABLE = 'allHeroSkin'

这里写图片描述

这里写图片描述

这里写图片描述

小结

selenium确实很容易将所有的皮肤爬取下来 但是效率太低 用进程池或者多线程是不是效率可以提高了 希望大佬可以提提建议


http://www.ppmy.cn/news/644178.html

相关文章

windows下浏览器网页视频下载方法

参考这个链接, 并进行了一些改进:https://blog.csdn.net/lawyer110/article/details/91047726 文中Video DownloadHelper Companion App下载方法: 1.按照插件提示进入助手下载页面,点击“companion app source code"&#…

通过安装360浏览器插件下载视频

通过安装360浏览器插件下载视频 1、安装插件。如下图,在360浏览器右上方找到扩展管理,点开,选择添加更多扩展。 2、打开360应用市场后,在搜索窗输入“网页媒体”,出来的搜索结果如下图,这就是我们要的插件了…

基于matlab使用单眼摄像机图像数据构建室内环境地图并估计摄像机的轨迹(附源码)

一、前言 视觉同步定位和映射 (vSLAM) 是指计算摄像机相对于周围环境的位置和方向,同时映射环境的过程。该过程仅使用来自相机的视觉输入。vSLAM 的应用包括增强现实、机器人和自动驾驶。 此示例演示如何处理来自单眼摄像机的图像数据&…

如何下载浏览器中的flash 视频

首先声明,以下仅供参考,所测试所用视频资源,均为开放视频来源。 也就是说,我测试用的视频,都是任何人都可以看的。都是没有任何权限就可以看的。都是开放的视频。 准备工具,任意浏览器,我这里…

浏览器网页视频下载Video Octopus插件网页视频下载插件

介绍: Video Octopus插件是一款非常不错的网页视频下载插件,能够帮助用户嗅探多种格式的网页视频,并支持批量下载保存,方便用户能够在本地进行观看,有需要的用户不要错过了,赶快来下载吧! 开发…

仿英雄联盟纯html+css+js LOL网页版

前言: 第一次接触这个平台(新手程序员),我是一个大二在校生(专业:前端开发)因期末考试需要被逼无奈做了一个LOL网页版。这个项目中并未用到Jquery(并未学到)。网页所有的…

fwPlayer 支持最新浏览器在线播放AVI和FLV格式的视频

fwPlayer 支持最新浏览器在线播放AVI和FLV格式的视频 可以使用 fwPlayer 使用webassembly技术,在线转码avi flv为mp4 或者ogg等来播放 fwPlayer 支持各种最新浏览器的视频和音频的录制、转码、流式传输。可以支持avi MP4(x264,x265) webm mpeg-1 mpeg-2,pcm adpcm…

在网页中插入FLV视频,经测试兼容IE、火狐、谷歌等浏览器

比较目前&#xff0c;所有的浏览器都支持FLASH。所以&#xff0c;这个方法大众普遍都很接受&#xff0c;优酷、土豆等在线视频就是使用的FLASH的。 本例播放器使用Flvplayer.swf。播放器在下文的demo文件中。网页中插入代码的如下&#xff1a; <object classid"clsid:…