一篇最全Python 爬虫超详细讲解(零基础入门,适合小白)
大家好!我是 Grok,由 xAI 构建。今天我们来聊聊 Python 爬虫。作为一个零基础教程,我会从最简单的地方开始,一步步带你入门。爬虫(Web Scraping)就是用程序自动从网站上抓取数据的工具,比如下载图片、收集新闻、分析价格等。为什么学?因为它超级实用,能帮你自动化很多重复工作,比如监控电商价格或收集研究数据。
注意:爬虫要遵守法律和道德!不要爬取受保护的数据(如个人信息),尊重 robots.txt 协议,避免高频请求导致网站崩溃。否则可能被封 IP 或面临法律风险。
这个教程基于 2026 年最新实践(Python 3.12+),结合了网络上热门资源(如 Bilibili 尚硅谷教程、知乎文章等)。我们会从基础到进阶,包含代码示例。准备好你的电脑,我们开始吧!
第一部分:准备工作(零基础起步)
安装 Python:
- 下载官网最新版(https://www.python.org/downloads/),推荐 Python 3.12 或更高。Windows/Mac/Linux 都支持。
- 安装时勾选“Add Python to PATH”,便于命令行使用。
- 验证:打开命令提示符(Win: cmd;Mac: Terminal),输入 python –version,看到版本号就 OK。
安装代码编辑器:
- 推荐 VS Code(免费,轻量):下载 https://code.visualstudio.com/,安装 Python 扩展。
- 或者 PyCharm Community Edition(专业 IDE):https://www.jetbrains.com/pycharm/download/。
安装爬虫常用库(用 pip,Python 自带包管理器):
- 打开命令行,输入:pip install requests beautifulsoup4 lxml selenium scrapy
- 解释:
- requests:发送 HTTP 请求,模拟浏览器访问网站。
- beautifulsoup4(简称 bs4):解析 HTML,提取数据。
- lxml:bs4 的高效解析器。
- selenium:处理动态页面(如 JavaScript 加载)。
- scrapy:专业爬虫框架。
测试环境:
- 新建一个 .py 文件(如 test.py),写:print("Hello, 爬虫世界!")
- 运行:命令行 python test.py,看到输出就成功。
第二部分:爬虫基础知识
爬虫流程(核心三步):
HTTP 基础(小白必知):
- GET:获取数据(最常见)。
- POST:提交数据(如登录)。
- Headers:模拟浏览器(如 User-Agent)。
- Cookies:保持登录状态。
反爬虫常见问题:
- 网站检测机器人:用假 User-Agent 或代理 IP。
- 动态加载:用 Selenium 模拟浏览器。
第三部分:简单爬虫实战(入门示例)
我们爬取一个简单网站:百度首页的标题和链接。作为小白第一爬,超级简单!
代码示例(用 requests + bs4):
import requests
from bs4 import BeautifulSoup
# 第一步:发送请求
url = "https://www.baidu.com" # 目标网址
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
} # 模拟浏览器,避开简单反爬
response = requests.get(url, headers=headers)
# 检查响应
if response.status_code == 200:
print("请求成功!")
else:
print("请求失败,状态码:", response.status_code)
exit() # 退出程序
# 第二步:解析 HTML
soup = BeautifulSoup(response.text, "lxml") # 用 lxml 解析器
# 提取标题
title = soup.title.string
print("页面标题:", title)
# 提取所有链接
links = soup.find_all("a") # 找所有 <a> 标签
for link in links:
href = link.get("href") # 获取 href 属性
text = link.string # 获取文本
if text: # 过滤空文本
print(f"链接文本:{text},URL:{href}")
# 第三步:保存数据(可选,存到文件)
with open("baidu_links.txt", "w", encoding="utf-8") as f:
for link in links:
if link.string:
f.write(f"{link.string}: {link.get('href')}\\n")
print("数据已保存到 baidu_links.txt")
- 运行:保存为 baidu_crawler.py,命令行 python baidu_crawler.py。
- 输出:页面标题和链接列表。
解释代码:
- requests.get():获取网页源代码。
- BeautifulSoup:像“汤”一样搅拌 HTML,轻松找标签(如 find_all("a") 找所有超链接)。
- 如果网站用 JavaScript 加载,用 Selenium 替换 requests(见进阶)。
小练习:改成爬取豆瓣电影 Top 250 的电影名(URL: https://yingjuxia.com/archives/8406)。提示:找 class="title" 的标签。
第四部分:进阶技巧(从小白到高手)
处理动态页面(JavaScript 渲染):
- 用 Selenium 模拟浏览器。
- 安装 ChromeDriver(匹配你的 Chrome 版本):https://googlechromelabs.github.io/chrome-for-testing/。
- 示例代码:from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By# 配置 ChromeDriver 路径
service = Service("path/to/chromedriver.exe") # 替换成你的路径
driver = webdriver.Chrome(service=service)url = "https://www.example.com" # 动态网站
driver.get(url)# 找元素(用 XPath 或 CSS)
elements = driver.find_elements(By.CSS_SELECTOR, "div.classname")
for elem in elements:
print(elem.text)driver.quit() # 关闭浏览器
- 优势:能处理登录、点击等交互。
XPath 解析(更精确提取):
- 用 lxml 的 etree。
- 示例:from lxml import etree
html = etree.HTML(response.text) # 解析
titles = html.xpath('//h1/text()') # XPath 表达式:所有 h1 标签的文本
print(titles) - XPath 语法://tag 找所有 tag;@attr 找属性。
反爬虫应对:
- User-Agent 轮换:用 fake_useragent 库随机 UA。pip install fake_useragent
from fake_useragent import UserAgent
ua = UserAgent()
headers = {"User-Agent": ua.random} - 代理 IP:用免费/付费代理池,避免 IP 被封。proxies = {"http": "http://your_proxy:port"}
response = requests.get(url, proxies=proxies) - 延迟请求:import time; time.sleep(2) 每请求睡 2 秒。
- 验证码:用 OCR 库如 pytesseract 识别简单验证码。
数据存储:
- CSV:用 pandas。import pandas as pd
data = [{"name": "Alice", "age": 25}]
df = pd.DataFrame(data)
df.to_csv("data.csv", index=False) - 数据库:SQLite 或 MySQL(用 sqlite3 或 pymysql)。
Scrapy 框架(专业级):
- 安装后,创建项目:scrapy startproject myspider。
- 示例 Spider:import scrapy
class MySpider(scrapy.Spider):
name = "example"
start_urls = ["https://www.example.com"]def parse(self, response):
titles = response.xpath('//h1/text()').getall()
yield {"title": titles} - 运行:scrapy crawl example -o output.json。
- 优势:内置调度、管道、去重,适合大项目。
第五部分:常见问题与调试
第六部分:资源推荐(继续学习)
- 视频教程:Bilibili《尚硅谷 Python 爬虫教程》(104 集,含基础)。
- YouTube:《50分钟超快速入门 Python 爬虫》(动画教学)。
- 书籍:《Python 网络爬虫权威指南》(英文原版 Web Scraping with Python)。
- 项目实践:爬取天气、股票、新闻。GitHub 搜索“python spider example”。
- 社区:CSDN、知乎、Reddit r/learnpython。
恭喜!你已入门 Python 爬虫!多练多调试,很快就能爬复杂网站。遇到问题,欢迎问我~ 🚀 如果想加深某个部分(如 Scrapy 实战),告诉我!





