Python爬虫之入门保姆级教程

news2024/11/27 8:26:25

目录

一、分析要爬取的网站

二、导入相关库

三、相关的参数

四、向网站发出请求(使用代理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.coloradmin.cn/o/1042386.html

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

相关文章

MySQL 权限变更,何时生效?

本文讲述了对三种级别权限的变更后&#xff0c;使其生效的方法。 作者&#xff1a;欧阳涵&#xff0c;爱可生团队 DBA 成员&#xff0c;看到下雨知道要打伞的 2.5 次元爱好者~ 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源…

springCloud和springboot升级

一、引言 springCloud和springBoot较低版本有时候会有网络漏洞&#xff0c;所以随着springCloud和springBoot的升级会修复这些漏洞。那么有时候就遇到在升级过程中&#xff0c;遇到不兼容的问题。需要总结下来记录一下。 二、springBoot和springCloud的使用 1、springBoot的引…

【2023年11月第四版教材】第15章《风险管理》(第三部分)

第15章《风险管理》&#xff08;第三部分&#xff09; 5 过程1-规划风险管理6 过程2-识别风险6.1 识别风险★★★6.2 数据收集★★★6.3 数据分析★★★ 7 过程3-实施定性风险分析7.1 实施定性风险分析7.2 数据分析★★★7.3 数据表现★★★7.4 项目文件&#xff08;更新&#…

Java诊断利器Arthas安装和使用

下载 curl -O https://alibaba.github.io/arthas/arthas-boot.jar先启动java项目&#xff0c;然后再启动 arthas-boot.jar 第一次使用arthas的时候&#xff0c;先按1&#xff08;后面没有对应类的&#xff09;安装上arthas 粘附一个进程 常用命令 dashboard 命令&#xff1a…

安防监控/视频汇聚平台EasyCVR云端录像不展示该是什么原因?该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

中国首个接入大模型的Linux操作系统;ChatGPT支持图片和语音输入;抖音上线方言自动翻译功能丨RTE开发者日报 Vol.57

开发者朋友们大家好&#xff1a; 这里是「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

【强化学习】01—— 强化学习简介

文章目录 两种机器学习类型强化学习定义强化学习交互过程强化学习系统要素历史(History)状态(State)策略(Policy)奖励(Reward)价值函数(Value Function)模型(Model)迷宫例子 强化学习智能体分类参考 两种机器学习类型 监督学习/无监督学习/强化学习/机器学习之间的关系 预测 根…

React的高阶函数

1.认识高阶函数 高阶组件 本身不是一个组件&#xff0c;而是一个函数函数的参数是一个组件&#xff0c;返回值也是一个组件 高阶组件的定义 import ThemeContext from "../context/theme_context"function withTheme(OriginComponent) {return (props) > {retur…

反序列化相关

1.序列化serialize() 把一个对象变成可以传输的字符串&#xff0c;目的就是为了方便传输。 2. 反序列化unserialize() 把被序列化的字符串还原为对象 java 将java对象转化为字节序列的过程&#xff0c;反序列化的过程就是 1.创建一个对象输出流 2.通过对象输出流的readobject(…

Blender DreamUV插件使用简明教程

DreamUV 是一个可让你在Blender的 3D 视口中操纵 UV的工具集合。 该工具集设计用于可重复使用的纹理&#xff0c;例如平铺纹理、装饰表和纹理图集。 其目的是让你无需退出 3D 视图即可对几何体进行纹理处理&#xff0c;从而节省时间并提高灵活性。 1、安装DreamUV 首先下载为…

C++新经典 | C++ 查漏补缺(智能指针)

目录 一、动态分配 1.初始化的三种方式 2. 释放内存 &#xff08;1&#xff09;悬空指针 3.创建新工程与观察内存泄漏 二、深入了解new/delete关键字 1.new和delete 2.operator new()和operator delete() 3.申请和释放一个数组 三、智能指针 1.shared_ptr &#xff0…

十大排序——2.归并排序

这篇文章我们来讲一下十大排序中的归并排序。 目录 1.概述 2.代码实现 3.总结 1.概述 归并排序主要是运用了归并的思想。 下面具体的来讲一下归并排序的整个流程和思想。 首先&#xff0c;给你一个无序的数组&#xff0c;要求你对它进行归并排序。归并排序首先需要将这个…

开始报名!龙蜥社区走进 Arm MeetUp 议程硬核剧透来了

「龙蜥社区“走进系列”MeetUp」是由龙蜥社区与生态合作伙伴联合主办的系列月度活动&#xff0c;每期走进一家企业&#xff0c;聚焦龙蜥社区和合作伙伴的技术、产品和创新动态&#xff0c;展示硬核技术&#xff0c;共建繁荣生态。 《聚焦 Arm 性能提升&#xff0c;助力龙蜥生态…

修炼k8s+flink+hdfs+dlink(一:安装hdfs)

一&#xff1a;安装jdk&#xff0c;并配置环境变量。 在对应的所有的节点上进行安装。 mkdir /opt/app/java cd /opt/app/java wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24http%3A%2F%2Fwww.oracle.com% 2F; oraclelicenseaccept-securebackup…

为什么手动采购管理会危及你的工作流程?

你是否经常在找到一张发票后&#xff0c;却被告知该发票未经财务批准&#xff1f;多少次因为关键文件放错位置或处理不当而丢失订单&#xff1f; 如果答案是 “经常”&#xff0c;那么你还在采用的传统手动采购策略是时候彻底改变了。 2023年了&#xff0c;仍旧依赖手动采购管…

STL排序、拷贝和替换算法

目录 常用排序算法sort 常用排序算法random_shuffle 常用排序算法merge 常用排序算法reverse 常用拷贝和替换算法copy 常用拷贝和替换算法replace 常用拷贝和替换算法replace_if 常用拷贝和替换算法swap 常用排序算法sort sort(iterator begp iterator end,_Pred); //…

羧基荧光素-氨基.盐酸盐,FAM-NH2.HCl,138589-19-2

产品简介&#xff1a;5-FAM-NH2.HCl(羧基荧光素-氨基.盐酸盐)其中异硫氰酸荧光素(FITC)具有比较高的活性,通常来说,在固相合成过程中引 入该种荧光基团相对于其他荧光素要更容易,并且反应过程中不需要加入活化试剂。可以用来修饰蛋白质、多肽以及其他活性基团材料或者小分子。 …

【LeetCode热题100】--54.螺旋矩阵

54.螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 按层遍历 可以将矩阵看成若干层&#xff0c;首先输出最外层的元素&#xff0c;其次输出次外层的元素&#xff0c;直到输出最内层的元素。 对于每层&…

视频汇聚/安防监控平台EasyCVR指定到新的硬盘进行存储录像,如何自动挂载该磁盘?

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

在Pyppeteer中实现反爬虫策略和数据保护

爬虫是我们获取互联网数据的神奇工具&#xff0c;但是面对越来越严格的反爬虫措施&#xff0c;我们需要一些我们获取数据的利器来克服这些障碍。本文将带您一起探索如何使用Pyppeteer库来应对这些挑战。 Pyppeteer是一个基于Python的无头浏览器控制库&#xff0c;它提供了与Chr…