Plain Text
from playwright.sync_api import sync_playwright
import time
import csv
def jsp_spider():
# 1. 启动 Playwright
with sync_playwright() as p:
# 启动无头浏览器(生产环境使用,无界面)
# 调试时可把 headless=False 显示浏览器界面
browser = p.chromium.launch(headless=True)
# 创建新页面
page = browser.new_page()
# 设置浏览器请求头,模拟真实用户
page.set_extra_http_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",
"Accept-Language": "zh-CN,zh;q=0.9"
})
# 2. 访问 JSP 动态网页,等待页面完全加载
# 替换为目标 JSP 网站地址
page.goto(
"http://xxx.com/list.jsp",
wait_until="networkidle", # 等待网络空闲,确保 JS 数据加载完成
timeout=60000
)
# 强制等待 2 秒,确保动态渲染完成
time.sleep(2)
print("JSP 页面加载完成,开始爬取数据...")
# 3. 创建 CSV 文件保存数据
with open("jsp_data.csv", "w", newline="", encoding="utf-8-sig") as f:
writer = csv.DictWriter(f, fieldnames=["标题", "内容", "时间", "链接"])
writer.writeheader()
# 4. 爬取多页数据(JSP 分页示例)
for page_num in range(1, 4):
print(f"正在爬取第 {page_num} 页数据...")
# 5. 提取 JS 渲染后的页面数据(CSS 选择器定位元素)
# 根据目标 JSP 页面的实际元素选择器修改
items = page.query_selector_all("div.list-item")
for item in items:
# 提取文本内容
title = item.query_selector("h3").inner_text().strip() if item.query_selector("h3") else "无标题"
content = item.query_selector("p.desc").inner_text().strip() if item.query_selector("p.desc") else "无内容"
time_str = item.query_selector("span.time").inner_text().strip() if item.query_selector("span.time") else "无时间"
link = item.query_selector("a").get_attribute("href") if item.query_selector("a") else "无链接"
# 补全相对链接
if link and not link.startswith("http"):
link = "http://xxx.com" + link
# 打印数据
print({"标题": title, "内容": content, "时间": time_str, "链接": link})
# 写入 CSV
writer.writerow({"标题": title, "内容": content, "时间": time_str, "链接": link})
# 6. 模拟点击分页按钮(JSP 页面分页交互)
try:
# 定位下一页按钮,点击并等待页面加载
page.click("a.next-page", timeout=5000)
time.sleep(2)
except Exception as e:
print("已到达最后一页,爬取结束")
break
# 7. 关闭浏览器
browser.close()
print("所有 JSP 页面数据爬取完成!")
if __name__ == "__main__":
jsp_spider()
Plain Text
复制代码1
2
3
4
5
6
7
8
9
10
# 模拟登录 JSP 系统
page.goto("http://xxx.com/login.jsp")
# 输入账号
page.fill("input[name='username']", "你的账号")
# 输入密码
page.fill("input[name='password']", "你的密码")
# 点击登录按钮
page.click("button#login-btn")
# 等待登录跳转完成
time.sleep(3)
Plain Text
复制代码1
page.route("**/*.{png,jpg,jpeg,gif}", lambda route: route.abort())







待会儿见
K哥馆
mayun
文鼎_应老师
课课家运营团队
liangchsh
启程软考
