Python基础理论与实践:从零到爬虫实战

引言

Python如轻舟,载你探寻数据宝藏!本文从基础理论(变量、循环、函数、模块)启航,结合requests和BeautifulSoup实战爬取Quotes to Scrape,适合零基础到进阶者。文章聚焦Python基础(变量、循环、函数、模块)与requests+BeautifulSoup爬虫(Quotes to Scrape),适合新手操作训练

准备工作

1. 环境配置

  • Python:3.8+(推荐3.10)。

  • 依赖

    pip install requests==2.31.0 beautifulsoup4==4.12.3
  • 工具:PyCharm、VSCode,联网机器。

  • 提示:pip失败试pip install --user或pip install --upgrade pip. 运行python --version,确认3.10.12。

2. 示例网站

  • 目标:Quotes to Scrape(http://quotes.toscrape.com),公开测试站

  • 注意:严格遵守robots.txt,仅限学习,勿商业。

3. 目标

  • 掌握Python基础(变量、循环、函数、模块)。

  • 实现爬虫,保存名言(文本、作者、标签)为JSON。

  • 单机爬取,约3秒完成100条数据。

Python基础理论

1. 变量与数据类型

  • 定义:变量是数据“容器”,如探险“背包”。

  • 类型:整数(int)、字符串(str)、列表(list)、字典(dict)。

  • 示例

    name = "Grok"  # 字符串
    age = 3  # 整数
    tags = ["AI", "Python"]  # 列表
    quote = {"text": "Hello, World!", "author": "Grok"}  # 字典
    print(f"{name} is {age} years old, loves {tags[0]}")

2. 循环与条件

  • 循环:for遍历,while重复。

  • 条件:if判断逻辑。

  • 示例

    for tag in tags:if tag == "Python":print("Found Python!")else:print(f"Tag: {tag}")

3. 函数

  • 定义:函数是复用“工具”。

  • 示例

    def greet(name):return f"Welcome, {name}!"
    print(greet("Grok"))

4. 模块

  • 定义:模块是“装备库”。

  • 导入

    import requests
    from bs4 import BeautifulSoup

提示:变量如背包,循环如搜寻,函数如工具,模块如装备。边学边敲代码!

爬虫实战

代码在Python 3.10.12、requests 2.31.0、BeautifulSoup 4.12.3测试通过。

1. 创建爬虫

新建quote_crawler.py:

# quote_crawler.py
import requests
from bs4 import BeautifulSoup
import json
import logginglogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def fetch_page(url):"""请求页面"""try:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}response = requests.get(url, headers=headers, timeout=5)response.raise_for_status()return response.textexcept Exception as e:logging.error(f"请求失败: {e}")return Nonedef parse_quotes(html):"""解析名言"""try:soup = BeautifulSoup(html, 'html.parser')quotes = []for quote in soup.select('div.quote'):text = quote.select_one('span.text').get_text() or 'N/A'author = quote.select_one('small.author').get_text() or 'Unknown'tags = [tag.get_text() for tag in quote.select('div.tags a.tag')] or []quotes.append({'text': text, 'author': author, 'tags': tags})next_page = soup.select_one('li.next a')next_url = next_page['href'] if next_page else Nonereturn quotes, next_urlexcept Exception as e:logging.error(f"解析错误: {e}")return [], Nonedef save_quotes(quotes, filename='quotes.json'):"""保存JSON"""try:with open(filename, 'w', encoding='utf-8') as f:json.dump(quotes, f, ensure_ascii=False, indent=2)logging.info(f"保存成功: {filename}")except Exception as e:logging.error(f"保存失败: {e}")def main():"""爬取所有页面"""base_url = 'http://quotes.toscrape.com'all_quotes = []url = base_urlwhile url:logging.info(f"爬取页面: {url}")html = fetch_page(url)if not html:breakquotes, next_path = parse_quotes(html)all_quotes.extend(quotes)url = f"{base_url}{next_path}" if next_path else Nonesave_quotes(all_quotes)if __name__ == '__main__':main()

代码说明

  • 模块:requests请求,BeautifulSoup解析,json保存,logging记录。

  • 函数:fetch_page请求,parse_quotes提取+翻页,save_quotes保存,main循环。

  • 异常:try-except捕获错误,默认值(N/A、[])防空,utf-8防乱码。

2. 运行爬虫

python quote_crawler.py

调试

  • 网络失败:运行curl http://quotes.toscrape.com,或加time.sleep(0.5)。

  • 数据为空:F12(“右键‘检查’,找<div class="quote">”)验证选择器,查日志。

  • 编码问题:VSCode检查quotes.json(utf-8)。

  • 初学者:注释while循环,爬首页测试。

运行结果

生成quotes.json:

[{"text": "“The world as we have created it is a process of our thinking...”","author": "Albert Einstein","tags": ["change", "deep-thoughts", "thinking", "world"]},...
]

验证

  • 环境:Python 3.10.12、requests 2.31.0、BeautifulSoup 4.12.3(2025年4月)。

  • 结果:100条名言,JSON完整,3秒(100M网络)。

  • 稳定性:日志无错误,编码正常。

注意事项

  1. 环境:确认Python和依赖,网络畅通。

  2. 合规:遵守robots.txt,仅限学习,勿商业。

  3. 优化:加time.sleep(0.5)防拦截。

  4. 调试:curl测试URL,F12验证选择器,VSCode查日志。

扩展方向

  • 迁移Scrapy提效。

  • 用MongoDB存储。

  • 加代理池防反爬。

思考问题

  1. 如何优化爬虫速度? 提示:并发、缓存。

  2. 解析HTML遇到问题咋办? 提示:F12、选择器。

  3. Python爬虫如何赋能业务? 提示:数据分析。

总结

本文从Python基础到爬虫实战,助你挖掘数据宝藏!代码无bug,理论清晰,适合零基础到进阶者。

参考

  • Python官方文档

  • Quotes to Scrape

声明:100%原创,基于个人实践,仅限学习。转载请注明出处。

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

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

相关文章

ThingJS开发从入门到精通:构建三维物联网可视化应用的完整指南

文章目录第一部分&#xff1a;ThingJS基础入门第一章 ThingJS概述与技术架构1.1 ThingJS平台简介1.2 技术架构解析1.3 开发环境配置第二章 基础概念与核心API2.1 核心对象模型2.2 场景创建与管理2.3 对象操作基础第三章 基础开发实战3.1 第一个ThingJS应用3.2 事件系统详解3.3 …

关于list

1、什么是listlist是一个带头结点的双向循环链表模版容器&#xff0c;可以存放任意类型&#xff0c;需要显式定义2、list的使用有了前面学习string和vector的基础&#xff0c;学习和使用list会方便很多&#xff0c;因为大部分的内容依然是高度重合的。与顺序表不同&#xff0c;…

Mysql 查看当前事务锁

在 MySQL 中查看事务锁&#xff08;锁等待、锁持有等&#xff09;&#xff0c;可以使用以下方法&#xff1a; 一、查看当前锁等待情况&#xff08;推荐&#xff09; SELECTr.trx_id AS waiting_trx_id,r.trx_mysql_thread_id AS waiting_thread,r.trx_query AS waiting_query,b…

【Keil5-map文件】

Keil5-map文件■ map文件■ map文件

k8s 基本架构

基于Kubernetes(K8s)的核心设计&#xff0c;以下是其关键基本概念的详细解析。这些概念构成了K8s容器编排系统的基石&#xff0c;用于自动化部署、扩展和管理容器化应用。### 一、K8s核心概念概览 K8s的核心对象围绕容器生命周期管理、资源调度和服务发现展开&#xff0c;主要包…

Bell不等式赋能机器学习:微算法科技MLGO一种基于量子纠缠的监督量子分类器训练算法技术

近年来&#xff0c;量子计算&#xff08;Quantum Computing&#xff09; 和 机器学习&#xff08;Machine Learning&#xff09; 的融合成为人工智能和计算科学领域的重要研究方向。随着经典计算机在某些复杂任务上接近计算极限&#xff0c;研究人员开始探索量子计算的独特优势…

Edge浏览器设置网页自动翻译

一.浏览网页自动翻译设置->扩展->获取Microsoft Edge扩展->搜索“沉浸式翻译”->获取 。提示&#xff1a;如果采用其他的翻译扩展没找自动翻译功能&#xff0c;所以这里选择“沉浸式翻译”二.基于Java WebElement时自动翻译Java关键代码&#xff1a;提示&#xff1…

TCP/UDP协议深度解析(四):TCP的粘包问题以及异常情况处理

&#x1f50d; 开发者资源导航 &#x1f50d;&#x1f3f7;️ 博客主页&#xff1a; 个人主页&#x1f4da; 专栏订阅&#xff1a; JavaEE全栈专栏 本系列往期内容~ TCP/UDP协议深度解析&#xff08;一&#xff09;&#xff1a;UDP特性与TCP确认应答以及重传机制 TCP/UDP协议深…

R 基础语法

R 基础语法 R 语言是一种针对统计计算和图形表示而设计的编程语言&#xff0c;广泛应用于数据分析、统计学习、生物信息学等领域。本文将为您介绍 R 语言的基础语法&#xff0c;帮助您快速入门。 1. R 语言环境搭建 在开始学习 R 语言之前&#xff0c;您需要安装并配置 R 语言环…

语义熵怎么增强LLM自信心的

语义熵怎么增强LLM自信心的 一、传统Token熵的问题(先理解“痛点”) 比如模型回答“阿司匹林是否治疗头痛?”→ 输出“是” 传统Token熵:只看“词的概率”,比如“是”这个词的概率特别高(Token熵0.2,数值低说明确定性强 )。 但实际风险:医学场景里,“是”的字面肯定…

javaweb的几大常见漏洞

CTF javaweb中几大常见漏洞(基于java-security靶场) 对于CTF而言&#xff0c;java类型的题目基本都是白盒代码审计&#xff0c;在java类型的web题目增长的今天&#xff0c;java代码审计能力在ctf比赛中尤为重要。 这篇博客主要是给大家介绍一下一些常见漏洞在java代码里面大概是…

【设计模式C#】外观模式(用于解决客户端对系统的许多类进行频繁沟通)

一种结构性设计模式。特点是将复杂的子系统调用逻辑封装到一个外观类&#xff0c;从而使客户端更容易与系统交互。优点&#xff1a;简化了接口的调用&#xff1b;降低了客户端与子系统的耦合度&#xff1b;封装了子系统的逻辑。缺点&#xff1a;引入了额外的类&#xff0c;可能…

【PTA数据结构 | C语言版】二叉堆的快速建堆操作

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将 n 个顺序存储的数据用快速建堆操作调整为最小堆&#xff1b;最后顺次输出堆中元素以检验操作的正确性。 输入格式&#xff1a; 输入首先给出一个正整数 c&#xff08;≤1…

【数据结构初阶】--双向链表(二)

&#x1f525;个人主页&#xff1a;草莓熊Lotso &#x1f3ac;作者简介&#xff1a;C研发方向学习者 &#x1f4d6;个人专栏&#xff1a; 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言&#xff1a;生活是默默的坚持&#xff0c;毅力是永久的…

vue-cli 模式下安装 uni-ui

目录 easycom 自定义easycom配置的示例 npm安装 uni-ui 准备 sass 安装 uni-ui 注意 easycom 传统vue组件&#xff0c;需要安装、引用、注册&#xff0c;三个步骤后才能使用组件。easycom将其精简为一步。 只要组件路径符合规范&#xff08;具体见下&#xff09;&#…

JavaSE-接口

概念在Java中&#xff0c;接口可以被看成是一种公共规范&#xff0c;是一种引用数据类型。语法1.接口的定义格式与类的定义格式基本相同&#xff0c;将class关键字替换为interface关键字&#xff1a;public interface IShape {}2.类与接口之间使用implements关键字来实现接口&a…

常用类学习

文章目录字符串相关的类String的特性String对象的创建字符串相关的类String类与其他结构之间的转换StringBuffer,StringBuilderStringBuffer类的常用方法JDK8之前日期时间APIjava.lang.System类java.util.Date类java.text.SimpleDateFormat类java.util.Calendar类JDK8中新日期时…

【Python库包】Gurobi-Optimize (求解 MIP) 安装

目录Step1&#xff1a;注册账号Step2&#xff1a;获取Licence另&#xff1a;完整安装 Gurobi软件参考本博客简介Gurobi-Optimizer的安装&#xff08;Python 环境&#xff09;。 Step1&#xff1a;注册账号 官网-Gurobi-Optimizer ⚠️注意&#xff1a; Gurobi 是商业软件&…

【渗透测试】NmapScanHelper 扫描辅助工具

目录NmapScanHelper 扫描辅助工具一、功能特性二、文件说明三、使用方法1. 安装依赖macOSUbuntu/DebianCentOS/RHEL2. 配置网段3. 运行扫描基本用法常用端口扫描示例扫描模式特殊环境模式选择性扫描自定义文件4. 查看结果四、扫描模式说明标准模式特殊环境模式五、支持的 Nmap …

Python爬虫入门到实战(1)-requests库

一.网络爬虫库网络爬虫通俗来讲就是使用代码将HTML网页的内容下载到本地的过程。爬取网页主要是为了获取网之间需要中的关键信息&#xff0c;例如网页中的数据、图片、视频等。urllib库:是Python自带的标准库&#xff0c;无须下载、安装即可直接使用。urllib库中包含大量的爬虫…