美文网首页
爬取软科中国最好大学排名2015

爬取软科中国最好大学排名2015

作者: 爱上鱼的猫_产品狗 | 来源:发表于2020-04-13 15:34 被阅读0次

这个实例是学习爬虫入门的经典案例,我看的是北京理工大学 嵩 天老师的教程。
网上讲解这个实例的课程有好多,就不再叙述了。感兴趣的可以搜下。
最终实现代码如下:

from bs4 import BeautifulSoup
import requests
import bs4

#获取采集网页数据
def getHTMLText(url): # 输入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") # 采用html.parser解析器,把使用html.parser解析过的soup保存到soup中,将原代码已经tag化了。
    for tr in soup.find('tbody').children: # 收集tbody标签的tr子标签,这里一定是子标签,而且必须是通过<XXX></XXX>这样闭合的标签。
        if isinstance(tr,bs4.element.Tag): # 过滤tr标签如果非bs4库的tag类型
            tds=tr('td')#tr.find_all('td')查找tr标签下的td子标签,这里也是一定是子标签,孙标签没试。
            ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string])#将收集到的字段信息保存入ulist列表中,能收集到几个字段就写几个,不然会有超出边界报错。

#格式化输出
def printUnivList(ulist,num): # 定义函数并输入两个形参,将数据放到ulist中,num控制输出数据的数量
    print("{0:^8}\t{1:{3}^10}\t{2:^10}".format("排名","学校名称","总分",chr(12288))) # 打印表头,{1:{3}^10}\t的意思是输出列表第2位的内容,居中对齐,占用10个字符,字符采用第4个位置定义的字符填充
    for i in range(num):#循环输出
        u=ulist[i]#将ulist中的内容输出到u数组中
        print("{0:^10}\t{1:{3}^10}\t{2:^10}".format(u[0],u[1],u[3],chr(12288)))#输出排名,学校,总分信息 ^距中对齐

#主函数
def main():
    uinfo=[]
    url='http://www.zuihaodaxue.cn/zuihaodaxuepaiming2015_0.html'
    html=getHTMLText(url)#获取采集网页数据
    fillUnivList(uinfo,html)#获取数据处理
    printUnivList(uinfo,20)#格式化输出,获取前20位信息
main()

对应的看网页代码的标注,只要获取的这段搞懂了,其它输出和获取网页内容很基础


获取数据并处理.png

相关文章

网友评论

      本文标题:爬取软科中国最好大学排名2015

      本文链接:https://www.haomeiwen.com/subject/pyogmhtx.html