Python爬虫(二):爬虫完整流程

news2025/6/12 19:47:39

爬虫完整流程详解(7大核心步骤+实战技巧)

一、爬虫完整工作流程

以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明:

1. 目标分析与前期准备

  • 网站技术分析
    • 使用浏览器开发者工具(F12)检查:
      • Network面板查看数据加载方式(XHR请求/静态HTML)
      • Elements面板分析DOM结构
    • 识别反爬机制:
      • 检查robots.txt(如:https://www.zhihu.com/robots.txt)
      • 测试直接访问是否返回完整数据
  • 法律风险评估
    • 检查网站服务条款(如微博禁止未经授权的爬取)
    • 控制爬取频率(建议≥3秒/请求)

实战案例:爬取知乎热榜需要先模拟登录获取cookies

2. 发送HTTP请求(核心环节)

请求方式选择
场景工具示例代码
简单静态页requestsrequests.get(url, headers=headers)
动态渲染页seleniumdriver.get(url); html = driver.page_source
大规模爬取Scrapyyield scrapy.Request(url, callback=self.parse)
关键请求参数
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Cookie": "session_id=abc123",
    "Referer": "https://www.example.com"
}

proxies = {
    "http": "http://10.10.1.10:3128",
    "https": "http://10.10.1.10:1080"
}

response = requests.get(
    url,
    headers=headers,
    proxies=proxies,
    timeout=10
)
高级技巧
  • 自动重试机制(应对429/503错误)
from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(3))
def fetch_url(url):
    return requests.get(url)

3. 内容解析(数据提取核心)

解析工具对比
工具速度易用性适用场景示例
BeautifulSoup★★★★★简单页面soup.select('div.main')
lxml★★★★XPath复杂查询tree.xpath('//div[@class="main"]')
PyQuery★★★★jQuery风格doc('div.main').text()
**实战解析示例
# BeautifulSoup + CSS选择器
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
titles = [h2.text for h2 in soup.select('h2.title')]

# lxml + XPath(适合复杂嵌套)
from lxml import etree
tree = etree.HTML(html)
prices = tree.xpath('//span[@class="price"]/text()')

# 正则表达式(提取特定模式)
import re
phones = re.findall(r'1[3-9]\d{9}', html)

4. 数据清洗与验证

  • 文本处理
    • 去除空白字符:text.strip()
    • 统一编码:text.encode('utf-8').decode('utf-8')
  • 数据验证
    • 手机号校验:re.match(r'^1[3-9]\d{9}$', phone)
    • 邮箱校验:re.match(r'^[\w.-]+@[\w.-]+\.\w+$', email)

5. 数据存储方案

存储方式对比
存储类型优点缺点适用场景
CSV无需数据库,Excel可打开无索引,查询慢小型数据集(<10万条)
MySQL支持复杂查询,事务需要维护数据库结构化数据存储
MongoDB灵活Schema,适合JSON占用内存大非结构化数据(如网页快照)
Redis内存存储,速度快数据易丢失临时缓存/去重队列
**代码示例
# CSV存储
import csv
with open('data.csv', 'a', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['title', 'price'])

# MySQL存储
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', db='spider')
cursor = conn.cursor()
cursor.execute("INSERT INTO products VALUES (%s, %s)", ('iPhone', 5999))
conn.commit()

# MongoDB存储
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['spider_db']
db.products.insert_one({"name": "iPhone", "price": 5999})

6. 反爬对抗策略

常见反爬手段及破解方法
反爬类型破解方案实现代码
User-Agent检测轮换UAheaders['User-Agent'] = random.choice(ua_list)
IP限制代理IP池requests.get(url, proxies={"http": proxy})
验证码OCR识别/打码平台使用ddddocr
行为分析模拟鼠标移动selenium.ActionChains(driver).move_by_offset(10, 20)
高级技巧
  • 浏览器指纹模拟(使用undetected-chromedriver
  • WebSocket协议抓取(如股票实时数据)
  • 分布式爬虫架构(Scrapy+Redis)

7. 任务调度与监控

  • 定时任务
    • 简单方案:APScheduler
    from apscheduler.schedulers.blocking import BlockingScheduler
    sched = BlockingScheduler()
    @sched.scheduled_job('interval', hours=1)
    def job():
        run_spider()
    sched.start()
    
  • 异常监控
    • 邮件报警:smtplib发送错误日志
    • Prometheus+Grafana监控爬虫状态

二、完整爬虫项目架构

├── spiders/                  # 爬虫核心
│   ├── base_spider.py        # 基础爬虫类
│   ├── zhihu_spider.py       # 知乎爬虫实现
│   └── douban_spider.py      # 豆瓣爬虫实现
├── utils/
│   ├── proxy.py              # 代理IP管理
│   ├── captcha.py            # 验证码处理
│   └── logger.py             # 日志系统
├── storage/
│   ├── mysql_client.py       # 数据库操作
│   └── file_store.py         # 文件存储
└── config.py                 # 全局配置

三、性能优化要点

  1. 并发控制

    • 多线程:concurrent.futures.ThreadPoolExecutor
    • 异步IO:aiohttp + asyncio
    import aiohttp
    async def fetch(session, url):
        async with session.get(url) as response:
            return await response.text()
    
  2. 缓存利用

    • 使用requests-cache避免重复请求
    import requests_cache
    requests_cache.install_cache('demo_cache')
    
  3. 增量爬取

    • 记录已爬URL:Redis集合去重
    • 基于时间戳:只爬取last_modified之后的数据

四、法律与道德规范

  1. 遵守robots.txt协议
  2. 控制爬取频率(≥3秒/请求)
  3. 不爬取敏感数据(用户隐私、商业秘密)
  4. 商用前获取网站授权

五、学习路线建议

  1. 初级阶段:requests + BeautifulSoup实战
  2. 中级阶段:Scrapy框架 + 反爬破解
  3. 高级阶段:
    • 分布式爬虫(Scrapy-Redis)
    • 智能解析(机器学习识别页面结构)
    • 浏览器自动化集群(Selenium Grid)

建议从豆瓣电影Top250这类开放数据开始练习,逐步挑战更复杂的网站如电商、社交媒体平台。

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

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

相关文章

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…