第一个爬虫程序之定向爬取中国大学排名(收获良多,不仅仅是写个程序,更是编程的想法)

名称:定向爬取——中国大学排名定向爬取

首先,爬之前,看看你要定向爬取的网站和数据是什么类型的?
  • 打开你要爬取网站,看看信息是否是直接写在html中,还是由js语言生成的?从而确定你爬取的方式

如下图,很容易的看到,信息是直接写在html页面中的,直接爬取html页面,然后将信息筛选出来就行了

  • 看到你要的信息在一堆的标签中,要找到你需要的信息在哪一个标签中,简单的分析一下这个标签树!看着有点烦,直接用response.prettify()输出看过去更直观,如下图

如下图,咱们从清华看起(谁叫它第一,虽然我的学校和清华就差了一个字,我也想拿他示范,可它垫底,不明显)。

  • 清华的数据模块和北大的数据模块明显的用了一个< tr >…< /tr >的标签相互分割
  • 每一个数据模块里面的一些小的数据又是用< td > … < /td >标签进行包裹

  • 总结一下:我们要找的数据就是大学名称和排名,以及所在地区。就主要识别两种标签< tr > … < /tr >和< td >…< /td >
然后,程序的结构设计
  • 根据你知道的爬取网页的常规步骤和输出的要求,如下图,获取信息,然后将信息保存在相关的框架中,然后按照下图的格式进行输出。显而易见的,就是将信息保存在对应的列表中

  • 故将程序分为三个步骤,每一步都确定一个方法名

    1. 从网络上获取大学排名网页内容——getHTMLText()
    2. 提取网页信息中的信息到合适的数据结构中——fillUnivList()
    3. 利用数据结构展示并输出结果——printUnivList()
  • 怎么讲那,以前编程那是胡来,上来就是干,没有一点逻辑性,往往最后总是不停的debug浪费了太多的时间,个人认为应该一开始就确定好程序的结构。

接着,开始程序的编写
  • 第一步,多的不写,统揽全局走一波

    • 确定每一个方法的参数类型和返回类型
    • 在main方法中将所有的方法联系起来
# 获取html的方法
def getHTMLtext(url):return ""# 将获取的html信息提取,并将之填写到对应的表格中
def fillUnivList(text):univList = list()return univList# 将已经填写好的数据进行输出,num确定你要输出的列表的项数
def printUnivList(alist,num):print(alist)# main方法,将所有方法进行统揽,进而形成一个完整的程序
def main():url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2020.html"text = getHTMLtext(url)uniList = fillUnivList(text)printUnivList(uniList,40)# 总的调用
main()
  • 第二步,逐步完善每一个方法

    • 完善getHTMLtext()
    • 在此不做详解,详见之前的一篇博客
# 获取html的方法
def getHTMLtext(url):try:r = requests.get(url)# 获取response对象r.raise_for_status()# 判定是否已经爬取成功r.encoding = r.apparent_encoding# 将对应的编码集进行转化return r.textexcept:return ""
  • 完善fillUnivList()
# 将获取的html信息提取,并将之填写到对应的表格中
def fillUnivList(text):univList = list()soup = BeautifulSoup(text,'html.parser')for tr in soup.find('tbody').children:# 找到包含所有的大学信息的tbody标签,然后遍历对应的儿子标签if isinstance(tr,bs4.element.Tag):# 注意一定要判定一下,因为tbody的儿子标签中有非标签的类型tds = tr('td')# 获取tr中的所有的大学的信息univList.append([tds[0].string,tds[1].string,tds[2].string])# 对应的td分别是学校名,排名,分数等# 注意一定是将对应的字符串信息传入对应的列表中,不是标签return univList
  • 完善printUnivList()
  # 将已经填写好的数据进行输出
def printUnivList(alist,nums):print("{:^10}\t{:^8}\t{:^15}".format("学校名称","排名","所在地区"))for i in range(nums):print("{:^10}\t{:^13}\t{:^10}".format(alist[i][0],alist[i][1],alist[i][2]))
代码总和
import requests
from bs4 import BeautifulSoup
import bs4# 获取html的方法
def getHTMLtext(url):try:r = requests.get(url)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""# 将获取的html信息提取,并将之填写到对应的表格中
def fillUnivList(text):univList = list()soup = BeautifulSoup(text,'html.parser')for tr in soup.find('tbody').children:if isinstance(tr,bs4.element.Tag):tds = tr('td')univList.append([tds[0].string,tds[1].string,tds[2].string])return univList# 将已经填写好的数据进行输出
def printUnivList(alist,nums):print("{:^10}\t{:^10}\t{:^10}".format("学校名称","排名","总和评分"))for i in range(nums):print("{:^10}\t{:^10}\t{:^10}".format(alist[i][0],alist[i][1],alist[i][2]))print(alist)# main方法,将所有方法进行统揽,进而形成一个完整的程序
def main():url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2020.html"text = getHTMLtext(url)uniList = fillUnivList(text)printUnivList(uniList,40)# 总的调用
main()

运行结果

代码的改良和优化——主要是针对输出排版的优化和改良
  • format函数的内容,其中填充默认采用的是英文的空格,如果输出汉字,不能够很好的对齐。中文空格和英文空格的宽度不同,不能够很好的居中

  • 解决办法:专门说明填充字符的选择——采用chr(12288)指定的中文字符空格填充
  • 代码
def printUnivList(alist,nums):tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"print(tplt.format("学校名称","排名","所在地区",chr(12288)))for i in range(nums):print(tplt.format(alist[i][0],alist[i][1],alist[i][2],chr(12288)))print(alist)
  • 虽然个人觉得不是很重要,但是好歹是一个知识点可以积累一下
总结
  • 确实搭建好了对应的框架,确定好了程序的各个参数,编程的效率确实高了很多,根据一部分来写全部
  • 总体来看,程序的美观程度确实高了很多,应当在方法和分析上多加练习

第一个爬虫程序之定向爬取中国大学排名(收获良多,不仅仅是写个程序,更是编程的步骤方法)相关推荐

  1. python中国大学排名爬虫写明详细步骤-Python爬虫——定向爬取“中国大学排名网”...

    内容整理自中国大学MOOC--北京理工大学-蒿天-Python网络爬虫与信息提取 相关实战章节 我们预爬取的url如下 网页节选 在浏览器中读取网页源代码 可以 发现表格数据信息是直接写入HTML页面 ...

  2. Python爬虫系列(二):爬取中国大学排名丁香园-用户名和回复内容淘宝品比价

    Python爬虫系列(二):爬取中国大学排名&丁香园-用户名和回复内容&淘宝品比价 目录 Python爬虫系列(二):爬取中国大学排名&丁香园-用户名和回复内容&淘宝品 ...

  3. 爬虫爬取中国大学排名top100并简单可视化分析

    爬虫爬取中国大学排名top100并简单可视化分析. 目标链接 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html 实践环境 pycharm201 ...

  4. Python爬取中国大学排名,并且保存到excel中

    前言 以下文章来源于数据分析和Python ,作者冈坂日川 今天发的是python爬虫爬取中国大学排名,并且保存到excel中,当然这个代码很简单,我用了半小时就写完了,我的整体框架非常清晰,可以直接 ...

  5. python中国最好大学排名_国内大学排名如何?用Python爬取中国大学排名

    国内大学排名如何?用Python爬取中国大学排名准备阶段需要的库robots协议上代码代码框架*获取url信息*解析信息*输出数据*主函数结果 准备阶段 新手入门,不喜勿喷,这篇文章的内容其实也是在中 ...

  6. 爬取中国大学排名并以csv格式存储

    爬取中国大学排名并以csv格式存储 import requests from bs4 import BeautifulSoup import bs4def get_content(url):try:u ...

  7. Python练习-爬虫(附加爬取中国大学排名)

    Python与网页处理 Python 语言发展中有一个里程碑式的应用事件,即美国谷歌(GOOGLE)公司在搜索引擎后端采用Python 语言进行链接处理和开发,这是该语言发展成熟的重要标志.Pytho ...

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

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

  9. 爬虫爬取中国大学排名

    爬取该网站的排名并输出 首先查看网页的源代码 找到大学排名所在的位置 然后写代码 import requests from bs4 import BeautifulSoup import bs4 de ...

最新文章

  1. decimal类型保留两位小数
  2. 在公司如何远程控制家中电脑
  3. elixir 高可用系列(五) Supervisor
  4. 100块钱买100只鸡php,使用JS计算买100只鸡问题
  5. JAVA两类比较器的区别(Comparable,Comparator)
  6. 安装JDK 9与使用jshell
  7. java home bin java home jre bin_Tomcat 启动找不到配置好的 $JAVA_HOME和$JRE_HOME 变量?
  8. AndroidStudio安卓原生开发_activity关闭的时候把数据传递给上一个activity---Android原生开发工作笔记93
  9. domain name
  10. Hi3518E_V200 SDK编译笔记 第一季
  11. 从wireshark 抓包中的导出 H.264 变成可用暴风直接播放的H264 裸码流文件
  12. 5960 差分约束系统
  13. poj3182(bfs)
  14. 安装caffe依赖库时,出现“您希望继续执行吗? [Y/n] y 中止。”的解决办法
  15. 在visio中插入数学公式
  16. LENOVO_WIN7_UM_32_ZH_CN_RDVD.iso
  17. python datetime、date、time、string、timedelta等详解(格式转换)
  18. Windows下C语言实现HTTP客户端
  19. 【编程题】【Scratch二级】2021.09 画正多边形
  20. 机器学习基石HOW BETTER部分(3)

热门文章

  1. magnitude和amplitude response的区别
  2. 波浪 海浪免抠元素素材推荐 精品 小众
  3. ZABBIX 监控原理及架构
  4. 密码学之仿射加密解密算法
  5. webpack实现懒加载原理以及如何使用懒加载优化项目
  6. 带字符串空格的转16进制
  7. 记录Win10+Ubuntu18.04(引导Win10启动)双系统迁移到SSD,Ubuntu迁移成功但丢失Win10启动项
  8. partprobe 命令
  9. 双色球(投注号码由6个红色球号码和1个蓝色球号码组成。红色号码从1-33中选择;蓝色球号码从1-16中选择。)
  10. 深入剖析Glide源码-4.15版本(二)