Python爬虫(一)—— 中国大学排名

实战练习1:爬取中国大学排名前20

大家可以关注知乎或微信公众号的‘share16’,我们也会同步更新此文章。

一、思路如下

  1. 查看相关网站的Robots协议(robots.txt),如https://xxxxxxx.com/robots.txt ;
  2. 从网络上获取大学排名网页的内容,定义函数为 getHTMLText(url) ;
  3. 提取网页内容中的信息,并添加到合适的数据结构,定义函数为 fillUnivList(ulist,html) ;
  4. 利用数据结构提取数据并输出结果,定义函数为 printUnivList(ulist,num) ;

二、要爬取的网站

中国大学排名 (http://xxxxxxxxx/xxxx/xxxx.html)
ps: 涉及到版权问题,后续烦请大家自行搜索呀。😁😁😁

三、网页源代码分析

  1. 在中国大学排名网,了解到 ‘排名第一的是清华大学、总分969.2’
  2. 鼠标右击 - 显示页面源文件
  3. 在源文件页,搜索 ‘969.2’,查看得知:“ 每一行排名都在一个tbody.tr标签内、每行排名内的每个单元格的内容都在一个td标签内 ”,如下图:在这里插入图片描述

四、代码如下

4-1. 获取网页内容:

requests.get() # 获取HTML网页内容的方法
r 是Response对象,下面是Response对象的属性:
r.raise_for_status() #若Response类型状态不是200,会产生一个HttpError的异常。
r.text #返回url对应的页面内容,其是str类型。
r.encoding #从http header中猜测的响应内容编码方式,一般是’ISO-8859-1’(不能识别中文)。
r.apparent_encoding #从内容中分析出响应内容编码方式,如:utf-8、GB2312等。

import requests 
from bs4 import BeautifulSoup
import bs4

def getHTMLText(url):
    try:
        r = requests.get(url, timeout = 30)
        r.raise_for_status() 
        r.encoding = r.apparent_encoding
        html = r.text
    except:
        html = '爬取失败'
    return html  

4-2. 提取相关内容,储存到列表中:

soup.tbody.contents #将soup.tbody的所有子节点存入列表
isinstance(tr, bs4.element.Tag) #判断子标签是否为Tag对象(因为子节点会包含如换行符之类的节点)

def fillUnivList(ulist,html):
    soup = BeautifulSoup(html,'html.parser')
    data = soup.tbody.contents
    for tr in data:
        if isinstance(tr, bs4.element.Tag):
            tds = tr.find_all('td')
            ulist.append([ tds[0].div.string,  tds[1].find(name='a',  attrs= {'class':'name-cn'}).string,
                          tds[2].get_text(),  tds[3].get_text(),  tds[4].string,  tds[5].string])
        else:
            pass

4-3. 打印结果(format格式化函数):

def printUnivList(ulist,num):
    cols = "{0:{6}^10}\t{1:{6}^10}\t{2:{6}^10}\t{3:{6}^10}\t{4:^10}\t{5:^10}\t"
    print(cols.format('排名','大学名称','省市','类型','总分','办学层次',chr(12288)))
    for k in range(num):
        i = ulist[k]
        print(cols.format(str(i[0]).strip(),str(i[1]).strip(),str(i[2]).strip(),str(i[3]).strip(),str(i[4]).strip(),str(i[5]).strip(),chr(12288)))

4-4. 主函数,调用上述几个函数:

def main():
    ulist = []
    url = 'http://xxxxxxxxx/xxxx/xxxx.html'
    html = getHTMLText(url)
    fillUnivList(ulist,html)
    printUnivList(ulist,20)

main()

4-5. 运行结果:

在这里插入图片描述

谢谢大家🌹

  • 13
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值