今天遇到的问题
F12中能找到json文件,我所要也就是json文件里面的strokes内容。
但是在先前的写的代码中,通过selenium自动化库能完成汉字的自动化搜索。但是无法获取到的json文件。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import json
import re
import time
import requests
import pprint
#创建WebDriver对象
driver = webdriver.Chrome()
#等待变量
wait = WebDriverWait(driver,10)
#模拟搜索汉字
driver.get('http://bihua.shufaji.com/')
# 等待“搜索”按钮加载完成
search_btn = driver.find_element_by_xpath("//*[@id='char']")
# 在搜索框填写“查询笔画的字”
search_btn.send_keys(wname)
# 确认元素是否出现
# 等待确认“按钮”加载完成
confirm_btn = wait.until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '#submit'))
)
# 单击“确认”按钮
confirm_btn.click()
# 等待5秒
time.sleep(5)
#动态AJAX返回的完整html页面
html = driver.page_source
以上代码只是完成了自动化搜索和获取完整的态页面。对于加载出来的东西对我没有用。还是没法直接获取到json文件。
场面一度陷入尴尬。
转个思路 ,不妨返回F12,从页面下手找突破口。
从这里看,我们需要这里的json文件,这个头部 信息header里面是有url可以直接链接到这个json文件内容里面的。
那我们要做的就是能获取这个url。但是这只是一个字的,我们要做到的是它能自己搜索,自己获取相关数据。
这种字体字库的网站一般是统一的字体文件库,url肯定是有规律。我们就多搜几个字来找寻他命名的规律。
各位看官老爷请看,上面是“魑”字的url,下面是“魅”字的url。两者对比不难发现。二者就是json的文件名不同。而.json前面字符就是代表哪个字。我们要做的就是获取到代表这个字的字符,然后固定组合就行。
这是网站原网址
这是搜索字之后的网址
二者对比不难发现,当前网页的网址多出来的部分其实就是这个字在该网站后台库里面的编码。只是我们的浏览器加载的时候解码过,所以显示的是汉字。但其实我们直接获取网页源码的时候。获得到的还是它的字符编码。
接下来就好弄了。
# 获取当前页面的url
url = driver.current_url
print(url)
# 提取搜索的汉字的字节码
#这里提取到的是str类型 ,通过split分片将str分为了两段。
#因为是char=后面是具体的编码,所以就以“=”进行分片
transcoding = url.split('=')
#因为分为了两段,所以取第二段就是我要的汉字编码
print(transcoding[1])
#进行拼接组合,得到当前爬取汉字json文件的url
new_url = ('https://cdn.jsdelivr.net/npm/hanzi-writer-data@2.0/' + transcoding[1] + '.json')
print(new_url)
至此,完整获得json文件。