美文网首页
我的第一个爬虫——获取国防科技大学历年录取分数

我的第一个爬虫——获取国防科技大学历年录取分数

作者: 秋秋_f99f | 来源:发表于2019-01-03 14:00 被阅读0次

    1、根据URL获取网页

    导入urllib.request库,创建一个表示远程的url的类文件对象req.urlopen(' '),如同本地文件一样读取内容。

    import urllib.request as req
    
    #根据URL获取网页:
    
    #http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/index.html
    
    url = 'http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/index.html'
    
    webpage = req.urlopen(url) # 按照类文件的方式打开网页
    
    # 读取网页的所有数据,并转换为uft-8编码
    
    data = webpage.read().decode('utf-8')
    
    print(data)
    

    执行成功后可以得到如下的数据:


    捕获.PNG

    2、网页数据存入文件

    将读取的网页数据写入文件:

    outfile = open("enrollnudt.txt", 'w') # 打开文件
    outfile.write(data) # 将网页数据写入文件
    outfile.close()
    

    3、提取链接(历年录取分数统计的URL)

    ① 发现特殊子串

    根据数据的特征,寻找到特殊的子串


    1.PNG
    ② 通过特殊子串进行粗筛

    先对“国防科技大学2017年录取分数线统计”这一特殊子串进行粗筛,提取出其URL


    2.PNG
    urls=[]
    website = 'http://www.gotonudt.cn'
    for year in range(2012,2018):
         index = data.find('国防科技大学%d年录取分数统计' % year)
         href = data[index-100:index].split('"')[3] # 提取url子串
         # href是相对URL,需要加上站点域名
         urls.append(website+href)
    print(urls)
    

    4、根据超链接抓取并保存链接网页内容

    # 分析并提取出国防科技大学2016年录取分数统计的超链
    years = [2016, 2015, 2014, 2013, 2012]
    urls = []
    for year in years:
        index = data.find("国防科技大学%s年录取分数统计" %year)
        href = data[index-80:index-39] # 根据单个特征串提取url子串
        # 注意提取的超链href是相对URL,需要加上站点域名
        website = 'http://www.gotonudt.cn'
        urls.append([year,website+href])
    for url in urls:
        webpage = req.urlopen(url[1]) # 根据超链访问链接的网页
        data = webpage.read() # 读取超链网页数据
        outfile = open("6-4 enroll%s.txt"%url[0], 'wb') # 按二进制写方式打开文件
    outfile.write(data) # 将网页数据写入文件
    outfile.close() # 关闭文件
    

    读取到的网页数据已经写入了文件:


    image.png

    5、提取表格

    从抓取的数据中可以发现,数据虽然很零碎但是有规律可循,先看2016年分数线的网页,表格范围从<table>...</table>,导入正规表达式包

    def firsttable2file(year, url):
        webpage = req.urlopen(url)
        data = webpage.read().decode('utf-8')
        # 获取网页中的第一个表格中所有内容:
        table = re.findall(r'<table(.*?)</table>', data, re.S)
        firsttable = table[0]
        outfile = open('temp.txt', 'w')
        outfile.write(firsttable)
        outfile.close()
    

    6、提取表格中的行

    # 获取表格中所有行:
    rows = re.findall(r'<tr(.*?)</tr>', firsttable, re.S)
    outfile = open('temp.txt', 'w')
    for row in rows:
         outfile.write(row)
         outfile.write('\n')
    outfile.close()
    

    相关文章

      网友评论

          本文标题:我的第一个爬虫——获取国防科技大学历年录取分数

          本文链接:https://www.haomeiwen.com/subject/ixzalqtx.html