Python爬虫——定向爬取“中国大学排名网”

内容整理自中国大学MOOC——北京理工大学-蒿天-Python网络爬虫与信息提取 相关实战章节

我们预爬取的url如下

http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html

网页节选

在浏览器中读取网页源代码

可以 发现表格数据信息是直接写入HTML页面信息中,所以我们可以直接采取定向爬虫操作。

我们的整体设计思路如下:

1.从网络上获取大学排名网络内容

2.提取网页内容中信息到合适的数据结构

3.利用数据结构展示并输出结果

仔细观察可以发现,HTML的结构中,每个<tr>标签包含一所大学的全部信息,而一组<tr>内,大学的校名、省市、名次等信息由<td>标记

所有<tr>均为<tbody>的子节点

根据设计思路几网页结构信息,代码如下

 1 import requests
 2 from bs4 import BeautifulSoup
 3 import bs4
 4
 5 def getHTMLText(url):  #获取url信息
 6     try:
 7         r = requests.get(url,timeout = 30)
 8         r.raise_for_status()
 9         r.encoding = r.apparent_encoding
10         return r.text
11     except:
12         return ""
13
14 def fillUnivList(ulist,html):  #将一个html页面放入一个列表
15     soup = BeautifulSoup(html,"html.parser")
16     #每个<tr>包含一所大学的所有信息
17     #所有<tr>信息包在<tbody>中
18     for tr in soup.find(‘tbody‘).children:
19         if isinstance(tr,bs4.element.Tag):  #过滤掉非标签信息,以取出包含在<tr>标签中的bs4类型的Tag标签
20             tds = tr(‘td‘)  #等价于tr.find_all(‘td‘),在tr标签中找td标签内容
21             # print(tds)
22             ulist.append([tds[0].string,tds[1].string,tds[3].string,tds[2].string])
23             #td[0],[1],[3],[2],分别对应每组td信息中的排名,学校名称,得分,区域。将这些信息从摘取出来
24
25
26 def printUnivList(ulist,num):  #将列表信息输出
27     print("{:^10}\t{:^6}\t{:^10}\t{:^10}".format("排名","大学名称","得分","省市"))
28     for i in range(num):
29         u = ulist[i]
30         print("{:^10}\t{:^6}\t{:^10}\t{:^10}".format(u[0],u[1],u[2],u[3]))
31
32 if __name__ == ‘__main__‘:
33     uinfo = []
34     url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html"
35     html = getHTMLText(url)
36     fillUnivList(uinfo,html)
37     printUnivList(uinfo,20)  #暂时只看前20所学校

输出信息如下

其中第27行处,{:^10}为Python的格式化输出,30表示输出宽度约束为30个字符,^表示输出时右对齐,若宽度小于字符串的实际宽度,以实际宽度输出

为了使输出结果更整齐,我们可以对于输出部分进行优化

我们在输出时用到了format()方法,这样就会产生一个问题:当中文字符宽度不够时,方法会默认采用西文字符填充。而中西文字符宽度并不相同,这就是导致每行字符无法一一对齐的原因。

这里我们就可以设置format()填充方式为,采用中文字符的空格填充,即chr(12288)

于是我们对printUnivList()方法做如下修改

def printUnivList(ulist,num):  #将列表信息输出
    tplt = "{0:^10}\t{1:{4}^10}\t{2:^10}\t{3:^10}"  #{4}表示需要用到format方法中,从0伊始定义的第[4]个变量
    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)))

输出结果如下

这样就对齐了

原文地址:https://www.cnblogs.com/fcbyoung/p/12297037.html

时间: 2024-09-30 09:32:36

Python爬虫——定向爬取“中国大学排名网”的相关文章

使用selenium + chrome爬取中国大学Mooc网的计算机学科的所有课程链接

目的:使用selenium + chrome爬取中国大学Mooc网计算机学科的所有的课程链接列表 思路:找到每个分页的节点属性为class="m-course-list" 的div元素,再找到该元素下面的类属性为class = "u-clist f-bg f-cb f-pr j-href ga-click"的div元素的属性data-href的值,使用xpath获取. 难点:在网页源码里面,是看不到相关的课程链接信息,点击分页,发现地址栏的url一直都在变,但改变u

python爬取中国大学排名

教程来自:[Python网络爬虫与信息提取].MOOC. 北京理工大学 目标:爬取最好大学网前50名大学 代码如下: 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 return r.text exce

爬取中国大学排名

我们需要爬取2019年中国内地的大学排名,这里以物理学科为例,http://www.zuihaodaxue.cn/BCSR/wulixue2019.html. 这个页面比较简单爬取难度不大,这里我们使用python的requests,bs4,BeautifulSoup库,关于BeatutifulSoup库的文档可以在这个网站查询https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/ 先定义一个get函数来爬取相关信息 def get(url): tr

【Python爬虫】从html里爬取中国大学排名

from bs4 import BeautifulSoupimport requestsimport bs4 #bs4.element.Tag时用的上#获取网页页面HTMLdef getHTMLText(url): try: r = requests.request("get", url,timeout=30) r.raise_for_status() #如不是200报错 r.encoding = r.apparent_encoding #猜测编码然后赋予给解码 编码模式 demo =

[Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

一. 文章介绍 前一篇文章"[python爬虫] Selenium爬取新浪微博内容及用户信息"简单讲述了如何爬取新浪微博手机端用户信息和微博信息. 用户信息:包括用户ID.用户名.微博数.粉丝数.关注数等. 微博信息:包括转发或原创.点赞数.转发数.评论数.发布时间.微博内容等. 它主要通过从文本txt中读取用户id,通过"URL+用户ID" 访问个人网站,如柳岩: http://weibo.cn/guangxianliuya 因为手机端数据相对精简简单,所以采用输

[Python爬虫] Selenium爬取新浪微博移动端热点话题及评论 (下)

这篇文章主要讲述了使用python+selenium爬取新浪微博的热点话题和评论信息.其中使用该爬虫的缺点是效率极低,傻瓜式的爬虫,不能并行执行等,但是它的优点是采用分析DOM树结构分析网页源码并进行信息爬取,同时它可以通过浏览器进行爬取中间过程的演示及验证码的输入.这篇文章对爬虫的详细过程就不再论述了,主要是提供可运行的代码和运行截图即可.希望文章对你有所帮助吧~ 参考文章 [python爬虫] Selenium爬取新浪微博内容及用户信息 [Python爬虫] Selenium爬取新浪微博客户

Python爬虫入门 | 爬取豆瓣电影信息

这是一个适用于小白的Python爬虫免费教学课程,只有7节,让零基础的你初步了解爬虫,跟着课程内容能自己爬取资源.看着文章,打开电脑动手实践,平均45分钟就能学完一节,如果你愿意,今天内你就可以迈入爬虫的大门啦~好啦,正式开始我们的第二节课<爬取豆瓣电影信息>吧!啦啦哩啦啦,都看黑板~1. 爬虫原理1.1 爬虫基本原理听了那么多的爬虫,到底什么是爬虫?爬虫又是如何工作的呢?我们先从"爬虫原理"说起.爬虫又称为网页蜘蛛,是一种程序或脚本.但重点在于:它能够按照一定的规则,自动

(参考)爬虫5-爬取中国大学排名情况

最好大学网 2018大学排名 功能描述: 输入:大学排名url链接 输出:大学排名信息的屏幕输出(排名,大学名称,总分) 技术路线:requests库和bs4库 定向爬虫:仅对输入的URL进行爬取,不扩展爬取 步骤: 1.输入url网址,查看源代码,发现信息都在HTML文件中 2.打开http://www.zuihaodaxue.cn/robots.txt,发现:not found,说明没有对爬取进行robots协议限制,可以进行爬取 3.程序的结构设计: 步骤1,从网络上获取大学排名网页内容,

[python爬虫] Selenium爬取内容并存储至MySQL数据库

前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息.通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的.这篇文章主要讲述通过Selenium爬取我的个人博客信息,然后存储在数据库MySQL中,以便对数据进行分析,比如分析哪个时间段发表的博客多.结合WordCloud分析文章的主题.文章阅读量排名等.        这是一篇基础性的文章,希望对您有所帮助,如果文章中出现错误或不足之处,还请海涵.下一篇文章会简单讲解数据分析的过程. 一.