当前位置: 首页 > news >正文

基于urllib库的网页数据爬取

实验名称:

基于urllib库的网页数据爬取

实验目的及要求:

实验目的

通过本实验了解和掌握urllib库。

实验要求

1. 使用urllib库爬取百度搜索页面

2. 使用urllib库获取百度搜索的关键字搜索结果(关键字任选)。

实验原理及内容:填写格式:宋体,五号,行距最小值18

实验原理】(列出相关知识点)

1urllib.request.urlopen 这个函数用于打开一个URL,返回一个文件对象,然后可以通过该文件对象来获取服务器的响应。在这个过程中,urllib会向目标服务器发送HTTP请求,并接收服务器的响应。

2、请求参数和编码:在构建URL时,可以使用urllib.parse.urlencode来将请求参数编码并拼接到URL中。这是为了将查询参数传递给服务器,以便进行搜索或其他操作。

3Headers(请求头): 有些网站对请求头进行检查,以确定请求是否来自合法的浏览器。通过在请求中添加合适的Headers,可以模拟浏览器的请求,降低被识别为爬虫的概率。这可以通过在urllib.request.Request对象中添加Headers来实现。

4URL解析和构建:

解析URL:使用urllib.parse.urlparse函数解析URL,获取其各个部分的信息(协议、主机、路径等)。

构建URL:使用urllib.parse.urljoin函数构建绝对路径的URL

程序思路

程序的思路可以总结为以下几个步骤:

1. 构建URL:根据实验要求,我们首先需要构建URL。如果是爬取百度搜索页面,可以使用百度的首页URL;如果是关键字搜索结果,需要在URL中加入相应的查询参数。

2.发送HTTP请求:使用`urllib.request.urlopen`函数打开URL,获取服务器的响应。

3.读取响应内容:通过响应对象可以获取服务器返回的HTML内容。

4.打印或处理HTML内容:对获取的HTML内容进行处理,可以选择打印出前几个字符,保存到文件中,或者进行进一步的解析。

5.查询参数处理(如果是关键字搜索):如果是关键字搜索,需要构建带有查询参数的URL

6.发送带查询参数的HTTP请求:通过`urllib.request.urlopen`发送带有查询参数的HTTP请求。

7.读取关键字搜索结果的HTML内容:与之前相同,通过响应对象获取服务器返回的HTML内容。

8.打印或处理关键字搜索结果的HTML内容:对获取的HTML内容进行处理,可以选择打印出前几个字符,保存到文件中,或者进行进一步的解析。

实验数据与结果分析:(含运行结果截屏)

【实验结果】

【结果分析】

通过进行这两个实验,在第一个实验中成功将百度搜索页面爬取下来,但在第二个实验中,触发了百度的安全验证,导致搜索关键词停止,无法爬取后面的内容,在尝试添加一些头信息或使用代理等手段后,仍被阻止,故无法读取后续结果。

实验小结:(包括问题和解决方法、心得体会、意见与建议等)

一、问题与解决方法:

安全验证问题:在爬取百度搜索页面时,可能遇到安全验证问题,导致无法直接获取页面内容。解决方法可能包括添加请求头信息,使用代理服务器,或者采用其他绕过安全验证的策略。

异常处理:在实际运行中,可能会遇到各种异常,如网络连接问题、超时等。建议使用适当的异常处理机制来增强代码的稳定性。

二、心得体会:

通过本次实验,我了解了使用`urllib`库进行网页爬取的基本流程,包括构建URL、发送HTTP请求、处理响应等步骤。同时也了解了实验中可能遇到网站的反爬虫机制,需要适应性地调整代码,添加头信息、使用代理等手段来规避这些机制。

三、意见与建议:

我应该去学习更多爬虫技术,可以进一步学习相关的爬虫技术,包括使用更高级的库(如ScrapyBeautifulSoupSelenium)和处理动态网页爬取等。同时在实际应用中,我们也要注意遵循网站的使用规范,不要滥用爬虫,以免造成对方服务器的过大负担,甚至被封禁IP

四、总结:

通过这个实验,初步了解了`urllib`库的使用和基本的网页爬取原理。在实际应用中,需要不断学习、调整和优化代码,以应对各种可能遇到的情况。

实验源代码清单:(带注释)

import urllib.request #导入urllib库response = urllib.request.urlopen('http://www.baidu.com')html=response.read()#读取网页print(html)#输出网页import urllib.requestimport urllib.parsedef baidu_search(keyword):base_url = "https://www.baidu.com/s"params = {"wd": keyword}  # 构建查询参数# 将查询参数编码并拼接到URL中url = base_url + '?' + urllib.parse.urlencode(params)# 发送HTTP请求并获取响应response = urllib.request.urlopen(url)html_content = response.read()return html_content# 使用关键字"机器学习"进行搜索search_keyword = "机器学习"search_result = baidu_search(search_keyword)# 打印搜索结果的前 500 个字符print(search_result[:500].decode('utf-8'))

相关文章:

基于urllib库的网页数据爬取

实验名称: 基于urllib库的网页数据爬取 实验目的及要求: 【实验目的】 通过本实验了解和掌握urllib库。 【实验要求】 1. 使用urllib库爬取百度搜索页面。 2. 使用urllib库获取百度搜索的关键字搜索结果(关键字任选)。 实验原理及…...

Python如何匹配库的版本

目录 1. 匹配库的版本 2. Python中pip,库,编译环境的问题回答总结 2.1 虚拟环境 2.2 pip,安装库,版本 1. 匹配库的版本 (别的库的版本冲突同理) 在搭建pyansys环境的时候,安装grpcio-tools…...

日志审计在网络安全中的重要性

日志审计是一种通过分析、识别和验证各种日志信息,以帮助企业了解其网络和系统的安全状态和活动的过程。这些日志信息可能来自各种来源,包括服务器、网络设备、应用程序、操作系统等。 日志审计的主要功能包括: 1.识别潜在的安全威胁&#…...

浅谈基于不信任的防御性编程

背景 在实际开发过程中,我们经常遇到这样的场景: 后端报错了,手忙脚乱一顿排查,发现是前端传的参数为空,或者格式不对;后端又报错了,传参没问题,根据日志流发现,是某“给…...

线性代数(一)

1.标量:标量由只有⼀个元素的张量表⽰。 x np.array(3.0) y np.array(2.0) x y, x * y, x / y, x ** y (array(5.), array(6.), array(1.5), array(9.))2.向量:向量可以被视为标量值组成的列表,列向量是向量的默认⽅向。 x np.arange(4…...

k8s-learning-why we need pod

应用场景 应用从虚拟机迁移到容器中 为什么虚拟机中的应用不能无缝迁移到容器中 虚拟机中应用:一组进程,被管理在systemd或者supervisord中 容器的本质:一个容器一个进程 所以将运行在虚拟机中的应用无缝迁移到容器中,与容器…...

【CASS精品教程】cass11提示“请不要在虚拟机中运行此程序”的解决办法

文章目录 一、问题提示二、解决办法一、问题提示 按照正常安装教程安装好南方测绘cass 11之后,打开的时候可能会有以下提示:请不要在虚拟机中运行此程序,如下图所示: 遇到问题,咱们就想办法解决问题,下面将自己尝试的方法及最终解决情况跟大家说一下,供参考。 二、解决…...

【算法Hot100系列】正则表达式匹配

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

html 基础学习笔记

Date:20231212 html标签 基础学习笔记 一、web和internet 1.1、Internet简介 Internet 是一个全球性的计算机互联网络,中文名称有"因特网"、“国际互联网”、“网际网”、"交互网络"等Internet提供的主要服务 Telnet、Email、www、BBS、FTP等…...

7-4 天梯赛的善良

天梯赛是个善良的比赛。善良的命题组希望将题目难度控制在一个范围内,使得每个参赛的学生都有能做出来的题目,并且最厉害的学生也要非常努力才有可能得到高分。 于是命题组首先将编程能力划分成了 106 个等级(太疯狂了,这是假的&…...

案例精选|聚铭综合日志分析系统助力长房集团“智慧房产”信息化建设

长沙房产(集团)有限公司(简称“长房集团”)始创于2004年3月,是一家由长沙市人民政府授权组建的国有独资企业。截至2021年底,企业总资产逾452亿元,总开发面积1300多万平方米,已开发项…...

HarmonyOS给应用添加消息通知

给您的应用添加通知 通知介绍 通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景…...

【C语言】cache和程序访问的局部性对程序性能的影响

文章目录 1.源程序比较其性能影响2.内存分配(1)静态存储区(static):(2)栈区(stack):(3)堆区(heap&…...

数字棱形(课程F)

输入1个整数N,输出N行的如下形状的数字棱形。 例如:N4时: ___1 __222 _33333 4444444 _33333 __222 ___1 (注:上面使用下划线’_’表示空格,以避免看不清造成误解) 输入格式 第一行1个正整数:N&#xff0…...

如何查看PHP信息

创建一个 PHP 文件&#xff0c;比如 info.php&#xff0c;在其中添加以下代码&#xff1a; <?php phpinfo(); ?>访问这个文件&#xff08;例如&#xff0c;在浏览器中输入 http://localhost/info.php&#xff09;&#xff0c;它会显示 PHP 的所有配置信息。在这个页面…...

Vue3+ts实现页面跳转及参数传递

## 列表页 <script lang"ts" setup> import { reactive, toRefs } from vue // 1 引入useRouter路由信息方法 import { useRouter } from vue-router // 2 获取实例 const router useRouter()const gotoDetail (index: string) > {router.push({path: …...

日志框架Log4j、JUL、JCL、Slf4j、Logback、Log4j2

1. JAVA日志框架 1.1 为什么程序需要记录日志 我们不可能实时的24小时对系统进行人工监控&#xff0c;那么如果程序出现异常错误时要如何排查呢&#xff1f;并且系统在运行时做了哪些事情我们又从何得知呢&#xff1f;这个时候日志这个概念就出现了&#xff0c;日志的出现对系…...

mybatis动态SQL-sql片段

1、建库建表 create database mybatis-example; use mybatis-example; create table emp (empNo varchar(40),empName varchar(100),sal int,deptno varchar(10) ); insert into emp values(e001,张三,8000,d001); insert into emp values(e002,李四,9000,d001); insert into…...

wvp-GB28181-pro 2.0+ZLMediaKit 使用Dockerfile制作镜像以及部署【CentOS7】

说明 部署gb28181和zlm主要需要构建两个镜像&#xff0c;第一个为基础镜像&#xff0c;以centos7为基础构建新的基础镜像base.Dockerfile,第二个镜像为服务部署镜像server.Dockerfile&#xff0c;以第一个镜像base.Dockerfile构建出的镜像为基础镜像进行构建 整个基础镜像的构…...

登录校验,JWT令牌技术,过滤器(Filter)拦截器(interceptor)

登录功能&#xff1a; 前端传递json格式的数据。username&#xff08;用户名&#xff09;password&#xff08;密码&#xff09;。controller层对数据进行接收&#xff0c;由于是接收json格式的数据&#xff0c;所以我们把它封装到一个对象里面&#xff0c;由于登录是员工进行登…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...