目录

一 网络爬虫的了解

1 爬虫库

urllib库

requests库

scrapy库

selenium库

2 注意!!!

二 requests库

1 request库的安装

2 认识网页资源

3 获取网页资源

4 小案例

5 代理服务器

三 selenium

1 准备工作

2 应用

3 实例


一 网络爬虫的了解

        网络爬虫是一种自动化程序,用于从互联网上抓取、解析和存储网页数据。通常用于搜索引擎、数据分析或信息聚合等场景。

1 爬虫库

python给我们提供了多个爬虫库,下面我们来先了解四个

urllib库

        urllib是Python内置的HTTP请求库,包含多个模块用于处理URL操作。主要模块包括urllib.request(打开和读取URL)、urllib.error(异常处理)、urllib.parse(解析URL)和urllib.robotparser(解析robots.txt文件)。适用于简单的HTTP请求,但功能相对基础,缺乏高级特性如会话保持和连接池。

requests库

        requests是一个第三方HTTP库,基于urllib开发,但提供了更简洁的API和更强大的功能。支持HTTP连接保持、会话对象、Cookie持久化、文件上传等。其设计注重易用性,适合大多数HTTP请求场景,如API调用或网页抓取。

scrapy库

        scrapy是一个开源的爬虫框架,用于大规模数据抓取。提供完整的爬虫工作流管理,包括请求调度、数据提取、存储等。支持异步处理、中间件扩展和分布式爬取。适合复杂爬虫项目,但学习曲线较陡峭,需遵循框架的设计模式。

selenium库

        selenium是一个自动化测试工具,主要用于浏览器自动化。通过驱动真实浏览器(如Chrome、Firefox)模拟用户操作,支持JavaScript渲染页面的抓取。适用于动态网页或需要交互的场景,但性能较低,资源消耗较大。

四者的选择取决于需求:简单请求用requests,复杂爬虫用scrapy,动态页面用selenium,而urllib适合无需依赖第三方库的基础场景。

这篇我们来具体学习requests,selenium库

2 注意!!!

        所有学习爬虫的学者在学习爬虫之前都要阅读爬虫规则,不是所有网站上的资源都允许爬取的,我们在爬取之前要查看该网站的robots.txt规则。下面以CSDN为例查看一下

上面列举了这些不能爬取的。如果硬爬的话小心进局子!

二 requests库

1 request库的安装

在命令提示符窗口或pycharm终端进行安装。(如果比较慢,我们可以用清华源安装)

pip install requests -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

2 认识网页资源

我们可以通过在网页空白处,点击左键,会出现

网页源代码

        我们先点击一下查看页面源代码,我们查找一下.jpg发现没有一张图片但网页中却存在许多杂照片,这是是因为.jpg是经过浏览器渲染之后才会出现的,在源代码中不存在.jpg格式的数据

检查

我们点击完检查,然后再点击中间那个按钮,然后就可以自动定位到这个图片的url了,我们也就可以使用了,所有这个是渲染之后的 

我们先点击中间那个按钮,然后就可以自动定位到这个图片的url了,我们也就可以使用了,所有这个是渲染之后的 

3 获取网页资源

我们用get()函数来获取,这个函数有三个形参,分别是

url        图片的HTML网址

params        可选参数,构造url字符串的

返回值是一个由类Response创建的对象

下面举例

import requests
r=requests.get("https://www.ptpress.com.cn/search",params={'keyword': 'Python教程'})
r.encoding=r.apparent_encoding
n=r.status_code
print(r.text)
print(n)

这段代码,在get中,我们有两个参数,一个url为中国邮电出版社的网址,一个params为一个字典{'keyword': 'Python教程'},这行代码也相当于

https://www.ptpress.com.cn/?keyword=python

只查找一个python可能会有点麻烦,但如果要查找许多个这样写就会便捷许多

如果不对编码进行调整,返回的text就会有乱码的部分,这里将检测到的编码赋值给了我们设定对象类的编码。

这里我们还对状态码进行了检查,如果状态码为404,那么这个网页不存在、如果是200则请求成功,如果500则是内部服务器错误。

4 返回页面内容

有个问题,我们这里返回的是网页源代码还是检查得到的内容呢,

我们在返回值中查询,结果得到的.jpg的数量还是0,说明这个是返回的源代码的内容

import requests
r=requests.get(r"https://cdn.ptpress.cn/uploadimg/Material/978-7-115-66932-2/72jpg/66932_s300.jpg")
f=open("test.jpg","wb")
f.write(r.content)
f.close()

这个代码中我们输入的一个.jpg格式的网站,然后我们把这个内容保存到了一个二进制文件中,然后就变成了一个图片了,这个说明了r.content返回的内容和上面.txt返回的内容不一样,这个返回的是一个保存着这个图片的二进制的文件。

图片、音频、视频、压缩包可以用.content保存,HTML、JSON等可以用.txt保存

4 小案例

我们把一个网站中所有的书名打印下来

import re
import requests
r=requests.get(r"https://www.ryjiaoyu.com/book")
# title="计算机应用基础习题与实验教程(Windows 10+Office 2016)(第3版)">计算机应用基础习题与实验教程(Windows 10+Office 2016)(第3版)</a></h4>
result=re.findall(r'title=(.+?)">(.+?)</a></h4>',r.text)
print(result)
for i in range(len(result)) :print('第'+str(i+1)+'本书:'+result[i][1])

输出结果:

代码解读:

 首先导入库,然后用requests.get()函数读取网址内容,然后观察网址中我们要找书名存在位置行的特征,写出正则表达式,我们这里保存下来的结果是一个列表,列表中包含若干个元组,然后我们循环打印出索引为1的值就出结果了

5 代理服务器

代理服务器就是当我们请求过多被加入黑名单之后,然后可以通过买代理服务器来继续请求,这个服务器可以理解成另一个电脑,建立链接,我们向代理服务器发送请求,然后代理服务器把请求发送给目标网站,然后目标网站返回信息,代理服务器在返回给我们。

使用方法

import requestsproxie={'http':'代理服务器ip'}
response = requests.get("https://www.ptpress.com.cn/",proxies=proxie)
print(response.text)  # 获取网页内容

这里http应为代理服务器网址,可以买,免费的很少且不稳定。

三 selenium

        驱动真实浏览器(如Chrome、Firefox)模拟用户操作,且浏览器可以实现页面的渲染,因此我们很容易获得选然后的数据信息。(说明这里我们得到的是’检查‘得到的内容)

1 准备工作

        selenium可以驱动内核,但我们还是要安装对应版本的浏览器的内核驱动程序以便于更好的驱动浏览器。下面我们来安装下WebDriver

第一步 先查看我们电脑的浏览器版本号(不同浏览器的驱动也不一样,我这里是edge)

       在右上角有三个点,下面可以看到关于Microsoft Edfe

然后可以查看到,我的浏览器内核版本为138.0.3351.95

第二步 去官网下载

Microsoft Edge WebDriver | Microsoft Edge Developer上面可以找到对应版本。一般我们电脑下载x64位就好了

 第三步 把msedgedriver放到我们python的Scripts中

 (最好scripts中和python所在文件夹中分别放一个)

第四步 下载selenium库

直接在终端pip安装就好

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

了解selenium操作原理

2 应用

import time
import requests
from selenium import webdriver
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options)
driver.get("https://www.ptpress.com.cn/search?keyword=c++&jc=")
print(driver.page_source)
sleep(100)

不同人的edge的位置可能不用,要修改下edge_options.binary_locatio

不同浏览器的这个也不同,例如我的edge是这样webdriver.Edge(options=edge_options)驱动的

如果是谷歌就是driver = webdriver.Edge(options=chrome_options)

然后就可以驱动起来了,但是驱动完又会直接退出,这里可以sleep一下

加载网页用driver.get()来加载,填入url就可以加载页面了

可以通过driver.page_source来获取渲染后的网页代码,下面是部分

3 实例

使用selenium把中国邮电出版社的c++板块的几本书图片给爬下来。

import re
import timeimport requests
from selenium import webdriver
from selenium.webdriver.edge.options import Options
edge_options = Options()
edge_options.binary_location=r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
driver = webdriver.Edge(options=edge_options)
driver.get("https://www.ptpress.com.cn/search?keyword=c++&jc=")
print(driver.page_source)
result=re.findall('<img src="(.+?jpg)">',driver.page_source)suresult=re.findall('</div><p>(.+?)</p></a>',driver.page_source)for i in range(len(result)):r = requests.get(result[i])name=r'c++图书/'+suresult[i].replace(" ", "")+'.jpg'f = open(name, "wb")f.write(r.content)f.close()

输出结果

  

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是乐观锁?什么是悲观锁?

&#x1f512; 深入浅出&#xff1a;乐观锁 vs 悲观锁终极对决&#xff01;面试必考知识点详解 各位CSDN的小伙伴们好呀&#xff01;&#x1f44b; 我是雪碧聊技术&#xff0c;今天给大家带来高并发编程中的核心概念——乐观锁与悲观锁的深度解析&#xff01;&#x1f4bb; 无论…

HTML前端性能优化完整指南

图片优化&#xff1a;性能优化的重中之重 重新审视图片的必要性 在开始优化之前&#xff0c;首先需要思考一个根本问题&#xff1a;要实现预期的视觉效果&#xff0c;真的需要使用图片吗&#xff1f; 随着Web技术的快速发展&#xff0c;许多以往只能通过图片实现的效果&…

数据炼金术:用Python做智能数据整理员

数据炼金术&#xff1a;用Python做智能数据整理员 解锁自动化魔法&#xff1a;文件批量重命名Excel智能清洗数据净化全流程实战 一、数据整理的困境与破局之道 你是否面临这些数据噩梦场景&#xff1f; &#x1f9e9; ​​混乱文件目录​​&#xff1a;最终版_报告_V4(1).doc…

HTML基础P1 | HTML基本元素

HTML标签标签名放在<>中&#xff0c;如<body>大部分标签成对出现&#xff0c;如<h1>为开始标签&#xff0c;</h1>为其对应的结束标签&#xff0c;少数标签只有开始标签&#xff0c;如换行标签<br/>&#xff0c;成为"单标签"有的标签中…

LVS集群搭建

集群是为了解决某个特定问题将多台计算机组合起来形成的单个系统知识点&#xff1a;1.关键术语&#xff1a;VS&#xff1a;Virtual Server&#xff08;调度器&#xff09;RS&#xff1a;Real Server&#xff08;真实服务器&#xff09;CIP&#xff1a;Client IP&#xff08;客户…

吴恩达《AI for everyone》第一周课程笔记

课程的核心目标&#xff1a;- AI是什么&#xff1f; - AI能做什么&#xff1f; - AI最擅长什么类型的任务&#xff1f; - AI怎么做决策&#xff1f; - 企业为什么需要AI战略&#xff1f;导航Machine Learning 机器学习> 最常见的机器学习类型&#xff1a; > 人工智能中最…

iOS App 电池消耗管理与优化 提升用户体验的完整指南

在当今智能手机的使用中&#xff0c;电池寿命和续航能力是用户选择App时的重要考虑因素之一。iOS设备的电池管理功能较为封闭&#xff0c;这也让开发者、产品经理以及普通用户对于App的电池消耗有时无法全面了解。而如果你的App因电池消耗过快而遭到用户卸载&#xff0c;无论功…

关于用git上传远程库的一些常见命令使用和常见问题:

克隆远程库gitee到本地用命令git clone git clone https://gitee.com/automated-piggy-senior/20250717-test.gitLinux/macOS 终端&#xff1a; 执行 touch readme.txt&#xff08;创建空文件&#xff09;&#xff0c;或 echo "这是说明文件" > readme.txt&#…

想删除表中重复数据,只留下一条,sql怎么写

PostgreSQL 方法: DELETE FROM tbl_case_model WHERE id NOT IN (SELECT MIN(id) -- 保留id最小的记录FROM tbl_case_modelGROUP BYcolumn1, -- 替换为实际重复列名column2, -- 继续添加重复列... -- [所有需要比较的列] );因为我这次遇到的情况比较特殊&#xff0…

微服务中token鉴权设计的4种方式

1. JWT鉴权 「概述」&#xff1a;JWT是一种用于双方之间安全传输信息的简洁的、URL安全的令牌标准。它基于JSON格式&#xff0c;包含三个部分&#xff1a;头部&#xff08;Header&#xff09;、负载&#xff08;Payload&#xff09;和签名&#xff08;Signature&#xff09;。J…

nodejs搭建

1.创建一个空文件夹&#xff0c;在vscode中打开 2.执行命令开启package文件 npm init -y3.设置根目录文件app.js 先执行 npm install express 命令安装 express 模块 执行 npm install cors 命令安装 cors 模块 // app.js const express require(express) const app express…

frp内网穿透(二)

frp内网穿透&#xff08;二&#xff09; 前言 前篇内网穿透 上面一文中已描述如何安装frp进行内网穿透&#xff0c;并配置ssh穿透连接内网服务器&#xff0c;本篇主要介绍如何配置web服务 使用场景 A服务器为公网服务器&#xff0c;B服务器为家庭中内网服务器&#xff0c;且B…

Spring 应用中 Swagger 2.0 迁移 OpenAPI 3.0 详解:配置、注解与实践

从 Swagger 2.0 到 OpenAPI 3.0 的升级指南 为什么升级 OpenAPI 3.0提供了更强大的功能、更简洁的配置和更好的性能&#xff0c;同时保持了与 Swagger 2.0 的基本兼容性。本文将详细介绍升级的各个步骤&#xff0c;并提供代码示例。 1. 依赖管理的变化 Swagger 2.0 依赖配置 &l…

用 Flink CEP 打造实时超时预警:从理论到实战

目录 1. Flink CEP 是什么?为什么它能让你的数据“开口说话”? 2. 超时预警的业务场景:从电商到物联网 3. Flink CEP 超时机制的核心原理 3.1 模式匹配与时间窗口 3.2 超时事件的处理 3.3 事件时间与水位线 3.4 核心组件一览 4. 实战案例:电商订单超时预警 4.1 准备…

Rocky Linux 9 源码包安装php7

Rocky Linux 9 源码包安装php7大家好&#xff01;我是星哥。尽管现在 PHP 版本已迭代至 8.x&#xff0c;但有时为了兼容遗留系统或特定应用需求&#xff0c;我们仍需部署特定版本的 PHP。最主要的是之前的项目采用的PHP7.3&#xff0c;未来兼容旧的项目&#xff0c; 今天&#…

uniapp+vue3+鸿蒙系统的开发

前言&#xff1a; uniappvue3鸿蒙系统的开发。 实现效果&#xff1a; 鸿蒙pad端真机测试效果-下面是正常的日志效果 实现步骤&#xff1a; 1、安装鸿蒙的开发工具&#xff0c;点击安装&#xff0c;注意版本不能太旧了 deveco-studio 2、下载下来是个压缩包&#xff0c;解压后…

【C++类和对象解密】面向对象编程的核心概念(下)

之前我们了解到构造函数是在对象实例化之时对对象完成初始化工作的一个函数。在我们不写时&#xff0c;编译器会自动生成构造函数。构造函数有一些特点&#xff0c;比如&#xff0c;他对内置类型不做处理&#xff0c;对自定义类型的成员会去调用其自身的构造。我们上篇文章还提…

Flutter基础(前端教程①②-序列帧动画)

&#x1f9e0; 核心思路总结​​彻底绕过 Image组件重建带来的性能瓶颈​​&#xff1a;不再让 setState重建包含 Image的 Widget 树&#xff08;这是开销大、可能导致闪烁的根源&#xff09;&#xff0c;改为使用底层画布 (Canvas) 直接绘制预先处理好的图像帧数据。好的&…

Qt添加dmp文件生成及pdb文件

1.Pdb文件生成 下图先通过构建生成Pdb文件&#xff0c;然后运行程序&#xff0c;通过提前准备的崩溃按钮使得程序崩溃&#xff0c;生成“dump文件”的演示。 # #添加dmp文件生成及pdb文件生成DEFINES QT_MESSAGELOGCONTEXT DEFINES QT_DEPRECATED_WARNINGS# # 添加DUMP文件…

opencv、torch、torchvision、tensorflow的区别

一、框架定位与核心差异PyTorch动态计算图&#xff1a;实时构建计算图支持Python原生控制流&#xff08;如循环/条件&#xff09;&#xff0c;调试便捷。学术主导&#xff1a;2025年工业部署份额24%&#xff0c;适合快速原型开发&#xff08;如无人机自动驾驶、情绪识别&#x…