基于urllib库的网页数据爬取
实验名称: 基于urllib库的网页数据爬取 |
实验目的及要求: 【实验目的】 通过本实验了解和掌握urllib库。 【实验要求】 1. 使用urllib库爬取百度搜索页面。 2. 使用urllib库获取百度搜索的关键字搜索结果(关键字任选)。 实验原理及内容:填写格式:宋体,五号,行距最小值18磅 【实验原理】(列出相关知识点) 1、urllib.request.urlopen: 这个函数用于打开一个URL,返回一个文件对象,然后可以通过该文件对象来获取服务器的响应。在这个过程中,urllib会向目标服务器发送HTTP请求,并接收服务器的响应。 2、请求参数和编码:在构建URL时,可以使用urllib.parse.urlencode来将请求参数编码并拼接到URL中。这是为了将查询参数传递给服务器,以便进行搜索或其他操作。 3、Headers(请求头): 有些网站对请求头进行检查,以确定请求是否来自合法的浏览器。通过在请求中添加合适的Headers,可以模拟浏览器的请求,降低被识别为爬虫的概率。这可以通过在urllib.request.Request对象中添加Headers来实现。 4、URL解析和构建: 解析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请求、处理响应等步骤。同时也了解了实验中可能遇到网站的反爬虫机制,需要适应性地调整代码,添加头信息、使用代理等手段来规避这些机制。 三、意见与建议: 我应该去学习更多爬虫技术,可以进一步学习相关的爬虫技术,包括使用更高级的库(如Scrapy、BeautifulSoup、Selenium)和处理动态网页爬取等。同时在实际应用中,我们也要注意遵循网站的使用规范,不要滥用爬虫,以免造成对方服务器的过大负担,甚至被封禁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࿰…...

如何查看PHP信息
创建一个 PHP 文件,比如 info.php,在其中添加以下代码: <?php phpinfo(); ?>访问这个文件(例如,在浏览器中输入 http://localhost/info.php),它会显示 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小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系…...

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主要需要构建两个镜像,第一个为基础镜像,以centos7为基础构建新的基础镜像base.Dockerfile,第二个镜像为服务部署镜像server.Dockerfile,以第一个镜像base.Dockerfile构建出的镜像为基础镜像进行构建 整个基础镜像的构…...
登录校验,JWT令牌技术,过滤器(Filter)拦截器(interceptor)
登录功能: 前端传递json格式的数据。username(用户名)password(密码)。controller层对数据进行接收,由于是接收json格式的数据,所以我们把它封装到一个对象里面,由于登录是员工进行登…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目
应用场景: 1、常规某个机器被钓鱼后门攻击后,我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后,我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...