欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python爬虫(中国大学排名定向爬虫--解析)

程序员文章站 2022-06-08 13:17:23
需要爬取的网页:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html右键单击 -> 查看网页源代码:找到需要爬取的信息的位置:(可以Ctrl+F 搜索 "清华大学" 快速找到位置)自诩观察网页源代码可以发现:所有的大学信息都放在了 标签下每个大学信息都放在了对应的 标签下每个大学的每一条信息都放在了对应的 标签中打开网页:http:/......

需要爬取的网页:http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html

右键单击 -> 查看网页源代码:

python爬虫(中国大学排名定向爬虫--解析)

找到需要爬取的信息的位置:(可以Ctrl+F  搜索 "清华大学"  快速找到位置)

python爬虫(中国大学排名定向爬虫--解析)

自诩观察网页源代码可以发现:

  1. 所有的大学信息都放在了 <tbody> 标签下 
  2. 每个大学信息都放在了对应的 <tr> 标签下 
  3. 每个大学的每一条信息都放在了对应的 <td> 标签中 

打开网页:http://www.zuihaodaxue.cn/robots.txt  检查定向爬虫的可行性,404证明定性爬虫没有被限制

python爬虫(中国大学排名定向爬虫--解析)

编写代码:

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#返回text
    except:
        return ""#异常返回 空

#提取出html代码中的大学信息存储到ulist列表中
def fillUnivList(ulist,html):
    soup=BeautifulSoup(html,"html.parser")#解析 html
    for tr in soup.find('tbody').children:#遍历tbody的孩子标签 每个tr代表一所大学
        if isinstance(tr,bs4.element.Tag): #过滤掉非标签类型的元素
            tds=tr('td')#等价于 tr.find_all('td')
            #存储所有的td标签的内容
            ulist.append([tds[0].string,tds[1].string,tds[3].string])#排名  名称  得分(tds[3])  加入到列表中

#输出ulist列表中前num个大学信息
def printUnivList(ulist,num):
    tplt="{0:^10}\t{1:^10}\t{2:^10}"#输出模板变量
    print(tplt.format("排名","学校名称","总分",chr(12288)))#print的format格式化输出,并填充中文空格,使得界面更加美观
    for i in range(num):
        u=ulist[i]
        print(tplt.format(u[0],u[1],u[2],chr(12288)))

#主函数
def main():
    uinfo=[]
    url="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html"#将要爬取的url
    #调用编写好的功能函数
    html=getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)

main()#调用主函数

程序运行结果:

python爬虫(中国大学排名定向爬虫--解析)

参考课程:中国大学MOOC_北京理工大学_Python网络爬虫与信息提取

本文地址:https://blog.csdn.net/qq_44786250/article/details/107128362