2015版大藏经爬取
本文最后更新于 207 天前,其中的信息可能已经有所发展或是发生改变。

需求

1. Python相关知识和配套工具。
2. 网页分析能力

分析


    原网页是这个样子的:

2015版大藏经

file



    我们要的是这个框框里面的。

file


    这样好办了,F12开始分析整体网页。
找到我们要的链接。

file

https://21dzk.l.u-tokyo.ac.jp/SAT/satdb2015.php?mode=detail&ob=1&mode2=2&mode4=&useid=0001_,01&_=1651393882728

    分析链接,你就会发现有些地方是可以不用的,有些地方是必须都要的。
https://21dzk.l.u-tokyo.ac.jp/SAT/satdb2015.php?
mode=(这个里面是加载什么)
&ob=1(这个未知,但是不影响)
&mode2=2&mode4=(未知,可以改改玩玩)
&useid=0001,01(这个是卷数和分卷数,我大致这样叫吧)
&
=1651393882728(最后类似于一个标识码,或者token)
    那样这东西翻页怎么处理呢,我们继续翻页(此处我选了另一本可以翻页的经文。
file

file

https://21dzk.l.u-tokyo.ac.jp/SAT/satdb2015.php?mode=detail&nonum=&kaeri=&mode2=2&ob=1&mode4=&useid=0003_,01,0157a01
    你会发现多了东西,多了尾巴对吧,那边就是用来控制页数的,自己改改玩玩就知道了。


开干

    事实证明,最开分析网页源代码是非常有必要的,请直接在2015版大藏经右键查看网页源代码,然后往下翻,就可以发现所有书的标签,根本不用去写双循环生成器,而且还会出现找不到标签的情况。

file

    至于怎么拿出红色框框的东西请EmEditor+正则。(别跟我说你是直接复制的。)当然VSC也行,不过我喜欢Emeditor处理这种东西。最后保存txt,到时候加一段循环读取的代码就行了。
file


    我们要的东西就拿的差不多了,直接上代码。或许我少写了一点点注释,多引用了一些库。最后是进行了一个对比前后文件大小再删除相同大小文件的过程。别问我为什么不直接对比MD5 SHA1 哈希,这些鬼东西全部都不一样,但是文件内容又是一样的。而Python用str比较文件内容必须要完全一致才行,所以无奈选择这种先存再删的方法。

import itertools
import requests
import urllib.request
import time
import os
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

for line, pages in itertools.product(open("biaoqian.txt"), range(1,1500)):
    # line是读出来的卷,pages是页数。bp是上一页,bp2是上两页。相当于N-1&N-2
    bp = pages -1
    bp2 = pages - 2
    # 把两个的值算出来,为的是比较前后文件大小。
    line = str(line) # str化
    line = line.replace("\n", "") # 去掉换行符
    pages = str(pages) # 同上
    bp = str(bp)
    bp2 = str(bp2)
    pages = pages.zfill(4) # 增加0000
    bp = bp.zfill(4)
    bp2 = bp2.zfill(4)
    print(bp,bp2)
    # print(line)
    # print(pages)
    url = line + "," + pages + ".html"
    burl = line + "," + bp + ".html"
    burl2 = line + "," + bp2 + ".html"
    # 以上分别是 N N-1 N-2个文件的名字,别问为什么不直接N 和N-1, N还没创建。好像可以不用这样
    print(burl,burl2)
    print(url)
    rurl = "https://21dzk.l.u-tokyo.ac.jp/SAT/satdb2015.php?mode=detail&ob=1&mode2=2&mode4=&" + "useid=" + url
    # print(rurl)
    if os.path.exists(burl2) == True & os.path.exists(burl) == True:
        print("33243")
        burlinfo = os.stat(burl)
        burlinfo2 = os.stat(burl2)
        burlinfo = burlinfo.st_size
        burlinfo2 = burlinfo2.st_size
        print(burlinfo,burlinfo2)
        if burlinfo == burlinfo2:
            print("equal")
            # os.remove(url) 
            # print(url, "File removed successfully")
            os.remove(burl2) 
            print(burl2, "File removed successfully") 
            os.remove(burl) 
            print(burl, "File removed successfully")
            continue
        else:
            print("write")
    else:
        print("????????????")
    # dic = {
# 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36 Edg/100.0.1185.36',
    # }
    # html = requests.get(rurl,headers=dic)
    # print (html.text)
        html = urllib.request.urlopen(rurl).read()
        def saveHtml(file_name, file_content):
            with open(file_name.replace('/', '_'), "wb") as f:
                f.write(file_content)
                print("200")
        saveHtml(url, html)


    中间的很多过程我省略了,这东西的语码转换没那么容易。而且最开始我以为是直接整个站抓,就上IDM了,事实证明不可,还是直接抓文本吧。
    这个是丢我服务器上爬的图,现在应该快620卷了。

file

关于图像

    这部分没那么好搞,需要手动调节框框放大,我给个例子吧。这图能不能加载出来还是个问题,有点大。(我不管我网站流量了,放原图。)

file


完结,撒花。

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇