您的位置:首页 > 其它

定向爬虫实例之中国大学排名定向爬虫

2018-03-19 16:58 267 查看

中国大学排名定向爬虫

 定向爬虫指的是只针对所给的url的页面爬取,不扩展爬取的爬虫。给的例子的网页采用静态页面的方式,是非常好的学习例子。

 本次实例的要求:

输入:大学排名url

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

url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html"


import requests
from bs4 import BeautifulSoup
import os
import re
import bs4


 程序的结构的设计:

从网络上获取大学排名的网页内容getHTMLText()

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

利用数据结构展示并输出结果printUnivList()

 分析页面可以知道这里只用到了BeautifulSoup即可得到想要的数据。每个tr就是一个学校,每个tr中的每个td就是一个属性,利用children和find_all就可以了。

def getHTMLText(url):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def fillUnivList(ulist, html):
soup = BeautifulSoup(html, 'html.parser')
for tr in soup.tbody.children:#这里每一个tr就是一个学校
if isinstance(tr, bs4.element.Tag):#需要过滤掉有可能出现的字符串
tds = tr('td')
ulist.append([tds[0].string, tds[1].string, tds[3].string])
print (len(ulist))
def printUnivList(ulist, num):
'''
{:^x}表示限制输出宽度为x个字符,^表示输出时右对齐。若此宽度小于字符串的实际宽度,以实际宽度输出。
但是如果不足会用西文字符空格补充,西文和中文字符占用不同所以可能会有对其问题
所以可以用chr(12288)来用中文空格
下面这句话的{3}就是format中第三个变量来填充(其实是第四个)
而这里由于有标号就必须要用{X:y}了
'''
tplt = "{0:^10}\t{1:{3}^10}\t{2:^10}"
print (tplt.format("ranking", "name", "score",chr(12288)))
for i in range(num):
u = ulist[i]
print (tplt.format(u[0], u[1], u[2], chr(12288)))
print ("Suc" + str(num))
def main():
unifo = []
url = "http://www.zuihaodaxue.cn/zuihaodaxuepaiming2018.html"
html = getHTMLText(url)
fillUnivList(unifo, html)
printUnivList(unifo, 20)# 20 university
main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: