では、ゲームを始めましょう
GO FOR IT !

前言

目标网站:中国国家数字图书馆

目标任务:获取全部图书书名,计算平均书名长度

具体过程

1.分析网站

网站URL“http://read.nlc.cn/allSearch/searchList?searchType=1&showType=1&pageNo=1”

包含“pageNo”元素,借此控制页面切换

网页源代码中书名被包含于“书名”之中,通过string的find函数定位切取出书名

全部书名存放于文件中

爬虫部分的代码:

from stat import S_IFBLK
import requests
User_Agent = "随机浏览器识别码"
fp = open("./BookName.txt","a",encoding='utf-8') #储存文件

for i in range(6061): #一共6060页,72716本书
    print("No. {}".format(i))
    PageNo = str(i)
    Url = "http://read.nlc.cn/allSearch/searchList?searchType=1&showType=1&pageNo="+PageNo+"&searchWord=&classification="
    r = requests.get(
        Url,
        headers={'User-Agent':User_Agent}
        )
    print("\t{}".format(r.status_code))
    if(r.status_code == 200):
        r.encoding = "utf-8"
        Str = r.text
        while(Str.find("<span class=\"tt\">") != -1):
            pos1 = Str.find("<span class=\"tt\">")
            Str = Str[pos1+17:]
            pos2 = Str.find("</span>")
            bookName = Str[0:pos2]
            bookName.replace("\u200E","")
            fp.write(bookName+'\n')

    else: #被反爬虫了就弹出并且报出中断位置,下次直接从该位置继续
        print("Error! now pageNo is {}".format(i))

2.书名处理

将文件中储存的书名全部读入,累加字符长度,除以书本数量得到平均书名长度

代码:

fp = open("./BookName.txt",'r',encoding="utf-8")
ans, num = 0, 0

while(1):
    Str = fp.readline()
    if(Str == ""):
        break
    ans += len(Str)
    num += 1

print(ans/num)

3.结果部分

中文一个字和英文一个字母都看作一个长度

结果为“39.66392540843831”平均长度

主要还是英文书名拉长了平均长度,另外国家图书馆的书好像书名也基本上挺长的。

总访问量 访问人数