爬取网页题库所用到的基本方法

zcz 4229 0

1.在控制台动态加载js

在console运行js代码时,有时需要运用已经写好的方法,导入js并加载。

function loadScript(url, callback) {
    var script = document.createElement("script");
    script.type = "text/javascript";
    if (typeof(callback) != "undefined") {
        if (script.readyState) {
            script.onreadystatechange = function() {
                if (script.readyState == "loaded" || script.readyState == "complete") {
                    script.onreadystatechange = null;
                    callback();
                }
            };
        } else {
            script.onload = function() {
                callback();
            };
        }
    };
    script.src = url;
    document.body.appendChild(script);
};
loadScript("https://coding.net/u/pymll/p/js/git/raw/master/FileSaver.js");

这里加载了很常用的将数据导出到本地txt文档的方法,我已经上传到了coding.net,可以方便调用。

2.获取带有指定class的标签元素


document.querySelectorAll("div.class");

3.合并多个txt文件

with open('lastku.txt','w',encoding='UTF-8') as f:
    for i in range(20):
        with open('ku (%s).txt'%i,'r',encoding='UTF-8') as f1:
            for line in f1:
                f.write(line)

4.去除txt文件中的重复行

lines_seen = set()
outfile = open('lastku1.txt','w',encoding='UTF-8')
for line in open('lastku.txt','r',encoding='UTF-8'):
    if line not in lines_seen:
        outfile.write(line)
        lines_seen.add(line)
outfile.close()

5.算法问题:随机抽取遍历次数

假设题库有500道题,每次随机抽取80道,求抽完所有题所需的最少次数。

思路:生成一个(0,500)的列表A代表全部500道题,利用random随机数函数每次生成80个(0,500)内不重复的数,然后将列表A里与这80个数相同的项删除,循环,直至A列表为空,统计循环次数。由于一次统计存在偶然性,统计5000次计算结果取平均值。

import random

def run():
    A = list(range(500))

    i = 0
    while A!=[]:
        B=random.sample(range(0,500),80)
        A = [item for item in A if item not in set(B)]
        i += 1

    return i

k = 0
for j in range(5000):
    k += run()

print(k/5000)

QQ截图20180606225511.png

5000次误差已经很小了

发表评论
表情 图片 链接 代码