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

简介: 目录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的人脸识别。


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


相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
27天前
|
数据采集 NoSQL 搜索推荐
五一假期畅游指南:Python技术构建的热门景点分析系统解读
五一假期畅游指南:Python技术构建的热门景点分析系统解读
|
8月前
|
机器学习/深度学习 传感器 安全
2023 年高教社杯E题黄河水沙监测数据分析思路及代码(持续更新)
2023 年高教社杯E题黄河水沙监测数据分析思路及代码(持续更新)
|
9月前
|
存储 数据采集 JavaScript
手把手教你做出数据可视化项目(四)动态模拟航班飞行路线
手把手教你做出数据可视化项目(四)动态模拟航班飞行路线
162 0
|
10月前
|
数据采集 存储 数据可视化
获取网站上的旅游攻略信息,并作数据可视化
获取网站上的旅游攻略信息,并作数据可视化
156 1
|
11月前
|
缓存 数据可视化 前端开发
教程】天气预报应用集成台风信息功能的探讨
通过本教程,我们探讨了如何将台风信息功能集成到天气预报应用中。通过提供台风信息,我们可以帮助用户更好地了解台风的动态和可能影响的地区,提供更全面的天气信息,帮助用户做出明智的决策。希望本教程对你在开发天气预报应用时集成台风信息功能有所帮助!
131 0
|
存储 数据采集 芯片
电子设计大赛-数据采集与处理类题目分析
电子设计大赛-数据采集与处理类题目分析
101 0
电子设计大赛-数据采集与处理类题目分析
|
运维 监控 数据可视化
超干货!数据可视化最全解决方案!酷炫效果分分钟拿捏!【附全网高质量学习资料】
超干货!数据可视化最全解决方案!酷炫效果分分钟拿捏!【附全网高质量学习资料】
308 0
超干货!数据可视化最全解决方案!酷炫效果分分钟拿捏!【附全网高质量学习资料】
|
数据采集 Python 数据挖掘
Python爬虫系列实战-采集NBA常规赛数据分析三分命中率
爬取的网站为:stat-nba.com,这里爬取的是NBA2016-2017赛季常规赛至2017年1月7日的数据; 改变url_header和url_tail即可爬取特定的其他数据。
|
数据采集 Python
Python爬虫系列18-采集电视剧详情 比如:导演、年份、类型、短评等数据
身材不好就去锻炼,没钱就努力去赚,别把窘迫困境迁怒于别人,你唯一可以抱怨的就是不够努力的自己。 向往别人看过的风景,但是到了周末,却抱着手机在家宅过一个又一个周末。所以当自己想到的一些东西就赶紧行动起来,羡慕别人不如行动自己。 如果只是一味的去羡慕别人,从来都不去让自己行动起来,那么你永远都会在见证别人的成功,在见证别人的成长。
Python爬虫系列18-采集电视剧详情 比如:导演、年份、类型、短评等数据
|
数据采集 Python
Python爬虫系列15-采集梨视频等所有栏目中视频数据
“人生之路是不可逆的,任何人都不可能重新来过、重新选择。” 生活中,每个人都在用不同的方式在成长在成熟,谁也不比谁更轻松。
Python爬虫系列15-采集梨视频等所有栏目中视频数据