⚠️重要提醒:爬虫请遵守网站 robots.txt 协议,不要高频爬取,禁止爬取隐私、付费、受版权保护内容,部分网站严禁爬虫,违规会有法律风险。
环境准备
需要安装两个第三方库
bash
pip install requests beautifulsoup4
-
requests :用于发送http请求,获取网页源码
-
BeautifulSoup :解析html网页,提取数据
完整示例:静态网页爬虫
python
import requests
from bs4 import BeautifulSoup
def simple_crawler(url):
请求头,模拟浏览器访问,防止被反爬拦截
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"
}
try:
发送GET请求
resp = requests.get(url, headers=headers, timeout=10)
resp.raise_for_status() # 如果状态码不是200,抛出异常
resp.encoding = resp.apparent_encoding # 自动识别编码
解析网页
soup = BeautifulSoup(resp.text, "html.parser")
示例1:获取网页标题
title = soup.find("title").get_text()
print("网页标题:", title)
示例2:提取页面所有a标签(超链接)
all_links = soup.find_all("a")
print("\n页面内链接:")
for link in all_links:10: #只打印前10条
text = link.get_text(strip=True)
href = link.get("href")
if href:
print(f"文本:{text} 链接:{href}")
except requests.exceptions.RequestException as e:
print("请求出错:", e)
if name == "main":
target_url = "https://example.com" #测试网页,可替换为合法目标站点
simple_crawler(target_url)
核心知识点
- User‑Agent 请求头
网站会识别客户端,不加UA会被识别为爬虫直接拒绝访问,所以必须带上浏览器UA。
- 常见状态码
-
200 :访问成功
-
403 :服务器拒绝访问,反爬拦截
-
404 :页面不存在
-
521 :网站WAF防火墙拦截爬虫,需要处理指纹、cookie
- 解析数据常用方法
python
soup.find("标签名") # 查找第一个匹配标签
soup.find_all("标签名") # 查找全部匹配标签
tag.get_text() # 获取标签内文字
tag.get("属性名") # 获取标签属性,比如href、src
进阶场景
- 网页是JS动态渲染(requests拿不到数据)
requests只能拿原始HTML,JS加载出来的数据需要:
-
方案1:调用网站公开API接口(优先)
-
方案2:使用 Selenium / Playwright 模拟真实浏览器
- 保存爬取结果
python
将结果写入txt
with open("result.txt","w",encoding="utf‑8") as f:
f.write(resp.text)
爬虫避坑
-
设置 timeout 超时时间,防止程序卡死
-
请求之间加延时 time.sleep(1‑3) ,不要疯狂请求服务器
-
不要爬登录后才能看到的内容,未授权抓取属于侵权
-
遇到验证码、cloudflare防护,简单requests无法解决。