两个实用且热门的 Python 爬虫案例,结合动态/静态网页抓取和反爬策略,附带详细代码和实现说明
在这个瞬息万变的世界里,保持一颗探索的心,永远怀揣梦想前行。即使有时会迷失方向,也不要忘记内心深处那盏指引你前进的明灯。它代表着你的希望、你的信念以及对未来的无限憧憬。每一个不曾起舞的日子,都是对生命的辜负;每一段努力拼搏的时光,都在为你的辉煌未来添砖加瓦。
相信自己拥有改变世界的力量。无论是通过小小的善举还是伟大的发明创造,你都有能力为这个世界带来积极的变化。你的存在本身就是一种奇迹,而你所追求的梦想则是让这个奇迹绽放光芒的源泉。即使前路漫漫,即使困难重重,也要坚信自己的潜力是无穷无尽的。
因此,请继续勇敢地追逐你的星辰大海,不畏艰难险阻,不怕孤独寂寞。因为在你心中燃烧的火焰,足以照亮整个宇宙。让每一天都成为展现自我价值的机会,用你的热情和努力去书写属于自己的传奇。因为你不仅是在为自己而活,更是在用自己的方式激励着周围的人。未来正等待着你去开创,而你是那个能够让它变得无比精彩的唯一人选。
讲解这些内容之前,先给大家上波小福利
你们最近有没有使用deep seek,是不是多问几次就服务器繁忙,我来告诉你如何解决,按步骤来
1、浏览器搜索硅基流动,点登录(我登录过,所以界面不一样,没关系哈)然后找到API密钥,自己生成一个密钥,复制一下刚刚生成的密钥

2、再然后浏览器搜索chatbox,安卓点APK下载,下载好之后开始配置,按步骤,API密钥介绍刚刚让你复制的那个

目录
Python爬虫是一种自动化程序,用于从互联网上抓取和提取数据
一、Python爬虫的核心作用
二、典型应用场景
三、技术实现流程
四、进阶技术栈
五、系统学习路径
六、推荐学习资源
七、注意事项
案例 1:静态网页爬虫 - 豆瓣电影 Top250
爬取目标
代码实现
数据存储示例(表格)
案例 2:动态网页爬虫 - 京东商品搜索(Selenium 模拟浏览器)
爬取目标
代码实现
反爬策略说明
关键注意事项
Python爬虫是一种自动化程序,用于从互联网上抓取和提取数据
一、Python爬虫的核心作用
-
数据采集:批量获取商品价格、新闻资讯、社交媒体内容等
-
数据分析:为机器学习/市场研究提供数据源
-
自动化测试:模拟用户操作进行网站监测
-
SEO优化:分析搜索引擎收录和排名
-
学术研究:收集论文数据或实验样本
二、典型应用场景
-
电商比价监控(如跟踪某价格波动)
-
舆情分析(抓取微博热点话题)
-
招聘信息聚合(整合各平台职位数据)
-
学术文献收集(批量下载论文摘要)
-
图像/视频资源归档
-
......
三、技术实现流程
-
目标分析(使用Chrome开发者工具审查网页结构)
-
请求模拟
python
import requests response = requests.get(url, headers=模拟浏览器头)
-
内容解析
python
from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'lxml') title = soup.select('div.content > h1::text')
-
数据存储
python
import pandas as pd pd.DataFrame(data).to_csv('result.csv')
-
反爬应对(处理验证码、IP轮换、请求限速)
四、进阶技术栈
-
动态页面处理:Selenium/Puppeteer
-
分布式爬虫:Scrapy-Redis框架
-
验证码破解:Tesseract OCR/深度学习模型
-
数据清洗:Pandas/Numpy
-
代理管理:IP池维护策略
五、系统学习路径,建议哈
-
基础阶段(2-4周):
-
Python语法核心(文件操作、异常处理)
-
HTML/CSS选择器与XPath表达式
-
HTTP协议与REST API原理
-
-
中级阶段(3-5周):
-
Scrapy框架项目实战
-
数据库存储(MySQL/MongoDB)
-
异步请求处理(aiohttp)
-
-
高级阶段(持续提升):
-
逆向工程(JS加密破解)
-
移动端数据抓取(App爬虫)
-
云部署与定时任务(Docker/Kubernetes)
-
六、推荐学习资源
交互式平台:
-
Scrapy官方文档(含多语言版本)
-
Requests高级用法指南
-
菜鸟教程-网络爬虫专题
视频课程:
-
慕课网《Python爬虫工程师系列》看过,我认为非常不错
-
Coursera《Web Scraping and APIs》
实战项目:
-
豆瓣电影TOP250数据采集
-
链家房产信息监控系统
-
微博热点实时追踪
-
跨境电商价格聚合平台
工具集合:
-
代理服务:快代理/ProxyMesh
-
验证码平台:联众打码
-
指纹管理:指纹浏览器
七、注意事项
-
合规性:
-
严格遵守robots.txt协议
-
控制请求频率(建议≥3秒/次)
-
避免抓取个人隐私数据
-
-
道德准则:
-
注明数据来源
-
不进行商业性数据转售
-
尊重网站服务条款
-
建议从简单的静态页面抓取开始,逐步过渡到动态网页和反爬策略应对。可通过GitHub参与开源爬虫项目(如scrapy-demos)获取实战经验。掌握Charles/Fiddler等抓包工具的使用将显著提升调试效率。
案例 1:静态网页爬虫 - 豆瓣电影 Top250
技术栈:requests + BeautifulSoup + pandas
爬取目标
-
电影名称、评分、导演、年份、简介、排名
代码实现
python
import requests from bs4 import BeautifulSoup import pandas as pddef get_douban_top250():headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}base_url = "https://movie.douban.com/top250"data = []for page in range(0, 250, 25): # 分页逻辑(共10页)url = f"{base_url}?start={page}"response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, "html.parser")for item in soup.find_all("div", class_="item"):title = item.find("span", class_="title").textrating = item.find("span", class_="rating_num").textinfo = item.find("div", class_="bd").p.get_text(strip=True).split("\n")[0]year = info.split("/")[0].strip()[-4:] # 提取年份director = info.split("/")[1].strip()data.append({"排名": item.find("em").text,"标题": title,"评分": rating,"导演": director,"年份": year})df = pd.DataFrame(data)df.to_csv("douban_top250.csv", index=False, encoding="utf-8-sig")if __name__ == "__main__":get_douban_top250()
数据存储示例(表格)
| 排名 | 标题 | 评分 | 导演 | 年份 |
|---|---|---|---|---|
| 1 | 肖申克的救赎 | 9.7 | 弗兰克·德拉邦特 | 1994 |
| 2 | 霸王别姬 | 9.6 | 陈凯歌 | 1993 |
案例 2:动态网页爬虫 - 京东商品搜索(Selenium 模拟浏览器)
技术栈:Selenium + ChromeDriver + lxml
爬取目标
-
商品名称、价格、店铺、评论数
代码实现
python
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service import pandas as pd import timedef get_jd_products(keyword="手机"):service = Service(executable_path="chromedriver.exe") # 需下载对应版本驱动driver = webdriver.Chrome(service=service)driver.get(f"https://search.jd.com/Search?keyword={keyword}")# 滚动页面加载动态内容for _ in range(3):driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(2)products = []items = driver.find_elements(By.CSS_SELECTOR, ".gl-item")for item in items:try:title = item.find_element(By.CSS_SELECTOR, ".p-name em").textprice = item.find_element(By.CSS_SELECTOR, ".p-price i").textshop = item.find_element(By.CSS_SELECTOR, ".p-shop a").textcomment = item.find_element(By.CSS_SELECTOR, ".p-commit a").textproducts.append({"标题": title,"价格": price,"店铺": shop,"评论数": comment})except Exception as e:print(f"解析失败: {e}")driver.quit()df = pd.DataFrame(products)df.to_excel("jd_products.xlsx", index=False)if __name__ == "__main__":get_jd_products()
反爬策略说明
| 策略 | 实现方法 |
|---|---|
| 请求头伪装 | 设置 User-Agent 模拟浏览器访问 |
| IP 代理轮换 | 使用付费代理服务(如快代理) |
| 动态加载处理 | Selenium 模拟滚动和点击 |
| 请求频率控制 | time.sleep(random.uniform(1,3)) |
关键注意事项
-
合法性:遵守
robots.txt和网站服务协议(豆瓣允许爬取,京东需谨慎) -
反爬突破:动态内容用 Selenium/Playwright,验证码需接入打码平台
-
效率优化:Scrapy 框架 + Redis 分布式爬虫(适合大规模采集)
-
数据清洗:使用
pandas或正则表达式处理原始数据
相关文章:
两个实用且热门的 Python 爬虫案例,结合动态/静态网页抓取和反爬策略,附带详细代码和实现说明
在这个瞬息万变的世界里,保持一颗探索的心,永远怀揣梦想前行。即使有时会迷失方向,也不要忘记内心深处那盏指引你前进的明灯。它代表着你的希望、你的信念以及对未来的无限憧憬。每一个不曾起舞的日子,都是对生命的辜负࿱…...
华象新闻 | 2月20日前谨慎升级 PostgreSQL 版本
各位 PostgreSQL 用户,建议近期进行升级 PostgreSQL 版本。 2月20日计划进行非周期性版本发布 PostgreSQL全球开发团队计划于2025年2月20日进行一次非周期性发布,以解决2025年2月13日更新版本中引入的一个回归问题。 2月13日的更新版本包括了17.3、16.7、…...
跳跃游戏 II - 贪心算法解法
问题描述: 给定一个长度为 n 的 0 索引整数数组 nums,我们从数组的第一个元素 nums[0] 开始。每个元素 nums[i] 表示从索引 i 可以跳跃的最大长度,换句话说,从位置 i,你可以跳到位置 i j,其中 0 < j &…...
图像质量评价指标-UCIQE-UIQM
一、评价指标UCIQE 在文章《An underwater color image quality evaluation metric》中,提到的了评价指标UCIQE(Underwater Colour Image Quality Evaluation),是一种无参考图像质量评价指标,主要用于评估水下图像的质…...
CentOS上安装WordPress
在CentOS上安装WordPress是一个相对直接的过程,可以通过多种方法完成,包括使用LAMP(Linux, Apache, MySQL, PHP)栈或使用更现代的LEMP(Linux, Nginx, MySQL, PHP)栈。 我选择的是(Linux, Nginx…...
Spring Boot 原理分析
spring-boot.version:2.4.3.RELEASE Spring Boot 依赖管理 spring-boot-starter-parent 配置文件管理 <resources> <resource> <directory>${basedir}/src/main/resources</directory> <filtering>true&l…...
Git 本地项目上传 GitHub 全指南(SSH Token 两种上传方式详细讲解)
前言:Git 与 GitHub 的区别与联系 在学习如何将本地项目上传到 GitHub 之前,先来弄清楚 Git 和 GitHub 的区别以及它们之间的联系。 对比项GitGitHub定义分布式版本控制系统(DVCS),用于本地和远程管理代码版本托管 G…...
jenkins服务启动-排错
服务状态为active (exited) 且进程不在 查看/etc/rc.d/init.d/jenkins配置 获取配置参数 [rootfy-jenkins-prod jenkins]# cat /etc/rc.d/init.d/jenkins | grep -v #JENKINS_WAR"/usr/lib/jenkins/jenkins.war" test -r "$JENKINS_WAR" || { echo "…...
CF 144A.Arrival of the General(Java实现)
题目分析 一个n个身高数据,问最高的到最前面,最矮的到最后面的最短交换次数 思路分析 首先,如果数据有重复项,例如示例二中,最矮的数据就是最后一个出现的数据位置,最高的数据就是最先出现的数据位置&…...
SAP-ABAP:SAP中REPORT程序和online程序的区别对比
在SAP中,REPORT程序和Online程序(通常指Dialog程序)是两种常见的ABAP程序类型,它们在用途、结构和用户交互方式上有显著区别。以下是它们的详细对比: 1. 用途 REPORT程序Online程序主要用于数据查询、报表生成和批量数…...
Java发展史
JavaEE的由来 语言的诞生 Java的前身是Oak语言,其目的是搞嵌入式开发开发智能面包机 叮~~~🍞🍞🍞 产品以失败告终 巅峰 网景公司需要网景浏览器打开网页,Oak->Java,进行前端开发(相关技…...
vue3--SVG图标的封装与使用
流程 终端输入- -安装下面这个包 npm install vite-plugin-svg-icons -Dvite.config.ts文件中引入 import {createSvgIconsPlugin} from vite-plugin-svg-iconsvite.config.ts文件中配置plugins选项 将下面代码 createSvgIconsPlugin({//用于指定包含 SVG 图标的文件夹路径…...
Datawhale Ollama教程笔记3
小白的看课思路: Ollama REST API 是什么? 想象一下,你有一个智能的“盒子”(Ollama),里面装了很多聪明的“小助手”(语言模型)。如果你想让这些“小助手”帮你完成一些任务&#…...
学习数据结构(10)栈和队列下+二叉树(堆)上
1.关于栈和队列的算法题 (1)用队列实现栈 解法一:(参考代码) 题目要求实现六个函数,分别是栈初始化,入栈,移除并返回栈顶元素,返回栈顶元素,判空࿰…...
洛谷 P3660 USACO17FEB Why Did the Cow Cross the Road III 题解
题意 有一个圆,圆周上按顺时针方向给出 2 n 2n 2n个点。第 i i i个点的颜色是 c o l o r i color_i colori,其中数据保证 1 ≤ c o l o r i ≤ n 1\le color_i\le n 1≤colori≤n,而且每种不同的颜色有且只有两个点。不存在位置重叠的点…...
【数据结构】(9) 优先级队列(堆)
一、优先级队列 优先级队列不同于队列,队列是先进先出,优先级队列是优先级最高的先出。一般有两种操作:返回最高优先级对象,添加一个新对象。 二、堆 2.1、什么是堆 堆也是一种数据结构,是一棵完全二叉树,…...
如何提升爬虫获取数据的准确性?
提升爬虫获取数据的准确性是确保数据分析和后续应用有效性的关键。以下是一些经过验证的方法和最佳实践,可以帮助提高爬虫数据的准确性: 1. 数据清洗 数据清洗是提升数据准确性的重要步骤,主要包括去除重复数据、处理缺失值和异常值。 去除…...
Obsidian及Zotero常用的插件
Obsidian插件 Minimal Theme Settings(Life,zotero)【必需】 界面样式设置所需插件 Style Settings(Life,zotero)【必需】界面样式设置所需插件 Recent Files(Life,zotero…...
闲鱼IP属地是通过电话号码吗?
在闲鱼这样的二手交易平台上,用户的IP属地信息对于维护交易安全、增强用户间的信任至关重要。然而,关于闲鱼IP属地是如何确定的,不少用户存在疑惑,尤其是它与电话号码之间是否存在关联。本文将深入探讨这一问题,揭示闲…...
C#多线程异步连接MySQL与SQLserver数据库
C#多线程异步连接MySQL与SQLserver数据库 一、前言二、多线程异步连接数据库代码2.1代码块2.2代码说明 参考文档 一、前言 当编写代码连接多台设备上的数据库时,如果采用同步逐个连接的方式,在网络畅通的情况下连接速度尚可,但当其中一台设备…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
