's'
This commit is contained in:
64
scrape_salon.py
Normal file
64
scrape_salon.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import asyncio
|
||||
from playwright.async_api import async_playwright
|
||||
import json
|
||||
|
||||
async def scrape_page():
|
||||
async with async_playwright() as p:
|
||||
browser = await p.chromium.launch(headless=True)
|
||||
page = await browser.new_page()
|
||||
|
||||
await page.goto('https://meetup.hackrobot.cn/salon', wait_until='networkidle', timeout=30000)
|
||||
|
||||
# 等待页面加载完成
|
||||
await page.wait_for_timeout(3000)
|
||||
|
||||
# 获取页面完整HTML
|
||||
content = await page.content()
|
||||
|
||||
# 保存HTML
|
||||
with open('salon_full.html', 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
# 获取页面标题
|
||||
title = await page.title()
|
||||
print(f"页面标题: {title}")
|
||||
|
||||
# 获取页面的视口高度
|
||||
viewport_height = await page.evaluate('window.innerHeight')
|
||||
page_height = await page.evaluate('document.body.scrollHeight')
|
||||
|
||||
print(f"视口高度: {viewport_height}, 页面总高度: {page_height}")
|
||||
|
||||
# 滚动并截图
|
||||
screenshots = []
|
||||
scroll_position = 0
|
||||
screenshot_count = 0
|
||||
|
||||
while scroll_position < page_height:
|
||||
await page.screenshot(path=f'screenshot_{screenshot_count}.png', full_page=False)
|
||||
screenshots.append(f'screenshot_{screenshot_count}.png')
|
||||
screenshot_count += 1
|
||||
|
||||
scroll_position += viewport_height
|
||||
await page.evaluate(f'window.scrollTo(0, {scroll_position})')
|
||||
await page.wait_for_timeout(1000)
|
||||
|
||||
# 最后截取完整页面
|
||||
await page.screenshot(path='screenshot_full.png', full_page=True)
|
||||
|
||||
print(f"截图完成: 共 {screenshot_count} 张分段截图 + 1张完整截图")
|
||||
|
||||
# 获取所有文本内容
|
||||
text_content = await page.evaluate('''() => {
|
||||
return document.body.innerText;
|
||||
}''')
|
||||
|
||||
with open('page_text.txt', 'w', encoding='utf-8') as f:
|
||||
f.write(text_content)
|
||||
|
||||
print("文本内容已保存")
|
||||
|
||||
await browser.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(scrape_page())
|
||||
Reference in New Issue
Block a user