selenium+requests获取52PK英雄联盟各英雄皮肤

news/2024/7/19 11:57:23 标签: selenium, request, 爬虫, xpath, python

简介

目标站点:https://lol.52pk.com/pifu/hero
实现方式:selenium进行图片信息获取并翻页,requests请求图片的url并保存图片到本地

Python实现

运行程序前,请先确认已经安装了requests、selenium第三方模块,并下载了Chrome浏览器对应的webdriver

python"># coding=utf-8
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import requests
import time


class HeroPicDown:
    def __init__(self):
        self.start_url = 'https://lol.52pk.com/pifu/hero/hero_1.shtml'
        self.driver = webdriver.Chrome()  # 我的chromedriver.exe和该脚本在同一路径,所以我不需要指定可执行文件路径
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36"
        }

    # 定义起始函数,打开皮肤第一页
    def start(self):
        self.driver.get(self.start_url)
        self.driver.maximize_window()

    def parse(self):
        try:
            wait = WebDriverWait(self.driver, 10)  # 设置driver等待时间为10s
            wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'selectContent')))  # 等待皮肤列表被加载完成
            lis = self.driver.find_elements_by_xpath("//div[@class='selectContent']/ul/li")  # 获取皮肤列表的li标签
            for li in lis:
                pic_url = li.find_element_by_xpath("./a/img").get_attribute('src')  # 获取皮肤图片的url
                title = li.find_element_by_xpath("./a/div/strong").text  # 称呼:比如暗夜猎手
                name = li.find_element_by_xpath("./a/div/p").text  # 名称:比如薇恩
                file_name = title + "_" + name + '_' + pic_url.split('/')[-1]  # 拼接保存名称
                self.down_pic(pic_url, file_name)  # 下载图片并保存到指定路径
            print(f"第{self.driver.current_url.split('/')[-1].center(100, '=')}页面爬取完毕")  # 爬取一页之后打印完成信息

            # 定位下一页按钮,并点击
            try:
                next_page = self.driver.find_element_by_xpath("//*[@id='page__next']/a")
                if next_page:
                    next_page.click()
                    self.parse()
            # 如果最后一页元素不能定位,即已经是最后一页,我们就打印退出信息
            except NoSuchElementException as e:
                print('已经是最后一页,等待程序结束...')
        except Exception as e:
            print(e)

    # 定义下载图片保存函数
    def down_pic(self, pic_url, file_name):
        try:
            res = requests.get(pic_url, headers=self.headers)
            with open(file=r'C:\Users\Administrator\Desktop\Hero pic\%s' % file_name, mode='wb') as f:
                f.write(res.content)
            print(f'{file_name}下载完毕...')
        except Exception as e:
            print(e)

    # 等待10s关闭浏览器
    def close(self):
        time.sleep(10)
        self.driver.quit()


# 程序入口 
if __name__ == '__main__':
    start = time.time()
    h = HeroPicDown()
    h.start()
    h.parse()
    end = time.time()
    print(f'爬虫运行结束,耗时:{end - start}秒')

部分结果展示

  • 程序的打印信息
    在这里插入图片描述
  • 程序执行耗时
    在这里插入图片描述
  • 保存的图片
    在这里插入图片描述

总结

  • 关于爬取的方案
    我这里主要介绍下怎么将seleniumrequests混合使用,特别是一些前后端分离的站点,我们无法通过requests模块取获取网页的源代码,这个时候,使用selenium配合requests就会非常的有用。

  • 关于元素定位
    个人比较喜欢用xpath,定位方式一般是class、name、id这3个元素。

  • 交流学习
    喜欢爬虫的小伙伴可以私信我,一起交流学习。


http://www.niftyadmin.cn/n/898888.html

相关文章

百度文字识别OCR识别图片文字内容

AI接入 参考官方文档:AI接入指南 参考:网络图片文字识别申请 参考:鉴权认证机制,用于获取access token 网络文字识别示例代码 下面是官方给的示例代码,从代码中我们可以看出,只要获取到access_token就…

pandas计算excel两列的日期差

原始Excel数据 诉求:往Excel中追加两列"当前时间"、“时间差”,计算日期和当前时间相差的天数、小时、秒, 注:一天等于86400秒 插入两列数据到表格 # codingutf-8 import pandas as pd import datetimedf pd.read_ex…

CentOS 7安装实时监控日志文件的swatchdog

swatchdog介绍 swatchdog是从一个用于监视Unix syslog工具生成的日志的脚本发展起来的,它可以监视任何类型的日志。swatchdog(Simple WATCH DOG)是一个简单的Perl脚本,用于监视类Unix系统(比如Linux)上的活动日志文件。它根据可以在配置文件中定义的正则…

虚拟机获取不到IP的解决办法

新创建的CentOS 7虚拟机,使用的DHCP获取地址,一直获取不到IP地址,service network restart命令执行多次都不行,使用如下方式后OK su - root dhclient -vifconfig

yum命令安装软件报错One of the configured repositories failed (未知)

报错 [rootlocalhost yum.repos.d]# yum install ansible 已加载插件:fastestmirrorOne of the configured repositories failed (未知),and yum doesnt have enough cached data to continue. At this point the onlysafe thing yum can do is fail. There are a …

-bash: zabbix_get: command not found解决办法

zabbix_get zabbix-get命令是server端用来检查agent端的一个命令,可以用zabbix_get来检查能否采集到数据,进行问题定位 安装 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm yum clean all yum insta…

ansible-playbook批量创建用户和密码

ansible版本: 2.9.23 ansible --version 创建账户并设置密码 --- - hosts: testbecome: yes # 申请sudo权限vars:user_list: [jf1,jf2,jf3] # 用户名列表tasks:- name: create many useruser:name: "{{ item }}" # 注意必须使用引号,否则会报错passw…

MySQL中查询数据表某一字段为空

select * from wangyou where isnull(book_url);