【matlab】【python】爬虫实战

news2024/10/6 8:36:50

目录

引言

具体步骤

1.设置请求选项

2.发送请求并获取响应

3.设置正则表达式

4.执行正则表达式匹配

matlab完整代码

python代码示例


引言

在当今这个信息爆炸的时代,数据已成为推动社会进步和企业发展的核心动力之一。随着互联网的普及和技术的飞速发展,网络上的数据资源变得前所未有的丰富和多样。然而,这些数据大多以非结构化的形式存在,如网页、文档、图片、视频等,直接利用这些原始数据不仅效率低下,而且难以发挥其真正的价值。因此,爬虫技术应运而生,成为了数据获取与处理的重要工具。

爬虫,又称网络爬虫或网页蜘蛛,是一种按照一定规则自动从互联网上抓取信息的程序或脚本。它们模拟人类浏览器的行为,访问目标网站,并解析网页内容,提取出我们感兴趣的数据。这些数据可以是文本、图片、视频等多种形式,涵盖了新闻、商品信息、学术论文、社交媒体内容等众多领域。

学习爬虫技术,不仅可以帮助我们高效地获取所需的数据资源,还能让我们更深入地理解互联网的工作原理和数据的流动方式。通过爬虫,我们可以实现数据的自动化收集、整理和分析,为后续的数据挖掘、机器学习、大数据分析等提供有力的支持。

然而,值得注意的是,爬虫技术的使用应当遵守法律法规和网站的robots协议,尊重网站的版权和数据隐私。在爬虫开发过程中,我们需要遵循合法、合规的原则,确保数据的合法来源和正当使用。

总之,爬虫技术作为数据获取与处理的重要手段,在当今社会具有广泛的应用前景和重要的实践价值。学习并掌握爬虫技术,将为我们打开一扇通往数据世界的大门,让我们在数据驱动的时代中占据有利位置。

爬取网页     

具体步骤

1.设置请求选项

url = 'https://nba.hupu.com/stats/players';
opts = weboptions('HeaderFields',{'User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54'});

weboptions 函数用于设置网络请求选项,这里设置了 User-Agent 头部字段,模拟了一个常见的浏览器用户代理,以避免网站反爬虫机制的阻拦。

2.发送请求并获取响应

resp = webread(url, opts);

3.设置正则表达式

使用正则表达式来选中想要爬取的内容,这里以爬取球员和得分为例

点击源代码页面左上角:在页面中选择一个元素以进行检查,这里选中人名卢卡-东契奇,对照源代码确定正则表达式

name_pattern  = '<td\s+width="\d+"\s+class="left">\s*<a\s+href="[^"]*">([^<]+)</a>\s*</td>'; 

score_pattern = '<td\s+class="bg_b">\s*([^<]+)\s*</td>';

name_pattern 匹配包含球员名字的 <td> 元素,并使用捕获组来提取名字。

score_pattern 匹配包含球员得分的 <td> 元素,并使用捕获组来提取得分。

4.执行正则表达式匹配

name_matches = regexp(resp, name_pattern, 'tokens');
score_matches = regexp(resp, score_pattern, 'tokens');

matlab完整代码

url = 'https://nba.hupu.com/stats/players';
opts = weboptions('HeaderFields',{'User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54'});

%  发送请求并获取响应
resp = webread(url, opts);

name_pattern  = '<td\s+width="\d+"\s+class="left">\s*<a\s+href="[^"]*">([^<]+)</a>\s*</td>';  
score_pattern = '<td\s+class="bg_b">\s*([^<]+)\s*</td>';
% 
% 提取球员名字
name_matches = regexp(resp, name_pattern, 'tokens');

% 提取得分
score_matches = regexp(resp, score_pattern, 'tokens');

% 输出匹配结果
disp('球员及得分:');
for i = 1:length(name_matches)
    player_name = name_matches{i}{1};
    player_score = score_matches{i}{1};
    disp(['球员:', player_name, ' 得分:', player_score]);
end

python代码示例

通过模拟浏览器发送HTTP GET请求到NBA虎扑网站,使用lxml库的etree解析返回的HTML内容
# 并利用XPath表达式提取球员的排名、姓名、球队和得分信息。  

import requests  
from lxml import etree  
  
# 目标URL  
url = 'https://nba.hupu.com/stats/players'  
# 请求头,模拟浏览器访问  
headers = {  
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54'  
}  
  
# 发送HTTP GET请求  
resp = requests.get(url, headers=headers)  
  
# 检查请求是否成功  
if resp.status_code == 200:  
    # 使用lxml的etree解析HTML内容  
    e = etree.HTML(resp.text)  
  
    # 提取球员的排名、姓名、球队和得分  
    nos = e.xpath('//table[@class="players_table"]/tr/td[1]/text()')  
    names = e.xpath('//table[@class="players_table"]/tr/td[2]/a/text()')  
    teams = e.xpath('//table[@class="players_table"]/tr/td[3]/a/text()')  
    scores = e.xpath('//table[@class="players_table"]/tr/td[4]/text()')  
  
    # 遍历并打印结果  
    for no, name, team, score in zip(nos, names, teams, scores):  
        # 处理可能存在的空值或特殊字符  
        no = no.strip() if no else '未知'  
        name = name.strip() if name else '未知'  
        team = team.strip() if team else '未知'  
        score = score.strip() if score else '未知'  
  
        print(f'排名:{no} 姓名:{name} 球队:{team} 得分:{score}')  
else:  
    print(f"请求失败,状态码:{resp.status_code}")  
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1895571.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7.Android逆向协议-抓取安卓http和https数据包(设备需要root权限)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;微尘网校 上一个内容&#xff1a;6.Android逆向协议-配置FD抓包环境 root&#xff1a; 现在的安卓手机不好搞&#xff0c;有很多坑&am…

ECSNet: Spatio-Temporal Feature Learning for Event Camera

标题&#xff1a;ECSNet&#xff1a;事件相机的空间时间特征学习 源文&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9869656https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9869656 源码&#xff1a;GitHub - zhiwen-xdu/ECSNet…

AIGC为设计师解决了什么问题?

在当今数字化时代&#xff0c;设计师们面临着前所未有的挑战和压力。他们不仅要不断创新以满足市场和客户的需求&#xff0c;还要紧跟快速变化的设计趋势和技术发展的步伐。幸运的是&#xff0c;随着生成式人工智能&#xff08;AIGC&#xff09;的兴起&#xff0c;设计师们找到…

Prometheus安装部署

1 常见部署方式 包安装 RHEL系统: https://packagecloud.io/app/prometheus-rpm/release/search 二进制安装 https://prometheus.io/download/ 基于 Docker 运行 https://prometheus.io/docs/prometheus/latest/installation/ 1.1 Docker 镜像直接启动 [root120 ~]# d…

日志自动提取---七牛Logkit观星应急工具

目录 七牛Logkit (Windows&Linux&Mac 等) 下载: 文档: windows配置过程: 1-下载 2-修改logkit-community基本配置 3-启动! 4-浏览器访问 5-添加配置吧 观星应急工具 &#xff08;Windows 系统日志&#xff09; 七牛Logkit (Windows&Linux&Mac 等) -…

深度学习图像生成与分割模型详解:从StyleGAN到PSPNet

文章目录 Style GANDeeplab-v3FCNAdversarial AutoencodersHigh-Resolution Image Synthesis with Latent Diffusion ModelsNeRF: Representing Scenes as Neural Radiance Fields for View SynthesisPyramid Scene Parsing Network Style GAN 输入是一个潜在向量 (z)&#xff…

SPI四种模式--极性与相位

SPI的四种模式&#xff1a;相位和极性 极性 定义时钟空闲状态&#xff1a; CPOL0&#xff1a;时钟线在空闲状态为低电平 CPOL1&#xff1a;时钟线在空闲状态为高电平 这个设置决定了设备不进行通信时时钟线的状态。 兼容性&#xff1a; 不同的SPI设备可能需要不同的时钟极性…

Elasticsearch:Ingest architectures - 摄取架构

我们提供各种采集架构&#xff0c;以满足各种用例和网络配置的需求。 要将数据采集到 Elasticsearch&#xff0c;请使用最符合你的需求和用例的选项。对于许多用户和用例来说&#xff0c;最简单的方法是使用 Elastic Agent 采集数据并将其发送到 Elasticsearch。Elastic Agent…

Rhino 犀牛三维建模工具下载安装,Rhino 适用于机械设计广泛领域

Rhinoceros&#xff0c;这款软件小巧而强大&#xff0c;无论是机械设计、科学工业还是三维动画等多元化领域&#xff0c;它都能展现出其惊人的建模能力。 Rhinoceros所包含的NURBS建模功能&#xff0c;堪称业界翘楚。NURBS&#xff0c;即非均匀有理B样条&#xff0c;是计算机图…

PTrade量化软件常见问题整理系列2

一、研究界面使用get_fundamentals函数报错&#xff1a;error_info:获取token失败&#xff1f; 研究界面使用get_fundamentals函数报错&#xff1a;error_info:获取token失败&#xff1f; 1、测试版本202202.01.052&#xff0c;升级202202.01.051版本后&#xff0c;为了解决不…

卡尔曼滤波Q和R怎么调

卡尔曼滤波器是一种有效的估计算法&#xff0c;主要用于在存在噪声的环境中估计动态系统的状态。它通过结合预测模型&#xff08;系统动态&#xff09;和观测数据&#xff08;包括噪声&#xff09;来实现这一点。在卡尔曼滤波中&#xff0c;调整过程噪声协方差矩阵 ( Q ) 和测量…

idea删除分支并同步到gitLab以及gitLab上的分支删除

目录 idea删除分支并同步到gitLab 方法一&#xff08;推荐&#xff09; 方法二&#xff08;命令行&#xff09; gitLab上的分支删除 前言-与正文无关 ​ 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中&…

5.opencv深浅拷贝

图像处理的复制操作 深浅拷贝 图像复制分成两种&#xff0c;第一种假复制&#xff0c;从原图片选择一部分图片拿出来观察&#xff0c;此时新生成的图片和原图实际上是同一张图片&#xff0c;即浅拷贝 将图片的一部分复制下来&#xff0c;放到新的内存中&#xff0c;即两张完全…

ActiveAnno3D采用主动学习实现领域自适应,实现大规模数据集的快速标注(代码开源)

Abstract 大规模数据集的策划仍然成本高昂且需要大量时间和资源。数据通常需要手动标注&#xff0c;创建高质量数据集的挑战依然存在。在这项工作中&#xff0c;我们使用主动学习填补了多模态3D目标检测研究的空白。我们提出了ActiveAnno3D&#xff0c;这是一种主动学习框架&a…

基于香橙派AIpro搭建的车牌识别系统

引言 本人正有学习嵌入式的想法&#xff0c;正好碰到机会让我搞了块OrangePi AIpro&#xff08;香橙派AIpro&#xff09;开发板&#xff0c;正合我意&#xff0c;直接上手进行体验&#xff0c;顺便给大家分享下我的实践过程。 开发板介绍与初次启动 OrangePiAIPro开发板是香…

7_1_SVPWM概述

1、SPWM 正弦脉宽调制法&#xff08;SPWM&#xff09;是将每一正弦周期内的多个脉冲作自然或规则的宽度调制&#xff0c;使其依次调制出相当于正弦函数值的相位角和面积等效于正弦波的脉冲序列&#xff0c;形成等幅不等宽的正弦化电流输出。 通过调整占空比使等效电流近似为正弦…

【BUUCTF-PWN】13-jarvisoj_level2_x64

参考&#xff1a;BUU pwn jarvisoj_level2_x64 64位函数调用栈 - Nemuzuki - 博客园 (cnblogs.com) 64位&#xff0c;开启了NX保护 执行效果如下&#xff1a; main函数&#xff1a; vulnerable_function函数 read函数存在栈溢出&#xff0c;溢出距离为0x808 查找后门…

YOLOv8改进 | 代码逐行解析(三) | YOLO中的Mosaic增强详解(带你分析你的数据集是如何输入给模型,mosaic)

一、本文介绍 本文给大家带来的是YOLOv8中的Mosaic增强代码的详解,可能有部分人对于这一部分比较陌生,有的读者可能知道Mosaic增强但是不知道其工作原理,具体来说Mosaic增强就是指我们的数据集中的图片在输入给模型之前的一个处理过程(我们的图片并不是直接就输入给模型了…

信号量——Linux并发之魂

欢迎来到 破晓的历程的 博客 引言 今天&#xff0c;我们继续学习Linux线程本分&#xff0c;在Linux条件变量中&#xff0c;我们对条件变量的做了详细的说明&#xff0c;今天我们要利用条件变量来引出我们的另一个话题——信号量内容的学习。 1.复习条件变量 在上一期博客中&…