网络爬虫:中国大学排名定向爬虫
中国大学排名定向爬虫(已更新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 路线实现了中国大学排名定向爬虫。
对中英文混排输出问题进行优化。
网络爬虫:中国大学排名定向爬虫相关推荐
- python中国大学排名爬虫写明详细步骤-python网络爬虫入门实例:中国大学排名定向爬虫...
中国大学排名定向爬虫的 设计和实现 一.环境安装: 1.选择一个适合自己的IDE(以下代码用Jupyter Notebook编写) 2.打开cmd,安装requests库和beautifulsoup4 ...
- 嵩天《Python网络爬虫与信息提取》实例2:中国大学排名定向爬虫
在介绍完requests库和robots协议后,嵩天老师又重点介绍了如何通过BeautifulSoup库进行网页解析和信息提取.这一部分就是在前面内容的基础上,综合运用requests库和Beauti ...
- python爬虫 2021中国大学排名定向爬虫
最近的几篇博客来源是之前我下载的一个课件 在网上搜索了一下是一下这个课程的,可以结合视频博客以及代码去更好地学习 Python网络爬虫与信息提取_北京理工大学_中国大学MOOC(慕课) (icours ...
- 学习笔记:中国大学排名定向爬虫
1. 学习视频 中国大学排名定向爬虫: https://www.bilibili.com/video/BV1pt41137qK?p=33&spm_id_from=pageDriver 2. 程 ...
- 嵩天老师的中国大学排名定向爬虫实例-萌新教程
萌新实例,大佬们可以右上角了, 萌新可以看看互相学习 我是在是学习了<Python简明教程>还有廖雪峰老师的<Python3教程>后,才发现嵩天老师的视频的,简洁.生动.有趣, ...
- 中国大学排名定向爬虫以及淘宝商品爬虫参考嵩天老师Python爬虫课程遇到的问题及解决
首先附上课程中程序,无法正常运行 把2016年的url更改为今年的url:http://www.shanghairanking.cn/rankings/bcur/2020 代码如下: import r ...
- 网络爬虫——中国大学排名数据抓取
网络爬虫--中国大学排名数据抓取 目标网址 中国大学排名网:http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html 全球有很多份大学排名,这里以上 ...
- 中国大学排名的爬虫实战
中国大学排名的爬虫实战(结合信息组织与提取,两种方式实现) 功能描述 输入:大学排名url链接 输出:大学排名信息的屏幕输出(排名,大学名称,总分) 技术路线:requests-bs4 定向爬虫:仅对 ...
- 中国大学排名python爬虫_Python爬虫入门实例三之爬取软科中国大学排名
写在前面 这个例子是笔者今天在中国大学MOOC(嵩天 北京理工大学)上学习的时候写下来的.但是很快写完之后我就发现不对劲,首先课程给的例子是中国好大学网站的排名,但是现在这个网站已经重构了,原来的链接 ...
- python爬虫分析大学排名_Python爬虫之爬取中国大学排名(BeautifulSoup库)
image.png 我们需要打开网页源代码,查看此网页的信息是写在html代码中,还是由js文件动态生成的,如果是后者,那么我们目前仅仅采用requests和BeautifulSoup还很难爬取到排名 ...
最新文章
- WINSOCK网络函数
- Zend framework重定向的方法
- CI配置文件 --------- autoload.php
- 在线流程图绘制网站draw.io支持的三种存储介质
- 蓝桥杯 日志统计 尺取
- vue 字符串分割_嗯哼vue组件taginput包教不包会
- 阿里云服务器安装onlyoffice_阿里云服务器安装 JDK 8
- 查找算法:插值查找算法实现及分析
- 汽车之家港股上市发行价定为176.3港元 募资35.6亿港元
- php yii 控件分页,Yii实现简单分页的方法
- ZOJ 1914 Arctic Network
- 最新 | 机械工程领域SCI期刊一览(2020JCR)
- Excel数据分析项目——电商数据分析实战
- asp.net网上零食销售商城系统
- ktv服务器管理系统,小型KTV综合解决方案
- 关于sip协议-3PCC-SIPP工具相关及报错
- Studio 3T无限试用
- 异常值离群点检测算法---箱线图四分位检测
- 【修真院web小课堂】如何理解html结构的语义化
- 移动App专项性能测试(Android and iOS)