第一个爬虫程序之定向爬取中国大学排名(收获良多,不仅仅是写个程序,更是编程的步骤方法)
第一个爬虫程序之定向爬取中国大学排名(收获良多,不仅仅是写个程序,更是编程的想法)
名称:定向爬取——中国大学排名定向爬取
首先,爬之前,看看你要定向爬取的网站和数据是什么类型的?
- 打开你要爬取网站,看看信息是否是直接写在html中,还是由js语言生成的?从而确定你爬取的方式
如下图,很容易的看到,信息是直接写在html页面中的,直接爬取html页面,然后将信息筛选出来就行了
- 看到你要的信息在一堆的标签中,要找到你需要的信息在哪一个标签中,简单的分析一下这个标签树!看着有点烦,直接用response.prettify()输出看过去更直观,如下图
如下图,咱们从清华看起(谁叫它第一,虽然我的学校和清华就差了一个字,我也想拿他示范,可它垫底,不明显)。
- 清华的数据模块和北大的数据模块明显的用了一个< tr >…< /tr >的标签相互分割
- 每一个数据模块里面的一些小的数据又是用< td > … < /td >标签进行包裹
- 总结一下:我们要找的数据就是大学名称和排名,以及所在地区。就主要识别两种标签< tr > … < /tr >和< td >…< /td >
然后,程序的结构设计
- 根据你知道的爬取网页的常规步骤和输出的要求,如下图,获取信息,然后将信息保存在相关的框架中,然后按照下图的格式进行输出。显而易见的,就是将信息保存在对应的列表中
故将程序分为三个步骤,每一步都确定一个方法名
- 从网络上获取大学排名网页内容——getHTMLText()
- 提取网页信息中的信息到合适的数据结构中——fillUnivList()
- 利用数据结构展示并输出结果——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)
- 虽然个人觉得不是很重要,但是好歹是一个知识点可以积累一下
总结
- 确实搭建好了对应的框架,确定好了程序的各个参数,编程的效率确实高了很多,根据一部分来写全部
- 总体来看,程序的美观程度确实高了很多,应当在方法和分析上多加练习
第一个爬虫程序之定向爬取中国大学排名(收获良多,不仅仅是写个程序,更是编程的步骤方法)相关推荐
- python中国大学排名爬虫写明详细步骤-Python爬虫——定向爬取“中国大学排名网”...
内容整理自中国大学MOOC--北京理工大学-蒿天-Python网络爬虫与信息提取 相关实战章节 我们预爬取的url如下 网页节选 在浏览器中读取网页源代码 可以 发现表格数据信息是直接写入HTML页面 ...
- Python爬虫系列(二):爬取中国大学排名丁香园-用户名和回复内容淘宝品比价
Python爬虫系列(二):爬取中国大学排名&丁香园-用户名和回复内容&淘宝品比价 目录 Python爬虫系列(二):爬取中国大学排名&丁香园-用户名和回复内容&淘宝品 ...
- 爬虫爬取中国大学排名top100并简单可视化分析
爬虫爬取中国大学排名top100并简单可视化分析. 目标链接 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html 实践环境 pycharm201 ...
- Python爬取中国大学排名,并且保存到excel中
前言 以下文章来源于数据分析和Python ,作者冈坂日川 今天发的是python爬虫爬取中国大学排名,并且保存到excel中,当然这个代码很简单,我用了半小时就写完了,我的整体框架非常清晰,可以直接 ...
- python中国最好大学排名_国内大学排名如何?用Python爬取中国大学排名
国内大学排名如何?用Python爬取中国大学排名准备阶段需要的库robots协议上代码代码框架*获取url信息*解析信息*输出数据*主函数结果 准备阶段 新手入门,不喜勿喷,这篇文章的内容其实也是在中 ...
- 爬取中国大学排名并以csv格式存储
爬取中国大学排名并以csv格式存储 import requests from bs4 import BeautifulSoup import bs4def get_content(url):try:u ...
- Python练习-爬虫(附加爬取中国大学排名)
Python与网页处理 Python 语言发展中有一个里程碑式的应用事件,即美国谷歌(GOOGLE)公司在搜索引擎后端采用Python 语言进行链接处理和开发,这是该语言发展成熟的重要标志.Pytho ...
- python爬虫分析大学排名_Python爬虫之爬取中国大学排名(BeautifulSoup库)
image.png 我们需要打开网页源代码,查看此网页的信息是写在html代码中,还是由js文件动态生成的,如果是后者,那么我们目前仅仅采用requests和BeautifulSoup还很难爬取到排名 ...
- 爬虫爬取中国大学排名
爬取该网站的排名并输出 首先查看网页的源代码 找到大学排名所在的位置 然后写代码 import requests from bs4 import BeautifulSoup import bs4 de ...
最新文章
- decimal类型保留两位小数
- 在公司如何远程控制家中电脑
- elixir 高可用系列(五) Supervisor
- 100块钱买100只鸡php,使用JS计算买100只鸡问题
- JAVA两类比较器的区别(Comparable,Comparator)
- 安装JDK 9与使用jshell
- java home bin java home jre bin_Tomcat 启动找不到配置好的 $JAVA_HOME和$JRE_HOME 变量?
- AndroidStudio安卓原生开发_activity关闭的时候把数据传递给上一个activity---Android原生开发工作笔记93
- domain name
- Hi3518E_V200 SDK编译笔记 第一季
- 从wireshark 抓包中的导出 H.264 变成可用暴风直接播放的H264 裸码流文件
- 5960 差分约束系统
- poj3182(bfs)
- 安装caffe依赖库时,出现“您希望继续执行吗? [Y/n] y 中止。”的解决办法
- 在visio中插入数学公式
- LENOVO_WIN7_UM_32_ZH_CN_RDVD.iso
- python datetime、date、time、string、timedelta等详解(格式转换)
- Windows下C语言实现HTTP客户端
- 【编程题】【Scratch二级】2021.09 画正多边形
- 机器学习基石HOW BETTER部分(3)
热门文章
- magnitude和amplitude response的区别
- 波浪 海浪免抠元素素材推荐 精品 小众
- ZABBIX 监控原理及架构
- 密码学之仿射加密解密算法
- webpack实现懒加载原理以及如何使用懒加载优化项目
- 带字符串空格的转16进制
- 记录Win10+Ubuntu18.04(引导Win10启动)双系统迁移到SSD,Ubuntu迁移成功但丢失Win10启动项
- partprobe 命令
- 双色球(投注号码由6个红色球号码和1个蓝色球号码组成。红色号码从1-33中选择;蓝色球号码从1-16中选择。)
- 深入剖析Glide源码-4.15版本(二)