Python 爬虫入门:requests + BeautifulSoup 实战

Python 爬虫入门:requests + BeautifulSoup 实战

数据采集是很多项目绕不开的一步,不管是做数据分析、做搜索引擎还是自己攒数据集,爬虫都是最基础也最常用的技能。这篇文章用 requests + BeautifulSoup 这对最经典的组合,走一遍完整流程。

1. 发起请求:requests

requests 是 Python 里最常用的 HTTP 请求库,用法非常直观:

import requests

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}

resp = requests.get('https://example.com', headers=headers, timeout=10)
resp.encoding = 'utf-8'
print(resp.status_code)
print(resp.text[:200])

几个容易忽略但很重要的点:

  • 一定要带 User-Agent,很多网站会拦截没有请求头的请求
  • 设置 timeout,避免某个请求卡死整个程序
  • 注意编码,中文页面乱码大多是编码没设对

2. 解析页面:BeautifulSoup

拿到 HTML 之后,用 BeautifulSoup 把需要的数据提取出来:

from bs4 import BeautifulSoup

soup = BeautifulSoup(resp.text, 'html.parser')

# 按标签 + class 定位
titles = soup.find_all('h2', class_='article-title')
for t in titles:
print(t.get_text(strip=True))

# 按 CSS 选择器定位,更灵活
links = soup.select('div.article-list a')
for link in links:
print(link.get('href'))

find_allselect(CSS 选择器语法)是最常用的两种定位方式,页面结构复杂的时候用浏览器开发者工具(F12)先看清楚标签层级,再写选择器会顺畅很多。

3. 处理分页

大多数列表页都有分页,写一个循环遍历所有页码即可:

all_data = []

for page in range(1, 11):
url = f'https://example.com/list?page={page}'
resp = requests.get(url, headers=headers, timeout=10)
soup = BeautifulSoup(resp.text, 'html.parser')
items = soup.select('div.item')
if not items:
    break  # 没有数据了,提前结束
for item in items:
    all_data.append(item.get_text(strip=True))

4. 别忘了这几件事

  • 控制请求频率:在循环里加个 time.sleep(1),避免短时间内高频请求把对方服务器打挂,也降低自己被封 IP 的风险。
  • 遵守 robots.txt:采集前看一下目标网站的 /robots.txt,了解哪些路径是明确不允许抓取的。
  • 数据落地:抓到的数据尽量边采集边保存(比如写入 CSV 或数据库),不要全放在内存里,程序中途报错就前功尽弃了。
import csv

with open('data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['title', 'link'])
for row in all_data:
    writer.writerow(row)

5. 什么时候该换 Scrapy

如果只是抓几十上百页的静态页面,requests + BeautifulSoup 完全够用,代码也简单直接。但如果任务变成:

  • 要抓成千上万个页面,需要并发和调度
  • 需要处理重试、去重、中间件这些工程化需求
  • 项目会长期维护,需要更规范的结构

这时候切换到 Scrapy 框架会更合适,它把请求调度、并发、数据管道这些都封装好了,适合做体量更大的采集项目。

小结

requests 负责拿数据,BeautifulSoup 负责解析数据,两者搭配是入门爬虫最快的路径。写的时候记得带请求头、控制频率、及时落地数据,量级上去了再考虑上 Scrapy 这类框架。

作者: yanleaf 发布时间: 2026-07-03 15:58:23 阅读数: 134 点赞数: 0 评论数:

评论区

备案期间,评论功能暂时关闭。