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…

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

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

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

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

经典文献阅读之--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将详细介绍电压放大器在无损探伤中的应用研究。 电压放大…

二、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;就来看看具体介…

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;提出了一系列的打法。比如直接…

Unity3D C# 反射与特性的配合使用

需求分析 情况&#xff1a; 假如我们是一个动物园的管理员&#xff0c;我们需要统计园内的所有动物和动物的行为。 举例&#xff1a; 现在园区内有猫、狗和鸡。猫对应的行为是喵喵喵和卖萌&#xff0c;狗对应狗吠和干饭&#xff0c;鸡对应篮球和打鸣那么这时候我要统计这些&a…

Lyapunov optimization 李雅普诺夫优化

文章目录 正文引言Lyapunov drift for queueing networks 排队网络的Lyapunov漂移Quadratic Lyapunov functions 二次李雅普诺夫函数Bounding the Lyapunov drift 李亚普诺夫漂移的边界A basic Lyapunov drift theorem 一个基本的李雅普诺夫漂移定理 Lyapunov optimization for…

【C++】手撕string(string的模拟实现)

手撕string目录&#xff1a; 一、 Member functions 1.1 constructor 1.2 Copy constructor&#xff08;代码重构&#xff1a;传统写法和现代写法&#xff09; 1.3 operator&#xff08;代码重构&#xff1a;现代写法超级牛逼&#xff09; 1.4 destructor 二、Other mem…

【算法思想】贪心

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

探索ClickHouse——使用Projection加速查询

在测试Projection之前&#xff0c;我们需要先创建一张表&#xff0c;并导入大量数据。 我们可以直接使用指令&#xff0c;从URL指向的文件中获取内容并导入表。但是担心网络不稳定&#xff0c;我们先将文件下载下来。 下载文件 wget wget http://prod.publicdata.landregistr…

项目开发中使用Date和LocalDateTime处理日期

文章目录 项目开发中使用Date和LocalDateTime处理日期Date类型验证数据库表设计&#xff08;年月日情况&#xff09;实体类说明映射文件xml响应展示情况注意事项 LocalDateTime验证数据库设计实体类日期类型动态SQL日期类型响应展示情况 总结 项目开发中使用Date和LocalDateTim…

Windows10/11显示文件扩展名 修改文件后缀名教程

前言 写这篇文章的原因是由于我分享的教程中的文件、安装包基本都是存在阿里云盘的&#xff0c;下载后需要改后缀名才能使用。 但是好多同学不会改。。 Windows 10 随便打开一个文件夹&#xff0c;在上方工具栏点击 “查看”点击 “查看” 后下方会显示更详细的工具栏然后点…

SPA项目之登录注册--请求问题(POSTGET)以及跨域问题

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于VueElementUI的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.ElementUI是什么 &#x1f4a1;…