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

article/2025/9/30 3:07:38

时间煮雨
@R星校长

1关:利用URL获取超文本文件并保存至本地

当我们想要在浏览器中打开一个网页时,需要在浏览器的地址栏中输入该网页的url,例如在地址栏中输入百度搜索网站的首页url:https://www.baidu.com/ ,点击确认后,浏览器将向服务器发出一个对该网的请求;服务器端收到请求后,会返回该网页的超文本文件,浏览器收到服务器端发来的网页超文本文件后,对其进行解析,然后在窗口中显示该超文本文件对应的网页。如下图所示。
在这里插入图片描述
网页对应的超文本文件如下图所示。
在这里插入图片描述

本关我们将使用Python程序,实现通过网页的url,获得服务器返回的超文本文件,并打印出来的功能。

相关知识

课程视频(《网页数据 - 利用URL获取超文本文件》)

下面通过文字进一步详细描述获取网页并保存至本地的实现方法。

访问url的urlopen()方法

Python提供了urllib.request模块用来处理网页的url

urllib.request.urlopen(url[, data[, proxies]]):创建一个表示远程url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据。

参数说明:一般我们只用到第一个参数。

  • url表示远程数据的路径,一般是网页的网址;
  • data表示以post方式提交到url的数据;
  • proxies用于设置代理。

返回值说明:urlopen()返回一个类文件对象,返回结果可使用read()eadline()readlines()fileno()close()等方法直接使用。下面给出了具体的使用示例:

# coding=utf-8
import urllib.request as req
f = req.urlopen('http://www.baidu.com')
firstLine = f.readline()   #读取html页面的第一行
print(firstLine)
print(firstLine.decode('utf-8'))

其中:

  • ‘http://www.baidu.com’: 要访问的url,百度搜索首页的网址;
  • req.urlopen():
    调用了urllib.request.urlopen()方法,引用时用req替代了urllib.request;
  • f.readline(): f是类文件对象,进行行读取操作。

输出结果:

b'<!DOCTYPE html>\n'
<!DOCTYPE html>

对比下面图片中显示的网页源代码,输出结果和第一行内容一致。

在这里插入图片描述

将远程数据下载到本地的urlretrieve()方法

urllib.request.urlretrieve(url[, filename[, reporthook[, data]]]):将url定位的服务器端的html文件下载到你本地的硬盘中。如果不指定filename,则会存为临时文件。

参数说明:一般我们只用到前两个参数。

  • url外部或者本地url地址;
  • filename指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
  • reporthook是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调,我们可以利用这个回调函数来显示当前的下载进度;
  • datapost到服务器的数据。该方法返回一个包含两个元素的元组(filename,
    headers),filename表示保存到本地的路径,header表示服务器的响应头。

返回值说明:urlretrieve()返回一个二元组(filename, mine_hdrs),下面给出了具体的使用示例:

# coding=utf-8
import urllib.request as req
url = 'http://www.baidu.com'
path = 'D:\\baidu.html'
req.urlretrieve(url, path)

输出结果:在D盘目录下会创建一个baidu.html文件。

文件操作

1. 打开文件的open()函数

open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])

参数说明:一般我们会用到以下三个参数:

  • file 文件路径,以字符串输入;

mode文件打开模式,详见预备知识,以字符串输入;

  • encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk

返回值说明:open()函数返回一个文件对象。

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

# coding=utf-8
`f = open"D:\example.txt","w"

以只写方式打开D盘目录下的example.txt文件,若文件不存在则创建该文件。

2. 关闭文件对象的close()方法

close()方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作,否则会触发ValueError错误。close()方法允许调用多次。

file对象,被引用到操作另外一个文件时,Python会自动关闭之前的file对象。 使用close()方法关闭文件是一个好的习惯。

# coding=utf-8
file = open"D:\example.txt","w"file.close()

上述代码将打开的文件对象file关闭。

3. 读文件,文件对象的read()readline()readlines()方法

  • f.read([size]): size为读取的长度,以byte为单位;
  • f.readline([size]) : 读一行,如果定义了size,有可能返回的只是一行的一部分;
  • f.readlines():
    把文件每一行作为一个列表的一个成员,并返回这个列表。它的内部是通过循环调用readline()来实现的。
# coding=utf-8
file = open"D:\example.txt","r"file.read()

上述代码可以读取example.txt文件的所有内容,注意打开文件时要给文件对象读的权限。

4. 写文件,文件对象的write()writelines()方法

  • f.write(str): str是一个字符串,存放你要写入的内容;
  • f.writelines(sequence): sequence是一个序列,比如列表,它会迭代帮你写入文件。
# coding=utf-8
f = open('D:\example.txt','w')
list = ['frog',' ','cat',' ','dog']
f.writelines(list)
f.close()

上述代码可以将list中的元素写入D盘下的example.txt文件,文件中会出现如下内容:frog cat dog
注意:writelines()方法不会为每一个元素自动添加换行。

编程要求

利用urllib.request模块中的方法,补全step1()函数。该函数将国防科技大学本科招生信息网中录取分数网页抓取下来,并保存在本地,具体要求:

正确使用urllib.request的相关函数获取指定url的内容;
将获取的页面内容,写入本地文件,命名为nudt.txt

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

# -*- coding: utf-8 -*-
import urllib.request as req
import os
import hashlib
# 国防科技大学本科招生信息网中录取分数网页URL:
url = 'http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/index.html'  # 录取分数网页URL
def step1():
# 请按下面的注释提示添加代码,完成相应功能
#********** Begin *********#
# 1.将网页内容保存到datawebpage = req.urlopen(url)  # 按照类文件的方式打开网页data = webpage.read()  # 一次性读取网页的所有数据
# 2.将读data以二进制写模式写入以学号命名的 “nudt.txt” 文件:outfile = open("nudt.txt", 'wb')  # 按二进制写方式打开文件outfile.write(data)  # 将网页数据写入文件outfile.close()
#********** End **********#

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


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

相关文章

五,网页抓取

五&#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;逐步深入到其实际应用中…

ipmitool常用命令详解

ipmitool命令 ipmitool –I [open|lan|lanplus] command OpenIPMI接口&#xff0c;command有以下项&#xff1a; raw&#xff1a;发送一个原始的IPMI请求&#xff0c;并且打印回复信息。 lan&#xff1a;配置网络&#xff08;lan&#xff09;信道(channel) chassis &#xf…

如何自己实现字符串拷贝函数

一般写法&#xff1a; char *my_strcpy(char *dst,const char *src) {assert(dst ! NULL);assert(src ! NULL);char *ret dst;while((* dst * src) ! \0) // 运算符优先级高于*;return ret; } 可以看到很简单&#xff0c;只需考虑三点。 1&#xff0c;判断源字符串和目的字…

C语言 字符串-字符串的复制

字符串复制函数&#xff1a; strcpy(目标字符串的首地址,被复制的字符串的首地址) 复制p到a&#xff1a; char * p"12345";char a[20];strcpy(a, p);printf("%s\n", a); strcpy_s(目标字符串的首地址,缓冲长度,被复制的字符串的首地址) strcpy_s(a, 20, p…

C语言 实现字符串的复制

1.将字符串a的数据复制到字符串b中 &#xff08;5.用for循环和指针来实现 &#xff09;------注释掉部分采用的是此方法 #include <stdio.h> int main() {void copy_string(char from[], char to[]);char a[]"I am a student.";//char a[11];//for (int i 0…

C语言的字符串复制

提示&#xff1a;仅供参考&#xff0c;如有错误&#xff0c;还望指出。 目录 目录 一、字符串复制 二、一些优化 1.一次简单优化 2.二次优化 3.三次优化 4.四次优化 5.最后的优化 总结 前言 以下是对字符串复制的一些优化 一、字符串复制 这是自己能想到的方法 主要…

不使用strcpy()函数实现字符串复制功能

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>int main() {/*不使用strcpy()函数实现字符串复制功能*/int i 0;char str1[100];char str2[100];printf("请输入字符串-> \n");gets(str1);while (str1[i] ! \0) /*判断字符数组的第一位不是结束符*/{st…

C语言字符串复制函数strcpy()的编写与详解

strcpy&#xff0c;即string copy&#xff08;字符串复制&#xff09;的缩写。 原型声明&#xff1a;char *strcpy(char *dest, const char *src); 头文件&#xff1a;#include <string.h> 和 #include <stdio.h> 功能&#xff1a;把从src地址开始且含有NULL结束符…