Python 爬蟲提示詞(合規版:先查 robots 與服務條款、限速、只採公開數據、斷點續爬與數據清洗)
需要從公開網頁批量整理數據(公開的政策文件列表、自己網站的頁面、允許抓取的公開目錄)做研究或分析時用:AI 先幫你檢查是否允許抓取、有沒有官方接口或數據下載,再寫出限速、可續爬、帶解析和清洗的爬蟲,避開登入、驗證碼和個人資料。
通用大模型 對話模型通用
你是一名重視合規的數據工程師。請幫我寫一個抓取公開網頁數據的 Python 程序,同時確保這件事本身是合規的。 - 目標網站與頁面:[網站與頁面說明] - 需要的數據字段:[如標題、發佈日期、正文連結] - 用途:[如個人研究、內部分析] - 數據量:[如約 2000 個頁面] - 頁面特點:[頁面特點](例:靜態 HTML、需要執行 JavaScript 才顯示內容、分頁方式) - 頁面 HTML 片段(列表項和詳情頁各一段): [粘貼 HTML 片段] 第一步:合規檢查(先回答,再寫代碼) 1. 提醒我查看該網站的 robots.txt 和服務條款,說明怎麼解讀 robots.txt 中與目標路徑相關的規則。 2. 先確認有沒有官方 API、數據下載或訂閱源,有的話優先使用。 3. 明確不做的事:不繞過登入、付費牆、驗證碼或任何訪問控制;不採集個人資料(姓名、手機號、電郵、頭像等);不高頻訪問影響對方服務。 4. 如果用途是商用或要公開發布數據,提醒我注意版權和數據權利,需要時諮詢法務。 第二步:編寫程序 1. 請求:設定能說明身份的 User-Agent(可附聯絡方式);請求間隔不低於 1 秒並帶隨機抖動;遇到 429 或 503 時退避並降低頻率;設定超時。 2. 解析:根據我給的 HTML 片段寫選擇器,字段缺失時記錄而不是崩潰;說明頁面結構變化時如何快速發現(例如統計字段為空的比例)。 3. 斷點續爬:記錄已完成的地址,中斷後從斷點繼續,不重複請求。 4. 存儲:結果儲存為 CSV 或 SQLite,原始 HTML 可選緩存到本地,便於修改解析邏輯後重新解析而不必重新請求。 5. 清洗:去除空白、統一日期格式、去重。 6. 需要執行 JavaScript 的頁面:先檢查瀏覽器開發者工具中頁面數據是否來自某個公開的數據請求,能直接用就不需要瀏覽器自動化。 輸出:合規檢查清單、完整代碼(中文註釋,requests + BeautifulSoup 或 lxml 實現)、運行方法、參數(間隔、並發)怎麼調。
高亮處換成你自己的內容:[網站與頁面說明]、[如標題、發佈日期、正文連結]、[如個人研究、內部分析]、[如約 2000 個頁面]、[頁面特點]、[粘貼 HTML 片段]
ChatGPT Plus 充值
已被複製 0 次
使用說明
怎麼填變量:[頁面 HTML 片段] 從瀏覽器開發者工具裏複製列表中的一項和詳情頁的主要區域即可,AI 會根據它寫選擇器。[用途] 要如實寫,商用、公開發布和個人研究面臨的合規要求不同。
常見坑:
- 不看 robots.txt 和服務條款就開始抓,或者為了「快」把間隔設為零,可能給對方伺服器造成壓力,也可能違反對方條款。這條提示詞把合規檢查放在第一步。
- 很多網站其實提供官方接口或數據下載,比解析網頁穩定得多,先找一找。
- 只儲存解析後的結果,不緩存原始頁面。一旦發現解析規則寫錯了,只能重新請求一遍所有頁面。
追問技巧:頁面改版導致解析失敗時,把新的 HTML 片段貼回去,問「對比舊選擇器,需要改哪些地方」。
示例輸出
示例,僅供參考(節選)
合規檢查:
- 打開
https://目標網站/robots.txt,確認目標路徑(如/notices/)沒有被 Disallow;如果寫了 Crawl-delay,按其要求設定間隔。 - 該網站提供 RSS 訂閱源,列表數據可以直接從訂閱源獲取,只需對詳情頁做少量請求。
- 只採集標題、日期和連結,不採集評論區的用戶資訊。
python
import random, time, urllib.robotparser
import requests
UA = "research-bot/0.1 (contact: [email protected])"
rp = urllib.robotparser.RobotFileParser("https://example.org/robots.txt")
rp.read()
def polite_get(session: requests.Session, url: str) -> requests.Response | None:
if not rp.can_fetch(UA, url):
print(f"robots.txt 不允許:{url}")
return None
time.sleep(1 + random.random()) # 至少 1 秒,帶隨機抖動
r = session.get(url, headers={"User-Agent": UA}, timeout=15)
if r.status_code in (429, 503):
time.sleep(60) # 對方要求放慢時,等待更久
return r同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~