当前位置: 首页 > news >正文

两个实用且热门的 Python 爬虫案例,结合动态/静态网页抓取和反爬策略,附带详细代码和实现说明

在这个瞬息万变的世界里,保持一颗探索的心,永远怀揣梦想前行。即使有时会迷失方向,也不要忘记内心深处那盏指引你前进的明灯。它代表着你的希望、你的信念以及对未来的无限憧憬。每一个不曾起舞的日子,都是对生命的辜负;每一段努力拼搏的时光,都在为你的辉煌未来添砖加瓦。

相信自己拥有改变世界的力量。无论是通过小小的善举还是伟大的发明创造,你都有能力为这个世界带来积极的变化。你的存在本身就是一种奇迹,而你所追求的梦想则是让这个奇迹绽放光芒的源泉。即使前路漫漫,即使困难重重,也要坚信自己的潜力是无穷无尽的。

因此,请继续勇敢地追逐你的星辰大海,不畏艰难险阻,不怕孤独寂寞。因为在你心中燃烧的火焰,足以照亮整个宇宙。让每一天都成为展现自我价值的机会,用你的热情和努力去书写属于自己的传奇。因为你不仅是在为自己而活,更是在用自己的方式激励着周围的人。未来正等待着你去开创,而你是那个能够让它变得无比精彩的唯一人选。

讲解这些内容之前,先给大家上波小福利

你们最近有没有使用deep seek,是不是多问几次就服务器繁忙,我来告诉你如何解决,按步骤来

1、浏览器搜索硅基流动,点登录(我登录过,所以界面不一样,没关系哈)然后找到API密钥,自己生成一个密钥,复制一下刚刚生成的密钥

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

目录

Python爬虫是一种自动化程序,用于从互联网上抓取和提取数据

一、Python爬虫的核心作用

二、典型应用场景

三、技术实现流程

四、进阶技术栈

五、系统学习路径

六、推荐学习资源

七、注意事项

案例 1:静态网页爬虫 - 豆瓣电影 Top250

爬取目标

代码实现

数据存储示例(表格)

案例 2:动态网页爬虫 - 京东商品搜索(Selenium 模拟浏览器)

爬取目标

代码实现

反爬策略说明

关键注意事项


Python爬虫是一种自动化程序,用于从互联网上抓取和提取数据

一、Python爬虫的核心作用

  1. 数据采集:批量获取商品价格、新闻资讯、社交媒体内容等

  2. 数据分析:为机器学习/市场研究提供数据源

  3. 自动化测试:模拟用户操作进行网站监测

  4. SEO优化:分析搜索引擎收录和排名

  5. 学术研究:收集论文数据或实验样本

二、典型应用场景

  • 电商比价监控(如跟踪某价格波动)

  • 舆情分析(抓取微博热点话题)

  • 招聘信息聚合(整合各平台职位数据)

  • 学术文献收集(批量下载论文摘要)

  • 图像/视频资源归档

  • ......

三、技术实现流程

  1. 目标分析(使用Chrome开发者工具审查网页结构)

  2. 请求模拟

python

import requests
response = requests.get(url, headers=模拟浏览器头)

  1. 内容解析

python

from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'lxml')
title = soup.select('div.content > h1::text')

  1. 数据存储

python

import pandas as pd
pd.DataFrame(data).to_csv('result.csv')

  1. 反爬应对(处理验证码、IP轮换、请求限速)

四、进阶技术栈

  • 动态页面处理:Selenium/Puppeteer

  • 分布式爬虫:Scrapy-Redis框架

  • 验证码破解:Tesseract OCR/深度学习模型

  • 数据清洗:Pandas/Numpy

  • 代理管理:IP池维护策略

五、系统学习路径,建议哈

  1. 基础阶段(2-4周):

    • Python语法核心(文件操作、异常处理)

    • HTML/CSS选择器与XPath表达式

    • HTTP协议与REST API原理

  2. 中级阶段(3-5周):

    • Scrapy框架项目实战

    • 数据库存储(MySQL/MongoDB)

    • 异步请求处理(aiohttp)

  3. 高级阶段(持续提升):

    • 逆向工程(JS加密破解)

    • 移动端数据抓取(App爬虫)

    • 云部署与定时任务(Docker/Kubernetes)

六、推荐学习资源

交互式平台

  1. Scrapy官方文档(含多语言版本)

  2. Requests高级用法指南

  3. 菜鸟教程-网络爬虫专题

视频课程

  • 慕课网《Python爬虫工程师系列》看过,我认为非常不错

  • Coursera《Web Scraping and APIs》

实战项目

  1. 豆瓣电影TOP250数据采集

  2. 链家房产信息监控系统

  3. 微博热点实时追踪

  4. 跨境电商价格聚合平台

工具集合

  • 代理服务:快代理/ProxyMesh

  • 验证码平台:联众打码

  • 指纹管理:指纹浏览器

七、注意事项

  1. 合规性

    • 严格遵守robots.txt协议

    • 控制请求频率(建议≥3秒/次)

    • 避免抓取个人隐私数据

  2. 道德准则

    • 注明数据来源

    • 不进行商业性数据转售

    • 尊重网站服务条款

建议从简单的静态页面抓取开始,逐步过渡到动态网页和反爬策略应对。可通过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))

关键注意事项

  1. 合法性:遵守 robots.txt 和网站服务协议(豆瓣允许爬取,京东需谨慎

  2. 反爬突破:动态内容用 Selenium/Playwright,验证码需接入打码平台

  3. 效率优化:Scrapy 框架 + Redis 分布式爬虫(适合大规模采集

  4. 数据清洗:使用 pandas 或正则表达式处理原始数据

相关文章:

两个实用且热门的 Python 爬虫案例,结合动态/静态网页抓取和反爬策略,附带详细代码和实现说明

在这个瞬息万变的世界里,保持一颗探索的心,永远怀揣梦想前行。即使有时会迷失方向,也不要忘记内心深处那盏指引你前进的明灯。它代表着你的希望、你的信念以及对未来的无限憧憬。每一个不曾起舞的日子,都是对生命的辜负&#xff1…...

华象新闻 | 2月20日前谨慎升级 PostgreSQL 版本

各位 PostgreSQL 用户,建议近期进行升级 PostgreSQL 版本。 2月20日计划进行非周期性版本发布 PostgreSQL全球开发团队计划于2025年2月20日进行一次非周期性发布,以解决2025年2月13日更新版本中引入的一个回归问题。 2月13日的更新版本包括了17.3、16.7、…...

跳跃游戏 II - 贪心算法解法

问题描述&#xff1a; 给定一个长度为 n 的 0 索引整数数组 nums&#xff0c;我们从数组的第一个元素 nums[0] 开始。每个元素 nums[i] 表示从索引 i 可以跳跃的最大长度&#xff0c;换句话说&#xff0c;从位置 i&#xff0c;你可以跳到位置 i j&#xff0c;其中 0 < j &…...

图像质量评价指标-UCIQE-UIQM

一、评价指标UCIQE 在文章《An underwater color image quality evaluation metric》中&#xff0c;提到的了评价指标UCIQE&#xff08;Underwater Colour Image Quality Evaluation&#xff09;&#xff0c;是一种无参考图像质量评价指标&#xff0c;主要用于评估水下图像的质…...

CentOS上安装WordPress

在CentOS上安装WordPress是一个相对直接的过程&#xff0c;可以通过多种方法完成&#xff0c;包括使用LAMP&#xff08;Linux, Apache, MySQL, PHP&#xff09;栈或使用更现代的LEMP&#xff08;Linux, Nginx, MySQL, PHP&#xff09;栈。 我选择的是&#xff08;Linux, Nginx…...

Spring Boot 原理分析

spring-boot.version&#xff1a;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 两种上传方式详细讲解)

前言&#xff1a;Git 与 GitHub 的区别与联系 在学习如何将本地项目上传到 GitHub 之前&#xff0c;先来弄清楚 Git 和 GitHub 的区别以及它们之间的联系。 对比项GitGitHub定义分布式版本控制系统&#xff08;DVCS&#xff09;&#xff0c;用于本地和远程管理代码版本托管 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个身高数据&#xff0c;问最高的到最前面&#xff0c;最矮的到最后面的最短交换次数 思路分析 首先&#xff0c;如果数据有重复项&#xff0c;例如示例二中&#xff0c;最矮的数据就是最后一个出现的数据位置&#xff0c;最高的数据就是最先出现的数据位置&…...

SAP-ABAP:SAP中REPORT程序和online程序的区别对比

在SAP中&#xff0c;REPORT程序和Online程序&#xff08;通常指Dialog程序&#xff09;是两种常见的ABAP程序类型&#xff0c;它们在用途、结构和用户交互方式上有显著区别。以下是它们的详细对比&#xff1a; 1. 用途 REPORT程序Online程序主要用于数据查询、报表生成和批量数…...

Java发展史

JavaEE的由来 语言的诞生 Java的前身是Oak语言&#xff0c;其目的是搞嵌入式开发开发智能面包机 叮~~~&#x1f35e;&#x1f35e;&#x1f35e; 产品以失败告终 巅峰 网景公司需要网景浏览器打开网页&#xff0c;Oak->Java&#xff0c;进行前端开发&#xff08;相关技…...

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

小白的看课思路&#xff1a; Ollama REST API 是什么&#xff1f; 想象一下&#xff0c;你有一个智能的“盒子”&#xff08;Ollama&#xff09;&#xff0c;里面装了很多聪明的“小助手”&#xff08;语言模型&#xff09;。如果你想让这些“小助手”帮你完成一些任务&#…...

学习数据结构(10)栈和队列下+二叉树(堆)上

1.关于栈和队列的算法题 &#xff08;1&#xff09;用队列实现栈 解法一&#xff1a;&#xff08;参考代码&#xff09; 题目要求实现六个函数&#xff0c;分别是栈初始化&#xff0c;入栈&#xff0c;移除并返回栈顶元素&#xff0c;返回栈顶元素&#xff0c;判空&#xff0…...

洛谷 P3660 USACO17FEB Why Did the Cow Cross the Road III 题解

题意 有一个圆&#xff0c;圆周上按顺时针方向给出 2 n 2n 2n个点。第 i i i个点的颜色是 c o l o r i color_i colori​&#xff0c;其中数据保证 1 ≤ c o l o r i ≤ n 1\le color_i\le n 1≤colori​≤n&#xff0c;而且每种不同的颜色有且只有两个点。不存在位置重叠的点…...

【数据结构】(9) 优先级队列(堆)

一、优先级队列 优先级队列不同于队列&#xff0c;队列是先进先出&#xff0c;优先级队列是优先级最高的先出。一般有两种操作&#xff1a;返回最高优先级对象&#xff0c;添加一个新对象。 二、堆 2.1、什么是堆 堆也是一种数据结构&#xff0c;是一棵完全二叉树&#xff0c…...

如何提升爬虫获取数据的准确性?

提升爬虫获取数据的准确性是确保数据分析和后续应用有效性的关键。以下是一些经过验证的方法和最佳实践&#xff0c;可以帮助提高爬虫数据的准确性&#xff1a; 1. 数据清洗 数据清洗是提升数据准确性的重要步骤&#xff0c;主要包括去除重复数据、处理缺失值和异常值。 去除…...

Obsidian及Zotero常用的插件

Obsidian插件 Minimal Theme Settings&#xff08;Life&#xff0c;zotero&#xff09;【必需】 界面样式设置所需插件 Style Settings&#xff08;Life&#xff0c;zotero&#xff09;【必需】界面样式设置所需插件 Recent Files&#xff08;Life&#xff0c;zotero&#xf…...

闲鱼IP属地是通过电话号码吗?

在闲鱼这样的二手交易平台上&#xff0c;用户的IP属地信息对于维护交易安全、增强用户间的信任至关重要。然而&#xff0c;关于闲鱼IP属地是如何确定的&#xff0c;不少用户存在疑惑&#xff0c;尤其是它与电话号码之间是否存在关联。本文将深入探讨这一问题&#xff0c;揭示闲…...

C#多线程异步连接MySQL与SQLserver数据库

C#多线程异步连接MySQL与SQLserver数据库 一、前言二、多线程异步连接数据库代码2.1代码块2.2代码说明 参考文档 一、前言 当编写代码连接多台设备上的数据库时&#xff0c;如果采用同步逐个连接的方式&#xff0c;在网络畅通的情况下连接速度尚可&#xff0c;但当其中一台设备…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是&#xff0c;要注意以下几点&#xff1a; Django的表单验证与null无关&#xff1a;null参数控制的是数据库层面字段是否可以为NULL&#xff0c;而blank参数控制的是Django表单验证时字…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...

leetcode73-矩阵置零

leetcode 73 思路 记录 0 元素的位置&#xff1a;遍历整个矩阵&#xff0c;找出所有值为 0 的元素&#xff0c;并将它们的坐标记录在数组zeroPosition中置零操作&#xff1a;遍历记录的所有 0 元素位置&#xff0c;将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...