不会玩阴阳师的我带你一键下载《阴阳师:百闻牌》所有卡牌并调用百度OCR识别文字信息

本文介绍如何使用selenium模拟滚动加载并抓取网页上的所有图片链接,再利用百度OCR进行文字识别,分类并保存。项目涉及自动化网页抓取、图片下载和多线程处理。

一、项目概述

1.项目背景

一天,一个朋友给我发来一条链接https://ssr.163.com/cardmaker/#/,让我帮他看看怎么能获取到网页中所有的图片链接。我打开链接一看,页面的标题是阴阳师:百闻牌,下面有选择栏,再下边就是各种奇奇怪怪的看不懂的图片,我就问他这是什么呀?他说是一个游戏阴阳师里边的卡牌。怪不得我没听过,因为我不玩游戏,一个准程序不玩游戏一定有很多人不相信 ,但是确实如此,我从未玩过游戏
但是这并不影响我来分析网页得到图片,网页如下:
网页
但是你右键查看网页源代码会发现源代码中无任何图片链接的信息,除了一堆HTML整体布局代码和极端JS,什么都没有,显然,图片是动态加载生成的,用常规的requests库是请求不到链接的,这个时候最简单也最直接的办法就是使用selenium模拟自动化来动态操作并抓取图片链接,很快就得到了所有图片链接。
代码如下:

import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.maximize_window()
driver.get('https://ssr.163.com/cardmaker/#/')
time.sleep(3)
while True:
    try:
        driver.find_element_by_class_name('load-more')
        ActionChains(driver).key_down(Keys.END).perform()
        time.sleep(1)
    except:
        break
# 通过xpath定位所有图片
imgs = driver.find_elements_by_xpath('/html/body/div[3]/div[4]/div/div[3]/ul/li/img')
print('共计有%d张卡牌' % len(imgs))
for img in imgs:
    print('已获取到图片链接:', img.get_attribute('src'))
driver.quit()

测试效果如下:

阴阳师卡牌下载文字识别simple_test

但是一个项目不应该也不可能止于此,可以做一些更多的事,我可以使用请求到的链接来下载图片,再将其中的文字识别出来。虽然不知道文字具体是什么意思,是角色?还是技能?或者大招? 不管那么多了,先识别出来再说吧。

2.环境配置

这个小项目不需要太多的配置,只需要安装两个Python库:

二、项目实施

1.项目分析

该项目的重点和难点有3个,分别是滚动加载所有图片、调用百度文字识别SDK定位角色、描述和技能的位置和实现多线程,下面一一进行讲解:

selenium模拟滚动加载所有图片

通常,网页在展示较多的内容时,一般不是直接在一个页面全部展示的,而是通过不同的方式分成不同的部分,常见的有3种:
(1)分页
即将内容分到多页中,每页展示固定数量的内容,各页之间的网页结构类似,这类的网站如淘宝,如下:

阴阳师卡牌下载文字识别taobao_page

这类网页要实现获取到所有数据据,可以通过selenium模拟点击页码或者调整URL中与页数相关的参数实现。
通过selenium模拟点击的示例代码如下:

next_page = driver.find_element_by_class_name('//*[@id="mainsrp-pager"]/div/div/div/ul/li[8]/a/span[1]')
        next_page.click()

通过URL中的参数实现示例如下:

url = 'https://s.taobao.com/search?q=Python&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.1000386.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=0&ntoffset=6&p4ppushleft=1%2C48&s={}'.format(44 * (i - 1)) # i为页数

(2)手动下滑并点击加载更多
这种方式是手动向下滚动加载,加载了一i的那个数量后需要点击加载更多或者类似的按钮,点击之后在同一网页继续向下加载,到了一定数量需要再次点击以加载更多…,如简书就是这种浏览方式:
slide_click
这类网页要实现爬取所有数据或者尽可能多的数据需要模拟点击按钮以实现动态加载,所以需要使用selenium,示例如下:

while True:
	try:
    	driver.find_element_by_xpath('load-more')
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东哥说AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值