更新:识典古籍网字典,理论收字98682

识典重爬的话好说,也就一两个小时,但是,例句在json中不显示,相关字体“查看更多”也在json中,点击展开,如果全爬的话,css和js合并的问题,json,css,js都超出我的能力范围,
2J6v.zip (8.4 MB)
29个js和4个css,和光.html
等个大大来一句,
“js和css搞好了,html只用爬哪到哪,然后加个头就行了,

<head><meta charset="utf-8"><link rel="stylesheet" type="text/css" href="sdgjpc.css"><script src="sdgjpc.js"></script></head>

弱弱的问一句,对于同一IP持续异常(短期内三番五次)的访问流量,识典网就没有设置相应的防爬措施吗?或者识别典网就是放开了让爬?本人不懂爬术,只是好奇。

如果用python处理,可以参考:

import re
import json
from bs4 import BeautifulSoup
import requests

def extract_router_data(url):
“”“从网页提取window._ROUTER_DATA的JSON数据”“”
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
soup = BeautifulSoup(response.text, ‘html.parser’)

    # 定位body最后一个script标签
    scripts = soup.body.find_all('script')
    if not scripts:
        raise ValueError("未找到script标签")
    
    # 正则匹配JSON数据
    pattern = r'window\._ROUTER_DATA\s*=\s*({.*?});'
    match = re.search(pattern, scripts[-1].string, re.DOTALL)
    if not match:
        raise ValueError("未匹配到JSON数据")
        
    return json.loads(match.group(1))
    
except Exception as e:
    print(f"数据提取失败: {str(e)}")
    return None

def get_hanyu_doc(json_data, path=‘hanyuDoc’):
“”“安全获取嵌套JSON中的字段值”“”
keys = path.split(‘.’)
result = json_data

for key in keys:
    if isinstance(result, dict) and key in result:
        result = result[key]
    else:
        return None
return result

if name == “main”:
# 示例使用
test_url = “https://example.com” # 替换为目标网址
json_data = extract_router_data(test_url)

if json_data:
    hanyu_value = get_hanyu_doc(json_data)
    print(f"提取到的hanyuDoc值: {hanyu_value}")
else:
    print("未能获取有效数据")

不想费脑子,直接问的AI

# 仅使用正则表达式提取目标内容<a href=/tous/
            match = re.search(r'window._ROUTER_DATA =(.*?)</script></body></html>', decoded_html, re.DOTALL)
            if not match:
                return False, "未找到匹配内容"

            # 提取匹配内容并处理
            content_html = f'<body><script>window._ROUTER_DATA ={match.group(1)}</script></body>'

            # 优化处理:去除换行和多余空格
            content_html = re.sub(r'\s+', ' ', content_html).strip()

这样可以吧,
<body><script>window._ROUTER_DATA ={match.group(1)}</script></body>

爬出来就是一行,
csshe jss你能搞定吧

我没比较,不过猜想和hdx的json数据格式一致。你这个写法抓取的内容太多,只要hdx就行了,也就是 hanyuDoc的值。
sd的无关内容太多,dyhy倒可以把整页抓下来。

链接:百度网盘 请输入提取码
提取码:kkkk
下好了,果然说一两个小时,吹牛皮了,花了三个小时。
数据30个g,压缩之后5个g。
98682个字,
json数据全下了,想看汉大的,看汉大,想看康熙的,看康熙,还有说文解字注,等等
𫙲.rar (54.5 KB)
数据最小的数据为空,重下

2 个赞

辛苦!但是太大了,我电脑放不下、打不开。
json就是格式化数据,你把它看成xml也未尝不可。规整的格式更容易加html标签。用一个样本弄清性质与关系,其它依此类推,就可迎刃而解。如:

“hanyuDoc”:{“word”:“㐜”,“docType”:1,“pinyinList”:[“qiú”,“chóu”],“pinyinModule”:{“chóu”:{“detailParaphrase”:{“detailParaphraseList”:[{“paraphrase”:“同“仇”。”,“partOfSpeech”:“”,“shuZhengList”:,“subParaphrase”:}],“idiomParaphrase”:null,“source”:“《汉语大词典》”}},“qiú”:{“detailParaphrase”:{“detailParaphraseList”:[{“paraphrase”:“正。”,“partOfSpeech”:“”,“shuZhengList”:[{“sentence”:“謹于媐㐜,初貞,後寧。”,“authorList”:[“扬雄”],“setInPeriod”:“汉”,“work”:“《太玄·内》”,“annotateParaphraseList”:[{“sentence”:“㐜,正也。謹其媐正,男女道正,故貞。夫婦别,家室安,故後寧也。”,“authorList”:,“period”:“”,“work”:“范望注”}]}],“subParaphrase”:},{“paraphrase”:“同“仇”。”,“partOfSpeech”:“”,“shuZhengList”:,“subParaphrase”:}],“idiomParaphrase”:null,“source”:“《汉语大词典》”}}},“url”:“此处省略”}

sd数据格式与hdc略有不同,如果想直接套用hdc模板,需要修改一些字段名称。dyhy的数据格式与hdc的格式目测应该是一致的,可以直接套用。

我在尝试抄袭你的hdc的方法,这次更进一步,直接把原版json内容一刀不切套入mdx中,解包就是json,打包就是mdx,免得打架,

<link rel="stylesheet" href="hydcds.css"><div id="output"></div><script>var data = {"DocID": "7205508335913910304", "Title": "㐌",
1 个赞

看了一下,下载的东西实际上json数据应该没有那么大,还有很多的其他的内容。不过数据是完整的,有相关字,汉大康熙说文解字注,后面要么从html中提取纯json,然后导出为mdx的txt,写个css就行,要么直接var data =json,写个js展开,写个css样式,

一
<link rel="stylesheet" href="hydcds.css">
<script src="hydcds.js"></script>
<div id="root"></div>
<script>
window.__DICT_DATA__ = {
  "UseDisasterCache": false,
  "StabilityError": 0,
  "Doc": {
    "DocID": "7140264374857859080",
    "Title": "一",
    "BasicModule": {
      "PNGImage": "local/2c8d4caa.png",
      "StrokeOrderGIF": "local/60b2c303.gif"
    }
  },
  "ItemList": [
    {
      "Pinyin": "yī",
      "ParaphraseModule": {
        "DetailParaphrase": {
          "ParagraghList": [
            {
              "Paraphrase": "最小的正整数。",
              "PartOfSpeech": "数词",
              "ParagraghList": [
                {
                  "Sentence": "彤弓一,彤矢百。",
                  "Work": "《书·文侯之命》"
                }
              ]
            }
          ]
        }
      }
    }
  ],
  "AudioURLMap": {
    "v02fa5g10001": "local/yī.mp3"
  }
};
</script>
</>

点赞!
建议各词典分开来做,要不像个大杂烩。

我就不做了,我本来只是想提取dyhy的字头ID,目的已经达到了,json也上传了,如果有人想修复“相关汉字”中查看全部的功能,或者把json中的例句恢复到页面中,或者汉大,康熙,说文,各字典分离出来,那就等有缘人了,

数据太大只能望洋兴叹。
如果趁数据在你电脑上,能把汉语大词典部分剥离出来单独上传,我有空会做汉大字典版。剥离应该用正则就行。