Python网络爬虫(1)--爬取中国大学排名

2017年, 编程界最火的的语言莫过于Python。 Python语言其实并不是像Go, Kotlin语言一样是近些年的创造的, 它其实比Java语言的历史略久, 只不过它或许不符合我们社会主义的国情, 在国内一直不被广泛应用。 就这近两年, 突然之间, 名不见经传的Python语言在国内一夜走红, 无论是专业的Python程序员还是诸如Java, C++等语言的程序员都再次将目光投向Python, 2018年元旦期间, 微信跳一跳小游戏一经发布, 潜伏在深圳高新园的某大牛随即就在github上发布了用Python语言写的外挂程序,这一下各路Python大牛又陆续补充了该外挂的iOS等版本, 玩游戏开外挂不应该提倡,应该予以鄙视... 当然, 用程序玩游戏的确不会带来任何快感, 可是写这个程序的过程是很快乐的呀! 这又从另一面让我们认识了强大的Python---深能进行机器学习,大数据分析, 网络爬虫, 浅也能实现游戏外挂, 抢12306火车票, 给人的感觉就是Python已经无所不能了。Python潮流, 浩浩荡荡, 顺之者昌,逆之者亡, 我当然也要跟着时代潮流呀, 我去年11月开始学习Python了, Python语法比Java, C, C++更加灵活简单, 今天尝试了一下使用Python爬虫的功能。

一.要爬取的是最好大学网的中国大学排名

最好大学网的URL是:
http://www.zuihaodaxue.com/shengyuanzhiliangpaiming2017.html
如图:

Screenshot from 2018-01-13 19-11-11.png

查看源码中我们要爬取的关键信息:
Screenshot from 2018-01-13 19-14-54.png

二.使用requests库获取HTML文本

定义获取HTML文本的函数

def get_html_text(url):
    """
    获取url对应的html文本
    :param url:
    :return: html文本
    """
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""

三.用BeautifulSoup4上面获取的文本进行解析

BeautifulSoup4的文档非常友好, 解析HTML非常简单。
定义解析函数:

def parse_html(html):
    """
    解析html文件
    :param html:
    :return: 大学排名列表,['1', '清华大学', '北京']
    """
    u_list = []
    soup = BeautifulSoup(html, 'html.parser')
    tbody = soup.find('tbody')
    for tr in tbody:
        if isinstance(tr, bs4.element.Tag):
            td_list = list(tr)
            u_list.append([td_list[0].string, td_list[1].string, td_list[2].string])
    return u_list

解析后的形式:
[ ['1', '清华大学', '北京'], ['2', '北京大学', '北京'],
['3', '中国科学院大学', '北京'], ['4', '中国科学技术大学', '安徽'],
['5', '复旦大学', '上海'], ['6', '中国人民大学', '北京'],
['7', '上海交通大学', '上海'], ['8', '浙江大学', '浙江'], ... ]

四.将解析后的内容按照一定格式写到文件中

def save_to_file(univ_list):
    """
    将提取的数据保存到文件
    :param univ_list:
    :return:
    """
    with open('university.txt', 'w') as f:
        for item in univ_list:
            s = '{0:>4} \t {1:<3} \t {2:<4}'.format(str(item[0]), str(item[2]), str(item[1]))
            print(s, file=f)
    f.close()

全部代码:

import requests
from bs4 import BeautifulSoup
import bs4


def get_html_text(url):
    """
    获取url对应的html文本
    :param url:
    :return: html文本
    """
    try:
        r = requests.get(url)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""


def parse_html(html):
    """
    解析html文件
    :param html:
    :return: 大学排名列表,['1', '清华大学', '北京']
    """
    u_list = []
    soup = BeautifulSoup(html, 'html.parser')
    tbody = soup.find('tbody')
    for tr in tbody:
        if isinstance(tr, bs4.element.Tag):
            td_list = list(tr)
            u_list.append([td_list[0].string, td_list[1].string, td_list[2].string])
    return u_list


def save_to_file(univ_list):
    """
    将提取的数据保存到文件
    :param univ_list:
    :return:
    """
    with open('university.txt', 'w') as f:
        for item in univ_list:
            s = '{0:>4} \t {1:<3} \t {2:<4}'.format(str(item[0]), str(item[2]), str(item[1]))
            print(s, file=f)
    f.close()


if __name__ == '__main__':
    url = "http://www.zuihaodaxue.com/shengyuanzhiliangpaiming2017.html"
    html_text = get_html_text(url)
    univ_list = parse_html(html_text)
    save_to_file(univ_list)

写入文件后的结果:

   1     北京      清华大学
   2     北京      北京大学
   3     北京      中国科学院大学
   4     安徽      中国科学技术大学
   5     上海      复旦大学
   6     北京      中国人民大学
   7     上海      上海交通大学
   8     浙江      浙江大学
   9     江苏      南京大学
  10     天津      南开大学
  11     上海      同济大学
  12     北京      北京航空航天大学
  13     北京      对外经济贸易大学
  13     上海      上海财经大学
  15     北京      中央财经大学
  16     北京      外交学院
  17     天津      天津大学
  18     湖北      武汉大学
  18     北京      北京师范大学
  20     北京      北京外国语大学
  此处省去980行...

用Python语言进行网络爬虫的操作过程并不复杂, 当然了, 本文所写的只是一次简单的小尝试, 复杂的还待继续探究。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • Python 资源大全中文版 awesome-python[https://github.com/vinta/aw...
    万色星辰阅读 9,763评论 0 256
  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,633评论 4 418
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 3,791评论 1 61
  • 一身市井装,不登和画廊。 啼笑当今世,墨少文无章。 今见后主词,仿若入南唐。 平仄几苍茫,字字绘凄凉。 江山迭更怆...
    四酒阅读 174评论 0 1
  • 使用以下命令会报错 sudo iptables -I INPUT 1 --dport 80 -j ACCEPT 报...
    老虎Alex阅读 2,213评论 0 0