网页抓取及信息提取(三)

article/2025/9/30 2:30:07

时间煮雨
@R星校长

3关:网页数据分析

在这里插入图片描述
任务描述

下图是2016年国防科技大学分数线的网页,在浏览器中我们可以看到,各省的最高分、最低分、平均分都整齐地排列自在表格中。一个网页的源代码时常有成百上千行,其中很多代码都是为了布局页面样式服务的,而我们时常关心的是网页上的数据,而并不关心样式代码。所以如何从冗长的网页源代码中提取我们关心的数据,是这一关我们将要一起学习和体验的内容。
在这里插入图片描述
相关知识

课程视频 1《网页数据 - 使用正则表达式提取数据》

上面的课程视频1介绍了如何使用正则表达式提取网页数据,下面通过文字进一步详细描述正则表达式在Python中的使用。

网页代码中的规律

在这里插入图片描述

河南省一本线、工程类最高分、最低分、平均分、合训类最高分最低分平均分分别为523665644652659629638
在这里插入图片描述
用浏览器查看网页源代码,在河南这一行的表项中这些数据依次排列,而且省份和分数都在标签</span>前面。有关html表格的知识请参见背景知识。

Python内容匹配的re模块

re模块是Python的正则表达式模块,有关正则表达式的更多知识参见预背景知识,下面我们来介绍re模块的常用函数。

函数re.findall(pattern, string[, flags])
string中查找所有符合pattern正则表达式模式的子串,以这些子串作为列表元素返回一个列表。
参数说明:

  • pattern:要搜寻的正则表达式;
  • string:要检索的字符串;
  • flag:可选项,可设置搜索的要求。可以选择输入
    re.Sre.I等。re.S:如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始,不会跨行。而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,将\n当做一个普通的字符加入到这个字符串中,在整体中进行匹配;re.I:忽略大小写。

下面给出了具体的使用示例:

# coding=utf-8
import re
string = 'o1n27m3k486'
pattern = r'[1-9]+'
print(re.findall(pattern, string))

输出结果:

['1', '27', '3', '486']

函数re.search(pattern,string,flags)
参数与re.findall()的参数意义相同。re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回MatchObject对象,如果字符串没有匹配,则返回None
下面给出了具体的使用示例:

# coding=utf-8
import re
string = 'o1n27m3k486'
pattern = r'[1-9]+'
print(re.search(pattern, string).group(0))

输出结果:

1

函数re.compile(pattern,flags=0)
编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
参数与re.findall()re.search()的参数意义相同。
下面给出了具体的使用示例:

# coding=utf-8
import re
string = 'o1n27m3k486'
pattern = r'[1-9]+'
obj = re.compile(pattern)
print(obj.findall(string))

输出结果:

['1', '27', '3', '486']

下面的课程视频2介绍了使用正则表达式提取网页中表格数据的方法。

课程视频 2《网页数据 - 表格数据提取》

编程要求

仔细阅读网页源代码信息,补全step3()函数。通过2016年国防科技大学分数线的网页源代码按省抽取最高分、最低分、平均分信息,并保存下来,具体任务如下:

  • 按tr标签获取表格中所有行,保存在列表rows中;
  • 迭代rows中的所有元素,获取每一行的td标签内的数据,并把数据组成item列表,将每一个item添加到scorelist列表;
  • 将由省份,分数组成的8元列表(分数不存在的用/代替)作为元素保存到新列表score中。

注意:本关只要抽取具体的数值,该表中前三行分别为标题、类别和分数分类的具体描述,这三行的数据不需要保存。

测试说明

预期输出:

[['甘肃', '490', '632', '621', '625', '630', '597', '608'], ['吉林', '530', '658', '639', '649', '634', '599', '615'], ['新疆', '464', '673', '617', '630', '612', '534', '578'], ['广西', '502', '642', '601', '620', '603', '584', '592'], ['上海', '360', '489', '475', '480', '/', '/', '/'], ['广东', '508', '641', '600', '613', '619', '585', '597'], ['内蒙古', '484', '641', '615', '627', '623', '558', '597'], ['陕西', '470', '665', '628', '638', '639', '596', '615'], ['四川', '532', '665', '626', '643', '651', '612', '623'], ['黑龙江', '486', '667', '623', '641', '628', '580', '600'], ['安徽', '518', '655', '620', '631', '647', '608', '621'], ['河北', '525', '682', '654', '667', '669', '640', '649'], ['江西', '529', '645', '614', '629', '613', '589', '599'], ['浙江', '600', '692', '670', '679', '676', '652', '661'], ['湖南', '517', '662', '635', '644', '646', '593', '609'], ['宁夏', '465', '637', '565', '597', '590', '481', '526'], ['山东', '537', '679', '655', '665', '660', '597', '637'], ['河南', '523', '665', '644', '652', '659', '629', '638'], ['山西', '519', '639', '617', '625', '638', '579', '599'], ['天津', '512', '659', '634', '649', '600', '537', '567'], ['北京', '548', '662', '607', '629', '613', '570', '592'], ['重庆', '525', '671', '644', '655', '654', '634', '642'], ['云南', '525', '680', '653', '663', '663', '627', '639'], ['青海', '416', '596', '562', '580', '571', '502', '533'], ['江苏', '353', '404', '376', '386', '384', '355', '366'], ['福建', '465', '632', '614', '623', '606', '485', '576'], ['海南', '602', '829', '710', '750', '737', '672', '700'], ['贵州', '473', '671', '627', '643', '658', '600', '616'], ['辽宁', '498', '660', '624', '637', '641', '607', '621'], ['湖北', '512', '665', '622', '640', '637', '604', '614']]

开始你的任务吧,祝你成功!

# -*- coding: utf-8 -*-
import urllib.request as req
import re# 国防科技大学本科招生信息网中2016年录取分数网页URL:
url = 'http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/info/2017/717.html'webpage = req.urlopen(url)      # 根据超链访问链接的网页
data = webpage.read()           # 读取超链网页数据
data = data.decode('utf-8')     # byte类型解码为字符串# 获取网页中的第一个表格中所有内容:
table = re.findall(r'<table(.*?)</table>', data, re.S)
firsttable = table[0]           # 取网页中的第一个表格
# 数据清洗,将表中的&nbsp,\u3000,和空格号去掉
firsttable = firsttable.replace('&nbsp;', '')
firsttable = firsttable.replace('\u3000', '')
firsttable = firsttable.replace(' ', '')def step3():score = []
# 请按下面的注释提示添加代码,完成相应功能,若要查看详细html代码,可在浏览器中打开url,查看页面源代码。
#********** Begin *********#
# 1.按tr标签对获取表格中所有行,保存在列表rows中:rows = re.findall(r'<tr(.*?)</tr>', firsttable, re.S)# 2.迭代rows中的所有元素,获取每一行的td标签内的数据,并把数据组成item列表,将每一个item添加到scorelist列表:scorelist = []for row in rows:items = []tds = re.findall(r'<td.*?>(.*?)</td>', row, re.S)for td in tds:rightindex = td.find('</span>')    # 返回-1表示没有找到leftindex = td[:rightindex].rfind('>')items.append(td[leftindex+1:rightindex])scorelist.append(items)# 3.将由省份,分数组成的7元列表(分数不存在的用\代替)作为元素保存到新列表score中,不要保存多余信息for record in scorelist[3:]:record.pop()score.append(record)
####### End #######return score
# print("各省分数线如下:")
# print(step3())
# if step3() == step3():
#     print("结果正确")
# else:
#     print("结果错误")

在这里插入图片描述

在这里插入图片描述
我 问号 敲错,输入中文问号,结果给我报错,查不出哪里出问题
在这里插入图片描述

我的报错信息

写代码的时候一定要万分谨慎,马虎会让你多做事,浪费20%-50%的时间成本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/Dv72OSyA.shtml

相关文章

爬虫入门(五)抓取网页数据

前面已经实现了获取整个网页HTML的功能&#xff0c;并且在获取HTML的基础上&#xff0c;加上一些诸如&#xff1a;下载出错自动重试、用户代理、服务器代理、爬取深度、避免重爬、id遍历、链接遍历等进阶功能。而且在处理过程中也初步使用了正则表达式。 但是前面我们获取的HT…

网页抓取数据-网页抓取数据的软件免费

在互联网络的时代&#xff0c;信息如同大海般没有边际。甚至我们获取信息的方法已经发生改变&#xff1a;从传统的翻书查字典&#xff0c;继而变成通过搜索引擎进行检索。我们从信息匮乏的时代一下子走到了信息极大丰富今天。 随着互联网的发展及普及&#xff0c;互联网用户迅速…

使用爬虫抓取网页内容

对于爬虫我们首先想到的是 python&#xff0c;但是对于前端来说我们通常是 node 来写爬虫&#xff0c;去抓取网站的数据而已。 爬虫的基本流程 1、发起请求 使用http库向目标站点发起请求&#xff0c;即发送一个Request&#xff0c;第三方请求库如 request&#xff0c;axios 等…

网页数据抓取-网页实时数据抓取软件

网页数据抓取&#xff0c;随着社会的发展&#xff0c;互联网的普及&#xff0c;不管是企业还是个人都意识到数据的重要性。今天给大家分享一款免费的网页数据抓取软件。只要点点鼠标就能轻松采集你想要的内容不管是导出还是自动发布都支持&#xff01;详细参考图片&#xff01;…

网页抓取软件-免费网页自动采集抓取任意内容软件

网页抓取工具&#xff0c;网页抓取工具主要是用来收集数据。这也是网页抓取工具最直接和最常见的用途。由于网页抓取是一个工具是一个软件&#xff0c;程序运行速度极快&#xff0c;而且不会因为做重复的事情而感到疲劳&#xff0c;所以使用数据提取来获取大量的数据就变得非常…

Python网页抓取教程

​— Python网页抓取教程:循序渐进 — 抓取网页入门其实挺简单的。在之前的文章中我们介绍了怎么用C#和JAVA两种方法来抓取网页&#xff0c;这一期给大家介绍一种更容易&#xff0c;也是使用最广泛的一种抓取方法&#xff0c;那就是Python。 说起Python&#xff0c;大家应该并…

网页抓取及信息提取(一)

R星校长 第1关&#xff1a;利用URL获取超文本文件并保存至本地 当我们想要在浏览器中打开一个网页时&#xff0c;需要在浏览器的地址栏中输入该网页的url&#xff0c;例如在地址栏中输入百度搜索网站的首页url&#xff1a;https://www.baidu.com/ &#xff0c;点击确认后&…

五,网页抓取

五&#xff0c;网页抓取 前言一、Requests库的使用二、定制Requests1.传递URL参数2.定制请求头3.设置超时2.发送post请求 感谢 前言 看完前几章&#xff0c;你可能已经对爬虫有了一个大概了解&#xff0c;接下来让我们深入学习静态网页的抓取。 一、Requests库的使用 在静态网…

网站抓取工具

经常由于某些原因我们需要爬取某一个网站或者直接复制某一个站点&#xff0c;到网上找了很多工具进行测试&#xff0c;试了很多各有各的问题&#xff0c;最终选择了Teleport Ultra&#xff0c;用起来效果很好&#xff1b;具体的操作手册等东西就不在这里说了&#xff0c;网上搜…

网页信息抓取

——看到社区里面好多人都有抓取网页信息的需要,特地把我自己做的DEMO放上来,供大家参考,也希望大家多提意见,共同学习完善这个小程序. 准备工具&#xff1a;Dreamweaver,RegexBuddy 抓取分3步进行: 1)下载网页数据; 2)处理网页得到想要的数据; 3)保存数据 一、下载网页源代码 …

网页抓取 - 完整指南

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 介绍什么是网页抓…

使用 Python 进行网页抓取

如果您知道如何做到这一点&#xff0c;那么对于企业和个人使用来说&#xff0c;网络抓取似乎是一种非常有用的节省时间的工具。我们将重点介绍为什么您应该使用 Python 进行网页抓取&#xff0c;并为您提供有关如何完成它的快速教程&#xff0c;包括使用哪些Python 开发工具。 …

网页数据抓取工具 (谷歌插件 web Scraper)

最简单的数据抓取教程&#xff0c;人人都用得上 Web Scraper 是一款免费的&#xff0c;适用于普通用户&#xff08;不需要专业 IT 技术的&#xff09;的爬虫工具&#xff0c;可以方便的通过鼠标和简单配置获取你所想要数据。例如知乎回答列表、微博热门、微博评论、电商网站商品…

国内五大主流网站内容抓取工具/采集软件大盘点

大数据技术用了多年时间进行演化&#xff0c;才从一种看起来很炫酷的新技术变成了企业在生产经营中实际部署的服务。其中&#xff0c;数据采集产品迎来了广阔的市场前景&#xff0c;无论国内外&#xff0c;市面上都出现了许多技术不一、良莠不齐的采集软件。 今天&#xff0c;我…

排名前20的网页爬虫工具

网络爬虫在许多领域都有广泛的应用,它的目标是从网站获取新的数据,并加以存储以方便访问。而网络爬虫工具越来越为人们所熟知,因为它能简化并自动化整个爬虫过程,使每个人都可以轻松访问网络数据资源。 1. Octoparse Octoparse是一个免费且功能强大的网站爬虫工具,用于从网…

2020年30种最佳的免费网页爬虫软件

原文链接&#xff1a;2020年30种最佳的免费网页爬虫软件 网页抓取&#xff08;也称为网络数据提取&#xff0c;网络爬虫&#xff0c;数据收集和提取&#xff09;是一种网页技术&#xff0c;从网站上提取数据。将非结构化数据转换为可以存储在本地计算机或数据库中的结构化数据…

12款最常使用的网络爬虫工具推荐

网络爬虫在当今的许多领域得到广泛应用。它的作用是从任何网站获取特定的或更新的数据并存储下来。网络爬虫工具越来越为人所熟知&#xff0c;因为网络爬虫简化并自动化了整个爬取过程&#xff0c;使每个人都可以轻松访问网站数据资源。使用网络爬虫工具可以让人们免于重复打字…

推荐15款免费的网页抓取软件

网页抓取&#xff08;也称为网络数据提取或网页爬取&#xff09;是指从网上获取数据&#xff0c;并将获取到的非结构化数据转化为结构化的数据&#xff0c;最终可以将数据存储到本地计算机或数据库的一种技术。 网页抓取是通过抓取软件实现的。当你在使用浏览器如Chorme浏览页面…

IPMI22:ipmi——ipmitool使用

简介 ipmitool是一个实用程序&#xff0c;用于监视、配置和管理支持智能平台管理接口 (IPMI) 的工具&#xff0c;遵循ipmi协议。它是一个开源项目&#xff0c;项目官网&#xff1a;https://sourceforge.net/projects/ipmitool/&#xff0c;github地址&#xff1a;https://gith…

从入门到精通:IPMITool 的详尽指南

简介&#xff1a;分享一款非常实用的服务器管理工具——IPMITool。许多从事服务器管理的朋友可能已经对这款工具有所了解&#xff0c;但对于初入这个领域的朋友们&#xff0c;它可能仍然有些陌生。本文将带领你从了解IPMITool的基本概念开始&#xff0c;逐步深入到其实际应用中…