【数据采集】采集软科大学排名、天气网、学校新闻网的数据 | 文末送书✨

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 目录1. ①1.1 题目1.2 思路1.2.1 发送请求1.2.2 解析网页1.2.3 获取结点1.2.4 数据输出2. ②2.1 题目2.2 思路2.2.1 发送请求2.2.2 解析网页2.2.3 获取结点2.2.4 数据输出3. ③3.1 题目3.2 思路3.2.1 发送请求3.2.2 解析网页3.2.3 获取结点3.2.4 数据输出4. 福利送书

目录

1. ①

1.1 题目

1.2 思路

1.2.1 发送请求

1.2.2 解析网页

1.2.3 获取结点

1.2.4 数据输出

2. ②

2.1 题目

2.2 思路

2.2.1 发送请求

2.2.2 解析网页

2.2.3 获取结点

2.2.4 数据输出

3. ③

3.1 题目

3.2 思路

3.2.1 发送请求

3.2.2 解析网页

3.2.3 获取结点

3.2.4 数据输出

4. 福利送书

1. ①

1.1 题目

用urllib和re库方法定向爬取给定网址的数据


image.png


1.2 思路

1.2.1 发送请求

引入库并且编写请求头

请求头是为了把爬虫包装成浏览器的正常访问。

import urllib.request
import re
header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
}

urllib和requests不同

urllib构造请求头和发送请求是分开的,而requests是封装在一起的。


url = "https://www.shanghairanking.cn/rankings/bcsr/2020/0812"
request = urllib.request.Request(url, headers=header) # 构造请求头
r = urllib.request.urlopen(request)  # 发送请求

1.2.2 解析网页

decode() 是为了解码成中文

replace(’\n’,’’) 是为了把回车去掉,方便后续的正则匹配。

html = r.read().decode().replace('\n','')


1.2.3 获取结点

分析网页

我们很容易找到结点信息,然后观察节点信息的结构。


image.png


使用正则表达式获取总体的节点信息

ranking = re.findall("<td data-v-68e330ae>(.*?)</td></tr>",html)


构造字典来存储数据

uList =[]
for k in ranking:
    u = {
        "rank":"",
        "percent":"",
        "name":"",
        "socre":"",
    }
    name = re.findall("img alt=(.*?) onerror",k) 
    # 匹配出名字
    ranking = re.findall("                        (\d+)                    ",k)
    # 匹配出排名
    socre = re.findall("<td data-v-68e330ae>                        (.*?)                    ",k)
    # 匹配出分数
    u["rank"]=ranking[0]
    u["percent"]=socre[0]
    u["name"]=eval(name[0])
    u["socre"]=socre[1]
    uList.append(u)


19

1.2.4 数据输出

print("2020排名\t全部层次\t学校类型\t\t总分")
for u in uList:
    print("{}\t\t{}\t\t{}\t\t{}\t\t".format(u["rank"],u["percent"],u["name"],u["socre"]))

image.png


2. ②

2.1 题目

用requests和Beautiful Soup库方法设计爬取网址的AQI实时报


image.png


2.2 思路

2.2.1 发送请求

导入库

import requests
from bs4 import BeautifulSoup

构造请求头

headers = {
    'Connection': 'keep-alive',
    'sec-ch-ua': '"Chromium";v="94", "Google Chrome";v="94", ";Not A Brand";v="99"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'none',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-User': '?1',
    'Sec-Fetch-Dest': 'document',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}


发送请求

response = requests.get('https://datacenter.mee.gov.cn/aqiweb2/', headers=headers)


2.2.2 解析网页

使用BeautifulSoup解析器进行解析,解析成lxml格式

soup = BeautifulSoup(response.content,"lxml")

解析器的作用是为了把请求到的字符串重新解析成lxml前端树的格式,方便获取器进行节点的Find等操作。


2.2.3 获取结点

分析网页

我们可以看到我们所想要的节点信息都是在这个在td标签下的,所以我们只需要找到所有的td标签即可。


image.png


找到所有的td

tdTmp = soup.find_all('td')


结果我们打印结果,我们发现,数据除了text格式之后,还可能存在\t\n\r这些空格,所以要进行一个清洗替换


image.png


数据清洗

把\r\t\n这些空格回车字符进行清洗替换


for i in range(len(tdTmp)):
    info=tdTmp[i].text
    if len(info)>10:
        info = info.replace('\r', '')  
        info = info.replace('\n', '')
        info = info.replace('\t', '')
        somethingList.append(info)
    if count < 8:
        count += 1
        td.append(info)
    else:
        tds.append(td)
        count=0
        td = []

2.2.4 数据输出

一样采用字典键值对去存储数据。


num=0
for td in tds:
    cityWeather={
        "num":"",
        "city":"",
        "AQI":"",
        "PM2.5":"",
        "So2":"",
        "No2":"",
        "Co":"",
        "something":"",
    }
    cityWeather["num"]=num+1
    cityWeather["city"]=td[0]
    cityWeather["AQI"]=td[1]
    cityWeather["PM2.5"]=td[2]
    cityWeather["So2"]=td[4]
    cityWeather["No2"]=td[5]
    cityWeather["Co"]=td[6]
    cityWeather["something"]=somethingList[num]
    num+=1
    infoList.append(cityWeather)
    print(cityWeather)


结果输出


print("序号 \t 城市 \t\t AQI \t PM2.5 \t So2 \t Co \t 首要污染物")
for k in infoList:
    print("{} \t {} \t {} \t {} \t {} \t {} \t {}".format(k["num"],k["city"],k["AQI"],k["PM2.5"],k["So2"],k["Co"],k["something"]))

image.png


3. ③

3.1 题目

要求:使用urllib和requests和re爬取一个给定网页

爬取该网站下的所有图片

输出信息:将自选网页内的所有jpg文件保存在一个文件夹中


3.2 思路

3.2.1 发送请求

引入库

import requests,re
import urllib


构造请求头

headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}
url = 'http://news.fzu.edu.cn/'

发送请求

urllib:


request = urllib.request.Request(url, headers=headers)
r = urllib.request.urlopen(request)

requests:


response = requests.get(url, headers=headers, verify=False)

3.2.2 解析网页

urllib:


html = r.read().decode().replace('\n','')

requests:


html = response.content().replace('\n','')


3.2.3 获取结点

注意一点img和src之间也可能会有匹配的,所以不能直接使用<img src="(.*?)这种形式的正则。

image.png


正则匹配出所有的图片信息

imgList = re.findall(r'<img.*?src="(.*?)"', html, re.S)


3.2.4 数据输出

创建一个文件夹image进行保存

for i, img in enumerate(imgList):
    img_url = "http://news.fzu.edu.cn" + img
    print(f"正在保存第{i + 1}张图片 路径:{img_url}")
    resp = requests.get(img_url)
    with open(f'./image/{img.split("/")[-1]}', 'wb') as f:
        f.write(resp.content)


image.png


4. 福利送书

点赞,评论这篇博文即可参与送书。


【参考文案】


学习人工智能,为什么要从基础的算法开始入门?学习大数据分析,为什么最后却讲解起了云计算?在“大数据”“云计算”“人工智能”被频繁提起的今天,你是否知道这三个名词间有什么关系?

如果你也有类似疑问,那一定要好好看看北京大学出版社倾力打造的新书——《Hadoop+spark+Python大数据处理从算法到实战》!本书围绕大数据处理的三大核心要素(算力+数据+算法),剖析大数据处理全过程,没有高冷的代码,也没有繁杂的公式,用“简单的方法”搞定大数据,带你用愉快的心情玩转AI!

image.png


【内容简介】


本书围绕新基建的云计算、大数据及人工智能进行介绍,分为以下五个部分。

第一部分,介绍大数据的概念与特点,以及典型的产业应用场景;

第二部分,介绍目前云计算中的一个重要的研究与应用领域——容器云,包含应用容器引擎Docker与容器编排工具Kubernetes;

第三部分,是大数据分析的基础,也是大数据分析技术的重点,包含Hadoop、HBase、Hive、Spark的环境搭建及开发流程;

第四部分,是机器学习相关算法的应用,包含scikit-learn、SparkML、TensorFlow工具的使用;

第五部分,以实例介绍如何使用Spark机器学习库中的协同过滤算法,来实现一个基于Web的推荐系,以及介绍如何使用OpenCV与TensorFlow构建卷积神经网络来实现基于Web的人脸识别。


本书轻理论,重实践,适合有一定编程基础,且对云计算、大数据、机器学习、人工智能感兴趣,希望投身到新基建这一伟大事业的读者学习。同时,本书还可作为广大院校相关专业的教材和培训参考用书。


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
4月前
|
数据采集 数据挖掘 Python
python爬虫去哪儿网上爬取旅游景点14万条,可以做大数据分析的数据基础
本文介绍了使用Python编写的爬虫程序,成功从去哪儿网上爬取了14万条旅游景点信息,为大数据分析提供了数据基础。
285 1
|
4月前
|
数据采集 机器学习/深度学习 数据可视化
纵横小说网站数据采集与分析实现
本文介绍了一个基于Python的纵横中文网数据采集与分析项目,旨在通过技术手段深入分析网络小说市场,掌握读者需求,评估作品质量,并为网站运营提供策略支持。
141 0
纵横小说网站数据采集与分析实现
|
7月前
|
数据可视化 数据挖掘 网络可视化
R语言复杂网络分析各大电视台合播电视剧数量可视化
R语言复杂网络分析各大电视台合播电视剧数量可视化
|
Python
python 进行西安2023年天气信息,分析天气趋势预测 数据代码评论区自取
python 进行西安2023年天气信息,分析天气趋势预测 数据代码评论区自取
81 0
|
JSON 数据可视化 前端开发
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(1)饼图表格互动篇
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(1)饼图表格互动篇
102 0
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(1)饼图表格互动篇
|
存储 数据采集 JavaScript
手把手教你做出数据可视化项目(四)动态模拟航班飞行路线
手把手教你做出数据可视化项目(四)动态模拟航班飞行路线
342 0
|
数据可视化 大数据 关系型数据库
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(2)雷达图表格梯次排列互动篇
百度Echarts消防训练成绩大数据可视化综合分析系统开发实录(2)雷达图表格梯次排列互动篇
94 0
|
缓存 数据可视化 前端开发
教程】天气预报应用集成台风信息功能的探讨
通过本教程,我们探讨了如何将台风信息功能集成到天气预报应用中。通过提供台风信息,我们可以帮助用户更好地了解台风的动态和可能影响的地区,提供更全面的天气信息,帮助用户做出明智的决策。希望本教程对你在开发天气预报应用时集成台风信息功能有所帮助!
198 0
|
存储 数据采集 Web App开发
Python爬虫系列2-采集2022年拉钩网最新的IT岗位招聘数据
2022年转眼已过半,再过半年即将迎来2023年,我坚信疫情早晚会过去,2023年相信会是一个互联网全新的时代:物联网时代,古语云:十年磨一剑,古时候烽火传递、飞鸽传书,交流信息很不方便。古人就幻想着有千里眼和顺风耳。能看到千里之外的地方和听到很远地方的声音。从2000年至2010年这十年,古人的愿望变成了现实;我们见证了全智能手机的发展历程;以及2010年至2020年的移动互联网从早期的2G网络过渡至3G到现在的4G网络甚至到目前已经慢慢普及但尚未成熟的5G网络的发展历程;我们也坚信未来的万物互联距离现如今的我们也并不是一件很遥远的事情。 如果本文对你有些帮助-还请点赞👍关注!
Python爬虫系列2-采集2022年拉钩网最新的IT岗位招聘数据