Python 爬虫入门:requests + BeautifulSoup 实战

# Python 爬虫入门:requests + BeautifulSoup 实战 数据采集是很多项目绕不开的一步,不管是做数据分析、做搜索引擎还是自己攒数据集,爬虫都是最基础也最常用的技能。这篇文章用 `requests` + `BeautifulSoup` 这对最经典的组合,走一遍完整流程。 ## 1. 发起请求:requests `requests` 是 Python 里最常用的 HTTP 请求库,用法非常直观: ```python 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` 把需要的数据提取出来: ```python 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_all` 和 `select`(CSS 选择器语法)是最常用的两种定位方式,页面结构复杂的时候用浏览器开发者工具(F12)先看清楚标签层级,再写选择器会顺畅很多。 ## 3. 处理分页 大多数列表页都有分页,写一个循环遍历所有页码即可: ```python 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 或数据库),不要全放在内存里,程序中途报错就前功尽弃了。 ```python 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 阅读数: 1 点赞数: 0 评论数:

评论区

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