python简单实现爬取wiki中游戏立绘

介绍

入坑碧蓝档案已经有半年,每次想发癫又苦于只能上wiki上看立绘。所以就想爬到本地上,再存到手机里,实现发癫自由。爱丽丝嘿嘿嘿
本来是在两年前做过一次爬取bwiki上立绘的爬虫程序的,但现在bwiki的碧蓝档案分区已经删除了全部页面,所以又得重新写。这次爬取的是碧蓝档案wiki这个网站,里面攻略很全,还有设定集和小漫画等资讯。

爬取方式

一开始本想直接使用requests请求到页面,在用BeautifulSoup进行解析来获得每个学生详细页面的url。在这里插入图片描述
但很快就发现获取到的页面数据非常少,就明白此处是使用JavaScript动态加载的,原网页是没有这些内容的。于是改用selenium来模拟浏览器操作,等网页加载好后在通过css选择器获得url。

代码

import requests as req
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import TimeoutException
import time
import urllib.request
import os
base_path='文件夹位置'#下载文件位置
home_url='https://ba.gamekee.com/'
base_url='https:'
extension='.jpg'

driver=webdriver.Edge()#selenium打开edge实例,可以更换为其他已有的浏览器
#下载图片
def downloadImg(url,path,filname):
    folder_path=os.path.join(base_path,path)
    file_path=os.path.join(base_path,path,filname)
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
    if not os.path.exists(file_path):
        print(f'开始下载:{filname}')
        urllib.request.urlretrieve(url, file_path)
        print(f'下载完成:{filname}')

#打开详细页面
def info_page(url,name):
    print(f"打开{name}的页面!")
    driver.get(url)
    timeout=5
    try:
        elements=WebDriverWait(driver,timeout).until(EC.presence_of_element_located((By.CSS_SELECTOR,'#wiki-body > div > div > div.wiki-detail.pc-wiki-detail.detail-portrait > div.wiki-main-box > div > div.main-content > div.wiki-detail-body > div.detail-content-comp.ba-game-content > div ')))
    except:
        print(f'error:{url} get failed')
    tbody=driver.find_elements(By.CSS_SELECTOR,'tbody')[0]
    elements=tbody.find_elements(By.CSS_SELECTOR,'tr:nth-child(2)>td>div>img')#无标签页的
    if(len(elements)==0):
        elements=tbody.find_elements(By.CSS_SELECTOR,'tr:nth-child(2)>td>div>div>div>div.slide-content-group > div.slide-item>div>img')#有标签页的
    ind=0
    print(f"检测到{len(elements)}张立绘!")
    for e in elements:
        url=e.get_attribute('src')
        if(ind==0):
            downloadImg(url,'立绘',name+extension)
        else:
            downloadImg(url,'立绘',name+str(ind)+extension)
        ind=ind+1
def main():
    driver.get(home_url)#加载网页
    timeout=5#超时时间
    try:
        element=WebDriverWait(driver,timeout).until(EC.presence_of_element_located((By.CSS_SELECTOR, '#menu-23941 > div:nth-child(3) > div.model-tab-content > div:nth-child(1) > div.item-wrapper.icon-size-6.pc-item-group>a>img')))
    except:
        driver.quit()
    #根据selector获得组件对象
    info_url=driver.find_elements(By.CSS_SELECTOR,'#menu-23941 > div:nth-child(3) > div.model-tab-content > div:nth-child(1) > div.item-wrapper.icon-size-6.pc-item-group>a')
    print(f"Find {len(info_url)} students !")
    urls=[]
    for e in info_url:
        url=e.get_attribute('href')#获得每个学生详细页面的url
        small_head=e.find_elements("tag name", "img")[0].get_attribute('data-src')#获得小头像
        student_name=e.text
        urls.append({'url':url,'name':student_name})
        downloadImg(base_url+small_head,'小头像',student_name+'小头像'+extension)
        time.sleep(1)#等待1秒,免得太快被ban
    for page in urls:
        time.sleep(5)
        info_page(page.get('url'),page.get('name'))
    driver.quit()

if __name__=='__main__':
    main()

总结

其实也没啥能总结的,只是一个很简单的爬虫应用。如果大家有其他建议和方法也希望能不吝赐教!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "圣女战旗"是一款冒险战斗类游戏,在游戏,玩家可以扮演各种游戏角色进行战斗和探险。游戏的角色是提供游戏玩家了解和认识角色外貌特征的重要组成部分。 这款游戏提供的游戏角色全身免扣PNG,意味着角色的图像没有背景,可以直接使用。这方便了玩家在制作宣传海报、编辑视频、设计游戏界面等方面的创作。玩家可以根据自己的需求,将图像与背景、特效等进行组合,创造出更具个性和创意的形象。 通过游戏角色全身免扣PNG,玩家可以更加直观地了解角色的服饰、装备、姿势等细节,从而更好地展示角色的个性和特点。的精细细节和丰富表情也能够增加玩家对角色的情感共鸣,进一步提升游戏的沉浸感和可玩性。 在游戏角色全身免扣PNG的基础上,玩家还可以通过自己对角色的创作和改编,打造出更加独特和个性化的形象。这种自由度和创造性可以激发玩家的想象力和创作力,使得游戏角色在玩家心目的形象更加丰富多样。 总之,圣女战旗游戏角色全身免扣PNG为玩家提供了更大的创作空间和表现力,帮助玩家更好地展示和赋予游戏角色个性和深度。这种形式为游戏的美术效果和玩家体验增添了更多的亮点和魅力。 ### 回答2: 《圣女战旗》是一款受欢迎的游戏,角色们的以全身免扣png格式呈现。PNG格式是一种支持透明背景的图片格式,因此在游戏使用这种可以更好地展示角色的细节和动态。 这些是以圣女战旗游戏各个角色的形象为基础制而成的。每个角色都经过精心设计和制,从头到脚的细节都被展现出来。这些的像素化效果非常高,可以轻松适应不同的屏幕分辨率和游戏界面要求。 使用全身免扣png的好处是,玩家可以将角色放置在游戏画面的任何位置,而不必为背景的颜色和元素所限制。这样一来,角色可以更加融入游戏场景,增强了游戏的沉浸感。 另外,全身免扣png在制作海报和宣传材料时也非常实用。开发者可以使用这些来制作精美的海报、广告和宣传画,吸引更多的玩家来体验游戏。 总的来说,圣女战旗游戏角色的全身免扣png非常有助于增强游戏的画面效果和推广效果。这些的高像素化和透明背景使其在游戏具有更好的表现力和灵活性,为游戏玩家提供更好的游戏体验。 ### 回答3: 《圣女战旗》是一款富有创新的游戏,该游戏的角色是以全身免扣png的形式呈现的。这种形式的呈现方式,有着诸多优点。 首先,全身免扣png可以完整地展现游戏角色的造型和细节。玩家可以清晰地看到角色的服饰、装备以及其他饰品等。这样一来,玩家可以更加直观地了解角色的形象和特点,增强了游戏的可玩性。 其次,全身免扣png可以提供更大的自由度。由于该形式将角色完整地呈现出来,游戏设计师可以更加自由地给予角色动作和表情,增加了角色的丰富性和活力。玩家在游戏观看到的角色将更加生动逼真。 再次,全身免扣png方便制作和使用。这种形式的可以方便地与游戏场景和其他元素进行组合。游戏开发人员可以根据需要调整的大小和位置,使其完美地融入游戏界面。同时,该可以独于背景,方便进行替换和编辑,提高了游戏制作的效率和灵活性。 综上所述,圣女战旗游戏角色全身免扣png具有展现细节、提供自由度和方便使用等优点。这种形式为游戏增添了更多的乐趣和互动,使玩家能够更好地融入游戏世界
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值