美文网首页
Python爬取全国高等院校

Python爬取全国高等院校

作者: 3ni | 来源:发表于2018-08-05 09:45 被阅读0次

    院校链接
    目前一共爬取到2727所学校,爬取时间可能需要1~2分钟(主要耗时在请求网页中),爬取结果存放到csv文件中。
    编写代码中遇到一个小问题,由于获取到网页中的数据较多,我在pycharm打印内容时,pycharm竟然没有显示完全,弄得我以为一直没有捕捉到关键数据(表格中的数据),然后我将数据全部写入文件中,在文件中才找到,证明数据确实获取到,但是可能pycharm某些设置,导致没有显示出来。这个问题搞了半天,起初在写到文件中,在macOS上的文本编辑有毒,一直给我显示网页样的格式,看不见原始的文本,后来用sublime才看见。吐槽macOS文本编辑器打开稍微大一点的数据就需要加载5~6秒,用sublime都是秒开。
    Python 2.7
    相关库安装:
    sudo pip install requests
    sudo pip install BeautifulSoup

    import requests
    import BeautifulSoup
    import sys
    import csv
    
    url = 'https://gaokao.chsi.com.cn/sch/search.do'
    user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) ' \
                     'AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 ' \
                     'Safari/605.1.15'
    
    head = ['院校名称', '院校所在地', '院校隶属', '院校类型', '学历层次', '院校特性', '研究生院', '满意度']
    
    
    def get_university_info(page):
        payload = {'start': page}
        headers = {'User-Agent': user_agent}
        r = requests.get(url=url, headers=headers, params=payload)
        print r.url
        soup = BeautifulSoup.BeautifulSoup(r.text)
        data = []
        rawdata = soup.find('table')
        thlist = rawdata.findAll('th')
        for th in thlist:
            text = th.getText()
            head.append(text)
        # print head
        trlist = rawdata.findAll('tr')
        for tr in trlist:
            tdlist = tr.findAll('td')
            record = []
            for td in tdlist:
                content = td.getText()
                if content == '':
                    # print 1
                    record.append('1')
                    continue
                if content == '':
                    # print 0
                    record.append('0')
                    continue
                if '&ensp' in content:
                    # print content.replace(' ','')
                    record.append(content.replace(' ', ''))
                    continue
                # print content
                record.append(content)
            data.append(record)
        return data
    
    
    def save():
        with open('china_university.csv', mode='w') as f:
            fd = csv.writer(f)
            fd.writerow(head)
            try:
                for page in range(0,2740,20):
                    data = get_university_info(page=page)
                    for c in data:
                        if c:
                            fd.writerow(c)
            except KeyboardInterrupt:
                print 'stop!'
    
    
    def main():
        reload(sys)
        sys.setdefaultencoding('utf-8')
        save()
    
    
    if __name__ == '__main__':
        main()
    
    

    相关文章

      网友评论

          本文标题:Python爬取全国高等院校

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