
⚠️重要提醒
-
爬虫务必遵守网站 robots.txt 协议,不要高频疯狂请求,避免给服务器造成压力;
-
禁止爬取隐私、付费、受版权保护的数据;
-
很多现代网页是JS动态渲染, requests 拿不到内容,需要用Selenium/Playwright;
-
学习用途,不要用于商用。
准备库
-
requests :发送HTTP请求获取网页源码
-
BeautifulSoup4 :解析HTML提取数据
bash
pip install requests beautifulsoup4
示例1:静态网页简单爬虫(获取网页标题、链接)
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")
获取网页标题
title = soup.find("title").text
print("网页标题:", title)
提取页面所有超链接
links = soup.find_all("a")
for a_tag in links:10: #只打印前10条
link_text = a_tag.get_text(strip=True)
href = a_tag.get("href")
if href:
print(f"文本:{link_text} 链接:{href}")
except Exception as e:
print("请求出错:", e)
if name == "main":
target_url = "https://example.com" # 测试网站example.com
simple_crawler(target_url)
核心知识点说明
-
User‑Agent:伪装成浏览器,部分网站会拒绝没有UA的程序访问;
-
requests.get() 获取页面HTML源代码;
-
BeautifulSoup(html,"html.parser") 解析网页;
-
.find("标签名") 获取第一个匹配标签
-
.find_all("标签名") 获取全部匹配标签
-
.get_text() 获取标签内文字
-
.get("属性名") 获取标签属性(href、src)
示例2:把爬取的数据保存到本地txt
python
在上面代码基础上增加保存逻辑
with open("result.txt","w",encoding="utf‑8") as f:
f.write(title + "\n")
for a_tag in links:
txt = a_tag.get_text(strip=True)
h = a_tag.get("href")
f.write(f"{txt} | {h}\n")
常见问题
-
返回乱码:设置 resp.encoding = resp.apparent_encoding
-
403禁止访问:缺少请求头headers,网站识别出爬虫;
-
拿不到网页内容:网页是JS动态加载,requests只能拿到初始HTML → 使用Selenium;
-
请求太快被封IP:导入 time 模块,每次请求后 time.sleep(1~3) 延时。
Selenium简易动态网页爬虫(可选扩展)
如果页面是js渲染,requests拿不到数据,需要selenium驱动真实浏览器。
bash
pip install selenium
爬虫道德与法律
-
控制访问频率,增加 sleep() 延时;
-
不爬取登录后才可见的内容;
-
不破解反爬、不批量骚扰服务器。