Python爬虫之入门保姆级教程

目录

一、分析要爬取的网站

二、导入相关库

三、相关的参数

四、向网站发出请求(使用代理IP)

五、匹配

六、获取图片,保存到文件夹中(os库)

七、完整代码

总结


相信许多人都曾为如何入门Python爬虫而烦恼。今天,我将以一个有趣的案例为引子,为大家详细介绍如何使用Python进行简单的爬虫实践。

一、分析要爬取的网站

在开始编写爬虫之前,我们需要了解要爬取的网站的结构和数据来源。以一个图片网站为例,我们需要爬取图片信息并保存。为了更好地理解网页结构,我们可以使用开发者工具来分析网页的HTML代码,并找到需要爬取的数据所在的标签和属性。

二、导入相关库

为了进行爬虫编程,我们需要导入相关的库。其中,requests库用于向目标网站发出请求,获取网页内容;而BeautifulSoup库则用于解析网页内容,方便我们提取所需数据。我们还将使用re库来进行正则表达式匹配,以及os库来保存图片到本地文件夹。

import requests  
from bs4 import BeautifulSoup  
import re  
import os

三、相关的参数

在进行爬虫编程时,有一些参数需要我们注意。例如,user-agentcookie等。user-agent用于模拟浏览器行为,防止被目标网站识别为爬虫而被封锁;cookie则用于保存用户登录状态,方便后续请求。为了设置user-agentcookie,我们可以在请求头中添加相应的字段,具体代码示例将在后续步骤中介绍。

headers = {  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537',  'Cookie': 'your cookie here'  
}  
proxy = {  'http': 'http://168.168.168.168:16888',  'https': 'http://168.168.168.168:16888'  
}

四、向网站发出请求(使用代理IP)

为了防止一些反爬虫措施,我们需要使用代理IP向网站发出请求。我们可以购买代理IP服务或者使用免费的代理IP。在本例中,我们将使站大爷代理IP。使用代理IP时需要将其设置为HTTP请求的代理服务器地址,这样就能通过代理IP发送请求,从而避免封锁。

url = 'http://www.example.com/'  
response = requests.get(url, headers=headers, proxies=proxy, timeout=10)  
html = response.text

五、匹配

在这一部分,我们需要讲解如何通过正则表达式或其他方式匹配数据,如何提取有用信息并处理过滤掉无用信息。

例如,我们可以使用正则表达式匹配图片内容。具体来说,我们可以使用BeautifulSoup库中的find_all方法来解析HTML内容,并使用正则表达式来匹配所需的标题和内容信息。此外,我们还可以使用过滤器来过滤掉无关的标签和属性,从而提取出所需的数据。

soup = BeautifulSoup(html, 'lxml')  
img_tags = soup.find_all('img')  
image_paths = []  
for img in img_tags:  if re.search(r'<img[^>]+src="([^">]+)"', img['src']):  img_url = img['src']  img_path = os.path.join('news_images', img_url.split('/')[-1])  if not os.path.exists(img_path):  try:  response = requests.get(img_url, proxies=proxy, timeout=10)  with open(img_path, 'wb') as f:  f.write(response.content)  except requests.exceptions.RequestException as e:  print('请求错误,错误信息:', e)  continue  image_paths.append(img_path)

六、获取图片,保存到文件夹中(os库)

获取图片并保存到文件夹中需要使用os库。首先,我们需要创建文件夹并设置相应的权限,然后将匹配到的图片下载并保存到该文件夹中。具体来说,我们可以使用BeautifulSoup库中的find方法来解析图片标签,并获取图片的URL地址。然后使用requests库中的get方法来下载图片,最后使用os库中的open方法将图片保存到本地文件夹中。需要注意的是,下载图片时需要设置适当的超时时间和异常处理机制,以避免长时间等待或失败重试等问题。

if not os.path.exists('news_images'):  os.makedirs('news_images')

七、完整代码

在这一部分,我们将提供完整的代码示例,包括所有步骤的代码,可运行并取得所需结果。请注意,以下代码仅供参考,实际情况可能因网站更新而有所变化。在编写代码时,我们可以将相关代码封装成函数或类,以便于维护和复用。另外,我们还可以添加适当的注释来解释代码的作用和原理。

import requests  
from bs4 import BeautifulSoup  
import re  
import os  # 设置相关参数  
headers = {  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537',  'Cookie': 'your cookie here'  
}  
proxy = {  'http': 'http://168.168.168.168:16888',  'https': 'http://168.168.168.168:16888'  
}  # 向网站发出请求(使用站大爷代理IP)  
url = 'http://www.example.com/'  
response = requests.get(url, headers=headers, proxies=proxy, timeout=10)  
html = response.text  # 解析网页内容,提取图片信息  
soup = BeautifulSoup(html, 'lxml')  
img_tags = soup.find_all('img')  
image_paths = []  
for img in img_tags:  if re.search(r'<img[^>]+src="([^">]+)"', img['src']):  img_url = img['src']  img_path = os.path.join('news_images', img_url.split('/')[-1])  if not os.path.exists(img_path):  try:  response = requests.get(img_url, proxies=proxy, timeout=10)  with open(img_path, 'wb') as f:  f.write(response.content)  except requests.exceptions.RequestException as e:  print('请求错误,错误信息:', e)  continue  image_paths.append(img_path)  # 创建文件夹并保存图片  
if not os.path.exists('news_images'):  os.makedirs('news_images')

总结

在本篇文章中,我们介绍了如何使用Python进行简单的爬虫实践。通过分析要爬取的网站、导入相关库、设置相关参数、使用代理IP、匹配数据以及获取图片等步骤,我们成功地爬取了图片信息,并将图片保存到了本地文件夹中。

我们还讨论了爬虫的合法性和道德性,强调在爬取数据时应该遵守网站的规定和法律法规,不侵犯他人的合法权益。希望这篇文章能够帮助大家更好地入门Python爬虫,为日后的数据分析和机器学习工作做好准备!

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

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

相关文章

FastChat 大模型部署推理;Baichuan2-13B-Chat测试、chatglm2-6b测试

参考&#xff1a; https://github.com/lm-sys/FastChat https://blog.csdn.net/qq128252/article/details/132759107 ##安装 pip3 install "fschat[model_worker,webui]"模型下载&#xff1a; ##模型下载&#xff1b;huggingface下载慢&#xff0c;可以在modelscop…

Java中的抽象类(看这篇就够了)

在Java中&#xff0c;抽象类&#xff08;Abstract Class&#xff09;是一种不能被实例化的类&#xff0c;它通常用于作为其他类的基类&#xff0c;提供一些通用的行为和结构。以下是关于Java抽象类的一些重要信息&#xff1a; 定义抽象类&#xff1a; 使用 abstract 关键字来定…

安防视频平台EasyCVR视频调阅全屏播放显示异常是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

执行上下文,js、React、HTML中的this

目录 执行上下文属性&#xff1a;变量对象、this&#xff0c;作用域链 变量对象是与执行上下文相关的数据作用域&#xff0c;存储&#xff1a;变量、函数声明 执行上下文生命周期 创建&#xff1a;生成变量对象、创建函数作用域&#xff0c;建立作用域链、确定this的指向 …

勒索病毒最新变种.mallab勒索病毒来袭,如何恢复受感染的数据?

导言&#xff1a; 在当今数字化时代&#xff0c;.mallab勒索病毒以其险恶的特性和神秘的名称引起了广泛关注。为了更深入了解这种威胁&#xff0c;我们需要揭示.mallab勒索病毒背后的神秘面纱&#xff0c;了解它的运作方式以及预防它的方法。如果受感染的数据确实有恢复的价值…

【python学习第9节笔记,面向对象(继承,封装,多态),zip函数,with语句】

文章目录 一&#xff0c;面向对象&#xff08;继承&#xff0c;封装&#xff0c;多态&#xff09;1.1封装1.2继承/派生1.3多态1.3.1纯虚函数 二&#xff0c;zip函数三&#xff0c;with语句 一&#xff0c;面向对象&#xff08;继承&#xff0c;封装&#xff0c;多态&#xff09…

代码随想录day50:动态规划

123.买卖股票的最佳时期II 规则改成最多买卖两次&#xff1a;即0&#xff0c;1&#xff0c;2次 1.定义dp数组&#xff1a;本题一共有五种状态&#xff1a;初始状态&#xff0c;第一次持有股票&#xff0c;第一次卖出股票&#xff0c;第二次持有股票&#xff0c;第二次卖出股票…

经典文献阅读之--EGO-Planner(无ESDF的四旋翼局部规划器)

0. 简介 作为局部规划器而言&#xff0c;当机器人或无人机想要避开动态障碍物时。局部规划器就显得尤为重要了。其中基于梯度的规划器被广泛用于四旋翼无人机的局部规划&#xff0c;其中欧几里得符号距离场&#xff08;ESDF&#xff09;对于评估梯度幅度和方向至关重要。然而&…

ARINC825规范简介

ARINC825规范简介 机载CAN网络通用标准 ARINC825规范全称为机载CAN网络通用标准&#xff08;The General Standardization of CAN for Airborne Use&#xff09;。顾名思义&#xff0c;ARINC825规范是建立在CAN物理网络基础上的高层规范。CAN网络使用共享的双绞电缆传输数据&…

电压放大器在无损探伤中的应用研究

电压放大器是一种常见的电子设备&#xff0c;其主要作用是将低电平信号转换为高电平信号。在无损探伤中&#xff0c;电压放大器被广泛应用于信号增益和分析&#xff0c;以便更好地检测表面或内部缺陷。下面安泰电子Aigtek将详细介绍电压放大器在无损探伤中的应用研究。 电压放大…

动态分配的内存位置在哪里?

在C++中,动态分配的内存位于称为堆(Heap)的内存区域。以下是一些关于堆和其他相关内存区域的基本信息: 堆(Heap): 这是一个用于动态内存分配的内存区域。使用new(C++)或malloc(C)等函数从堆中分配内存,并使用delete(C++)或free(C)释放这些内存。堆的大小通常受…

分析训练速度慢

一、分析GPU nvidia-smi二、分析CPU使用率 htop查看cpu96个核的使用率 三、分析磁盘IO apt-get install iotop iotop分析GPU和CPU都没有使用完&#xff0c;瓶颈在磁盘IO。 四、磁盘IO瓶颈解决方法 1、拼成一张图片&#xff0c; 2、多张图内存拼在一起&#xff0c; 3、增大磁…

二、vue2脚手架-组件化开发

| vue中的图片打包后会转换为base64格式 组件的使用 1.创建组件&#xff1a;component文件夹中创建HelloWorld.vue文件 2.在app.vue中引入组件 组件间的通信/传值&#xff08;常用&#xff09; 一、prop父传子 1.App.vue中的引入组件中创建需要传递的数据 2.在子组件中接…

车厂造手机旗舰版售价6899,不只是个“车钥匙”

大伙应该发现了这两年的一个奇怪现象&#xff1a;造手机的跑去造车&#xff0c;而车厂又跑来造手机。 这也好解释&#xff0c;毕竟别人碗里的更香、别人老氵…板先挑衅是吧&#xff1f; 昨日&#xff0c;蔚来在其创新科技日活动中正式发布了传闻已久的手机产品 NIO Phone 。 …

掌动智能兼容性测试有哪些优势

兼容性测试为企业带来市场竞争优势&#xff0c;并提高用户满意度。在软件开发过程中&#xff0c;将兼容性测试作为一个重要的环节&#xff0c;将为企业的成功和用户满意度打下坚实的基础。那么&#xff0c;掌动智能兼容性测试的具体优势是什么?下面&#xff0c;就来看看具体介…

Linux下压缩和解压缩

在Linux下&#xff0c;您可以使用多种命令来进行文件和目录的压缩和解压缩操作。以下是一些常见的压缩和解压缩命令&#xff1a; tar&#xff1a;tar命令可用于创建和提取tar压缩文件。例如&#xff0c;要创建一个名为archive.tar的.tar文件&#xff0c;可以使用以下命令&#…

mdobus ASCII转CAN OPEN JAE1939协议网关

Modbus RTU协议转换网关是一种常见的设备&#xff0c;用于将Modbus RTU协议转换为其他通信协议。而CANopen是一种基于CAN总线的通信协议&#xff0c;主要用于工业自动化和控制系统中。本文将介绍Modbus RTU协议转换网关如何支持CANopen协议&#xff0c;以及该功能的应用场景和优…

【1】ElementUI 组件实际应用===》按钮的使用

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。个人B站主页热爱技术的小郑 &#xff0c;视频内容主要是对应文章的视频讲解形式。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘…

【JAVA EE】详解单点登录

作者简介 目录 1.概述 2.实现方案 2.1.分散鉴权 2.2.集中鉴权 1.概述 SSO&#xff0c;即进行一次认证&#xff0c;然后就可以访问所有子系统。很明显SSO只是一种具象化的目标而已&#xff0c;目前业内为了实现单点登录、统一鉴权&#xff0c;提出了一系列的打法。比如直接…

golang漏洞扫描工具,看看自己项目有没有坑

最近发现 Go 官方自己推出了新的工具&#xff0c;作用是漏洞管理&#xff0c;告诉你已报告的漏洞&#xff0c;并告知你应该如何升级到什么版本。 版本要求是&#xff1a;Go > 1.18 go install golang.org/x/vuln/cmd/govulnchecklatest进入项目目录govulncheck ./...输出如…