数学建模美赛(模型积累2)

本文介绍了聚类模型中的SPSS聚类分析(包括k-均值、系统聚类和二阶聚类)以及DBSCAN聚类的特点,同时详细讲解了Python爬虫的基础入门、爬取过程中的数据处理(如网页源代码与抓包数据的区别)、多线程爬取优化和异常处理,以及数据存储在Excel中的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、聚类模型

SPSS聚类分析(含k-均值聚类,系统聚类和二阶聚类)icon-default.png?t=N7T8https://blog.youkuaiyun.com/m0_52124992/article/details/128916757

看这个,写的很详细(๑•̀ㅂ•́)و✧

DBSCAN聚类:基于密度的方法的特点是不依赖于距离,而是依赖于密度,从而克服基于距离的算法只能发现“球形”聚簇的缺点

二、爬虫学习

(1)我选择的是在pycharm上进行爬虫

爬虫入门教程:【Python+爬虫】爆肝两个月!拜托三连了!这绝对是全B站最用心(没有之一)

(这个up讲课很可爱,PPT做的也很精美,超级好!)

还有一个教程我也很喜欢:【Python爬虫教程】

(2)方法积累

因为这里没写完就开始比赛了,现在这部分是比完赛补充的,

学完爬虫之后一定要找几个例子去练习,不只是多看几个有有教程的案例,要自己找信息去爬,毕竟有一句关于爬虫的名言就是万物皆可爬嘛 (๑•̀ㅂ•́)و✧

在练习的过程中,注意区分是从网页源代码中找信息,还是通过抓包找信息,这涉及到获取到的数据格式的不同。

1.直接爬取的网页源代码,“.text”之后获取到“str”字符串类型的数据,输出可以看到是<html>的数据(不是一整行),这样之后用正则去筛选所需要的信息是最简单的。要注意正则得到的结果是一个列表,哪怕只有一组数据。

2.通过抓包获取的数据包:

如果一眼看上去比较整齐(先在浏览器里预览数据包内容),这时候就不适合".text"转换成字符串了,选择",json()"可以得到更加整齐的数据,字典或者由字典组成的列表(判断是不是字典就看冒号前面的字符是不是单引号括起来的,如果是则是字典)。索引之后就是字符串类型了,如果需要可以继续用正则筛选;

还有一种情况,如果".text"得到的类似网页数据,但是在一整行内,且内容中充斥着 \n \t 等,这种数据用正则并不好处理,可以选择用",json()"获取到字典数据,进一步索引得到字符串,然后再使用正则筛选数据。

3.我的实战经验也并不多,只是在比赛过程中用到了这些,简单总结了一下方法规律,希望能帮到大家。在实际应用中还是要根据需要爬取的数据类型灵活的选择合适的方法。

(3)经验积累

在实际使用中,出现了几个棘手的问题

1.在爬取外国网站时,网站加载速度慢,如果需要的数据量大,运行时间就会特别长,可以准备一下多线程,可以大幅度提高爬取的速度。因为考虑到多线程会影响数据顺序,而且我需要的数据也并不是很多,所以我没有使用,具体代码上面教程里也有讲到。

#需要导库
from concurrent.futures import ThreadPoolExecutor

2.在循环爬取的过程中,可能会出现访问失败的情况,为了不影响整个进度,可以用try except语句解决

        try:
            #可能出问题的代码段
            #要设置timeout值(单位是秒)
            response = requests.get(url=url1, headers=headers, timeout=200)
            print('请求成功!!!')
        except requests.exceptions.ReadTimeout:
            print('请求超时,正在继续下一个循环。')
            continue  # 跳过当前循环,继续下一个循环
        except requests.exceptions.RequestException:
            print('请求异常,正在继续下一个循环。')
            continue  # 跳过当前循环,继续下一个循环

同时可以在循环中加入随机延时,以模拟真正的用户访问

import time
import random

time.sleep(random.random()*3)

3.爬取到的数据想要存储在Excel表格中,先把数据准备成二维列表数据

import pandas as pd

data = [['1', '21', '1954', '69', '1981', '0', '0', '2', '0', '43', '1974', '44', '1974'], 
        ['2', '13', '1974', '69', '1997', '0', '0', '2', '0', '67', '1955', 'T', '2011'], 
        ['3', '12', '1974', '69', '1997', '0', '0', '2', '0', '81', '2005', 'T', '2011'], 
        ['4', '14', '1970', '68', '2012', '0', '0', '2', '0', '74', '1995', '43', '1974']]

# 将数据转换为pandas DataFrame对象
df = pd.DataFrame(data, columns=None)

# 将DataFrame对象保存为Excel文件
df.to_excel("output.xlsx", index=False)

OK!今天就到这吧,也算是简单入门了爬虫,明天抽时间把MATLAB里面遇到的问题整理一下(如果有整理价值的话),今年美赛就这样了,静候佳音吧!!

over!睡觉!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值