中国大学排名定向爬虫(已更新2021版本)

网络爬虫专栏链接

Copyright: Jingmin Wei, Pattern Recognition and Intelligent System, School of Artificial and Intelligence, Huazhong University of Science and Technology


文章目录

  • 中国大学排名定向爬虫(已更新2021版本)
    • Reference
    • 功能描述
    • 定向爬虫可行性
    • 程序的结构设计
    • 程序编写
    • 源代码
    • 程序优化
    • 总结

本教程主要参考中国大学慕课的 Python 网络爬虫与信息提取,为个人学习笔记。

在学习过程中遇到了一些问题,都手动记录并且修改更正,保证所有的代码为有效。且结合其他的博客总结了一些常见问题的解决方式。

本教程不商用,仅为学习参考使用。如需转载,请联系本人。

Reference

爬虫 MOOC

数据分析 MOOC

廖雪峰老师的 Python 教程

功能描述

输入:大学排名URL链接

输出:大学排名信息的屏幕输出(排名,大学名称,总分)

技术路线:requests‐bs4

定向爬虫:仅对输入 URL 进行爬取,不扩展爬取

定向爬虫可行性

1.确定要爬取的信息是否写在 HTML 的页面代码中

https://www.shanghairanking.cn/rankings/bcur/2021

2.没有 robots 协议,即没有爬虫的限制

程序的结构设计

步骤1:从网络上获取大学排名网页内容 getHTMLText()

步骤2:提取网页内容中信息到合适的数据结构 fillUnivList()

步骤3:利用数据结构展示并输出结果 printUnivList()

程序编写

先使用异常处理形式爬取网站,修改编码并返回 url 的内容。(requests)

然后找到 tbody 标签,在tbody孩子标签中挨个检索 tr(for循环),如果类型和 tag 一致,则查找 tr 中的 td 标签,以二维列表的数据结构存储信息 [[“1”, “清华大学”, “北京”], [“2”, “北京大学”, “北京”], …]。(BeautifulSoup)

新版的排名的大学名字封装在 a 标签中,所以这里需要具体到查找属性为 ‘name-cn’ 的 a 标签并存储其字符串,即大学的中文名称。相应代码只需要做细微修改即可

最后格式化输出信息。

格式化输出回顾:

源代码

import requests
from bs4 import BeautifulSoup
import bs4def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""def fillUnivList(ulist, html):soup = BeautifulSoup(html, "html.parser")for tr in soup.find('tbody').children:  #先检索到tbody标签if isinstance(tr, bs4.element.Tag):tds = tr('td')  #查询tr中的td标签,等价于tr.find_all('td')# 新版的排名封装在a标签中,所以这里需要具体到查找属性为'name-cn'的a标签并存储其字符串,即大学的中文名称a = tr('a','name-cn')ulist.append([tds[0].string.strip(),a[0].string.strip(),tds[2].text.strip(),tds[4].string.strip()])  # 使用二维列表存储信息def printUnivList(ulist, num):print("{:^10}\t{:^6}\t{:^10}".format("排名","学校名称","总分")) #取10/6/10位中间对齐for i in range(num):u = ulist[i]print("{:^10}\t{:^6}\t{:^10}".format(u[0], u[1], u[3]))def main():uinfo = []url = "https://www.shanghairanking.cn/rankings/bcur/2021"html = getHTMLText(url)fillUnivList(uinfo, html)printUnivList(uinfo, 20)  # 20 univmain()

程序优化

中文对齐问题的原因:

当中文字符宽度不够时,采用西文字符填充;中西文字符占用宽度不同。

中文对齐问题的解决:

采用中文字符的空格填充 chr(12288)

def printUnivList(ulist, num):tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"# {3}表示需要填充时使用format的第三个变量进行填充,即使用中文空格print(tplt.format("排名", "学校名称", "总分", chr(12288)))for i in range(num):u = ulist[i]print(tplt.format(u[0], u[1], u[3], chr(12288)))

优化后的程序如下:

# -*- coding:utf-8 -*-import requests
from bs4 import BeautifulSoup
import bs4def getHTMLText(url):try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""def fillUnivList(ulist, html):soup = BeautifulSoup(html, "html.parser")for tr in soup.find('tbody').children:  # 先检索到tbody标签if isinstance(tr, bs4.element.Tag):tds = tr('td')  # 查询tr中的td标签,等价于tr.find_all('td')# 新版的排名封装在a标签中,所以这里需要具体到查找属性为'name-cn'的a标签并存储其字符串,即大学的中文名称a = tr('a','name-cn')ulist.append([tds[0].string.strip(),a[0].string.strip(),tds[2].text.strip(),tds[4].string.strip()])  # 使用二维列表存储信息def printUnivList(ulist, num):tplt = "{0:^10}\t{1:{4}^10}\t{2:^10}\t{3:^10}"# {3}表示需要填充时使用format的第三个变量进行填充,即使用中文空格print(tplt.format("排名", "学校名称", "地区", "总分", chr(12288)))for i in range(num):u = ulist[i]print(tplt.format(u[0], u[1], u[2], u[3], chr(12288)))def main():uinfo = []url = "https://www.shanghairanking.cn/rankings/bcur/2021"html = getHTMLText(url)fillUnivList(uinfo, html)printUnivList(uinfo, 20)  # 20 univif __name__ == "__main__":main()

总结

采用 requests‐bs4 路线实现了中国大学排名定向爬虫。

对中英文混排输出问题进行优化。

网络爬虫:中国大学排名定向爬虫相关推荐

  1. python中国大学排名爬虫写明详细步骤-python网络爬虫入门实例:中国大学排名定向爬虫...

    中国大学排名定向爬虫的 设计和实现 一.环境安装: 1.选择一个适合自己的IDE(以下代码用Jupyter Notebook编写) 2.打开cmd,安装requests库和beautifulsoup4 ...

  2. 嵩天《Python网络爬虫与信息提取》实例2:中国大学排名定向爬虫

    在介绍完requests库和robots协议后,嵩天老师又重点介绍了如何通过BeautifulSoup库进行网页解析和信息提取.这一部分就是在前面内容的基础上,综合运用requests库和Beauti ...

  3. python爬虫 2021中国大学排名定向爬虫

    最近的几篇博客来源是之前我下载的一个课件 在网上搜索了一下是一下这个课程的,可以结合视频博客以及代码去更好地学习 Python网络爬虫与信息提取_北京理工大学_中国大学MOOC(慕课) (icours ...

  4. 学习笔记:中国大学排名定向爬虫

    1. 学习视频 中国大学排名定向爬虫: https://www.bilibili.com/video/BV1pt41137qK?p=33&spm_id_from=pageDriver 2. 程 ...

  5. 嵩天老师的中国大学排名定向爬虫实例-萌新教程

    萌新实例,大佬们可以右上角了, 萌新可以看看互相学习 我是在是学习了<Python简明教程>还有廖雪峰老师的<Python3教程>后,才发现嵩天老师的视频的,简洁.生动.有趣, ...

  6. 中国大学排名定向爬虫以及淘宝商品爬虫参考嵩天老师Python爬虫课程遇到的问题及解决

    首先附上课程中程序,无法正常运行 把2016年的url更改为今年的url:http://www.shanghairanking.cn/rankings/bcur/2020 代码如下: import r ...

  7. 网络爬虫——中国大学排名数据抓取

    网络爬虫--中国大学排名数据抓取 目标网址 中国大学排名网:http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html 全球有很多份大学排名,这里以上 ...

  8. 中国大学排名的爬虫实战

    中国大学排名的爬虫实战(结合信息组织与提取,两种方式实现) 功能描述 输入:大学排名url链接 输出:大学排名信息的屏幕输出(排名,大学名称,总分) 技术路线:requests-bs4 定向爬虫:仅对 ...

  9. 中国大学排名python爬虫_Python爬虫入门实例三之爬取软科中国大学排名

    写在前面 这个例子是笔者今天在中国大学MOOC(嵩天 北京理工大学)上学习的时候写下来的.但是很快写完之后我就发现不对劲,首先课程给的例子是中国好大学网站的排名,但是现在这个网站已经重构了,原来的链接 ...

  10. python爬虫分析大学排名_Python爬虫之爬取中国大学排名(BeautifulSoup库)

    image.png 我们需要打开网页源代码,查看此网页的信息是写在html代码中,还是由js文件动态生成的,如果是后者,那么我们目前仅仅采用requests和BeautifulSoup还很难爬取到排名 ...

最新文章

  1. WINSOCK网络函数
  2. Zend framework重定向的方法
  3. CI配置文件 --------- autoload.php
  4. 在线流程图绘制网站draw.io支持的三种存储介质
  5. 蓝桥杯 日志统计 尺取
  6. vue 字符串分割_嗯哼vue组件taginput包教不包会
  7. 阿里云服务器安装onlyoffice_阿里云服务器安装 JDK 8
  8. 查找算法:插值查找算法实现及分析
  9. 汽车之家港股上市发行价定为176.3港元 募资35.6亿港元
  10. php yii 控件分页,Yii实现简单分页的方法
  11. ZOJ 1914 Arctic Network
  12. 最新 | 机械工程领域SCI期刊一览(2020JCR)
  13. Excel数据分析项目——电商数据分析实战
  14. asp.net网上零食销售商城系统
  15. ktv服务器管理系统,小型KTV综合解决方案
  16. 关于sip协议-3PCC-SIPP工具相关及报错
  17. Studio 3T无限试用
  18. 异常值离群点检测算法---箱线图四分位检测
  19. 【修真院web小课堂】如何理解html结构的语义化
  20. 移动App专项性能测试(Android and iOS)

热门文章

  1. 软件著作权算法软件设计说明书_软件著作权设计说明书模板.docx
  2. Pytorch学习笔记(7)——模型放GPU上经常报CUDA错该怎么办
  3. fortran 学习记录2
  4. 维、哈、柯文字符代码及键盘标准
  5. SpringBoot2 结合BeetlSQL开发
  6. C++读写txt文件
  7. 使用SQLyog远程连接数据库
  8. 北风网Winform实战开发上海某房产中介管理系统视频教程
  9. JDK帮助文档(中文版)
  10. Fiddler 手机抓包详解