爬取全国高校数据 (高校名称,高校所在地,高校类型,高校性质,高校特色,高校隶属,学校网站)

爬取全国高校数据

网站:

运行下面代码得到网站.

import base64
# 解码
website = base64.b64decode('IGh0dHA6Ly9jb2xsZWdlLmdhb2thby5jb20vc2NobGlzdC8='.encode('utf-8'))
print(website)

分析:

我们需要爬取的字段,高校名称,高校所在地,高校类型,高校性质,高校特色,高校隶属,学校网站。

在这里插入图片描述

该网页静态网页,内容就在网页里面,一共107页数据,向每一页发送请求,直接使用Xpath解析的页面数据即可拿到我们想要的数据。在这里插入图片描述

在这里插入图片描述

Xpath提取字段:

在这里插入图片描述

然后点击我们需要提取的字段。

在这里插入图片描述

在这里插入图片描述

//*[@id=“wrapper”]/div[4]/div[1]/dl[1]/dt/strong/a , 然后我们看一下页面结构 ,对Xpath进行修改即可。

在这里插入图片描述

我们不难发现每一个dl标签就是一个学校的所有信息,这个学校的信息的Xpath:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl

在这里插入图片描述

学校名称:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//strong/@title

在这里插入图片描述

然后我们就可以得到所有的信息,xpath如下:

高校所在地:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[1]/text()

高校类型:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[3]/text()

高校性质:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[5]/text()

高校隶属:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[4]/text()

高校网站:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[6]/text()

是否211:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[2]/span[1]/text()

是否985:

//div[@class="cont_l in"]//div[@class="scores_List"]/dl//ul/li[2]/span[2]/text()

但是有一个问题:如果某个学校是985不是211,则对应的211标签提取就会报错,我们需要异常处理,如果有这个标签怎么样,没有怎么样。

在这里插入图片描述

爬虫代码:
import requests
from lxml import etree
import time
import random
import pandas as pd
from fake_useragent import UserAgent
import os

def crawl(pages, filename, start_page=1, end_page=None):
    # 设置请求头信息
    ua = UserAgent()
    headers = {'User-Agent': ua.random}
    # 获取网页内容
    url_template = 'http://college.gaokao.com/schlist/p{}/'
    data = []
    for page in range(start_page, min(end_page or pages, pages) + 1):
        url_page = url_template.format(page)
        response = requests.get(url_page, headers=headers).text
        # 设置请求时间间隔,防止被反爬虫
        time.sleep(random.uniform(1, 3))
        # 解析网页内容,提取需要的信息
        html = etree.HTML(response)
        rows = html.xpath('//div[@class="cont_l in"]//div[@class="scores_List"]/dl')

        for row in rows:
            name = row.xpath('.//strong/@title')[0]  # 获取的每一个都是列表 只有一个元素

            location = row.xpath('.//ul/li[1]/text()')[0]
            location = location.split(':')[1]  # 将字符串按照冒号分割成两部分,获取第二部分

            school_type = row.xpath('.//ul/li[3]/text()')[0]
            school_type = school_type.split(':')[1]

            school_property = row.xpath('.//ul/li[5]/text()')[0]
            school_property = school_property.split(':')[1]

            school_affiliation = row.xpath('.//ul/li[4]/text()')[0]
            school_affiliation = school_affiliation.split(':')[1]

            website = row.xpath('.//ul/li[6]/text()')[0]
            website = website.split(':')[1]
            # feature_211= row.xpath('.//ul/li[2]/span[1]/text()')[0]
            try:
                feature_211 = row.xpath('.//ul/li[2]/span[1]/text()')[0]
            except IndexError:
                feature_211 = "0"

            try:
                feature_985 = row.xpath('.//ul/li[2]/span[2]/text()')[0]
            except IndexError:
                feature_985 = "0"
            data.append(
                [name, location, school_type, school_property, school_affiliation, website, feature_211, feature_985])
            # ['北京大学', '北京', '综合', '本科', '教育部', 'www.pku.edu.cn', '211', '985']
            # ['中国矿业大学(徐州)', '江苏', '工科', '本科', '教育部', 'http://www.cumt.edu.cn/', '211', '0']

    # 将提取的数据存储到pandas的DataFrame中
    df = pd.DataFrame(data,
                      columns=['学校名称', '高校所在地', '高校类型', '高校性质', '高校隶属', '学校网站', '是否211',
                               '是否985'])
    # 将DataFrame中的数据保存到CSV文件中
    df.to_csv(filename, mode='a', index=False, header=not os.path.exists(filename))
    # 追加写入数据,如果文件不存在则写入表头


if __name__ == '__main__':
    # 第一次爬取前20页,保存到university.csv文件中
    crawl(pages=20, filename='demo.csv')
    # 第二次爬取21到40页,追加到university.csv文件中
    crawl(pages=40, filename='demo.csv', start_page=21, end_page=40)
    # 第三次爬取41到60页,追加到demo.csv文件中
    crawl(pages=60, filename='demo.csv', start_page=41, end_page=60)
    # # 第四次爬取61到80页,追加到university.csv文件中
    crawl(pages=80, filename='demo.csv', start_page=61, end_page=80)
    # # 第五次爬取81到100页,追加到university.csv文件中
    crawl(pages=100, filename='demo.csv', start_page=81, end_page=100)
    # # 第六次爬取101到107页,追加到university.csv文件中
    crawl(pages=107, filename='demo.csv', start_page=101, end_page=107)

在这里插入图片描述

ok!结束!

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Python高校数据可视化可以使用Pandas和Pyecharts库来实现。首先,使用Pandas库读取数据文件,并使用Counter函数统计不同大学的隶属情况。然后,使用Pyecharts库中的Bar图表来绘制柱状图,展示不同大学隶属情况的数量。最后,使用render_notebook()函数将图表显示在Jupyter Notebook中。 以下是一个示例代码,用于实现Python高校数据可视化: ```python import pandas as pd from collections import Counter from pyecharts import options as opts from pyecharts.charts import Bar from pyecharts.globals import ThemeType # 读取数据 datafile = u'/home/mw/input/university_data1034/' data = pd.read_excel(datafile) # 统计不同大学的隶属情况 attr = data\['隶属于'\].tolist() result = Counter(attr) d = sorted(result.items(), key=lambda x: x\[1\], reverse=True) key = \[i\[0\] for i in d\] value = \[i\[1\] for i in d\] # 绘制柱状图 c = ( Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK)) .add_xaxis(xaxis_data=key) .add_yaxis("数量", y_axis=value) .set_global_opts( title_opts=opts.TitleOpts(title="全国不同大学隶属情况"), datazoom_opts=\[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")\], ) ) # 在Jupyter Notebook中显示图表 c.render_notebook() ``` 这段代码将会读取数据文件,并根据隶属情况统计不同大学的数量。然后,使用Bar图表绘制柱状图,展示不同大学隶属情况的数量。最后,使用render_notebook()函数将图表显示在Jupyter Notebook中。 希望这个示例代码能够帮助到你进行Python高校数据可视化。如果你需要更多关于Python的精彩内容,可以关注我获取更多资料。 #### 引用[.reference_title] - *1* *2* *3* [Python酷炫毕业论文案例,对全国大学数据进行可视化分析](https://blog.csdn.net/yunyun889901/article/details/119889750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

acmakb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值