一、 爬取豆瓣電影排行榜數據
import requests
import json
url = ‘https://movie.douban.com/j/chart/top_list’
param = {
‘type’:‘24’,
‘interval_id’:‘100:90’,
‘action’:‘’,
‘start’:‘0’, #從庫中的第幾部電影去取
‘limit’:‘20’,
}
headers = {
‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0’
}
response = requests.get(url=url,params=param,headers=headers)
list_data = response.json()
fp = open(‘e:/Reptile/douban.json’,‘w’,encoding=‘utf-8’)
json.dump(list_data,fp=fp,ensure_ascii=False)
print(‘over!!!’)
二、爬取數據時頁面數據分析的重要性
在真正寫爬蟲之前,必須先做一件事:肉眼+工具“觀察”頁面,搞清楚數據到底以什么形式存在、藏在哪兒、怎樣才能拿到。下面給你一張“觀察清單”,按圖索驥即可。
1. 先分清“頁面呈現”≠“原始數據”
你在瀏覽器里看到的 | 實際在網絡層傳輸的可能 |
---|---|
表格/列表/文字 | HTML 片段、JSON、CSV、二進制圖片/文件 |
點擊“加載更多” | AJAX 異步請求返回 JSON |
無刷新翻頁 | 后端接口分頁參數(?page=2 ) |
圖片懶加載 | data-src 真實地址延遲替換 src |
2. 四步現場勘查(用瀏覽器開發者工具 F12)
① Elements(元素)面板
看 DOM 結構:數據是直接嵌在 HTML 標簽里,還是通過 JS 動態插入?
檢查關鍵節點:id、class、data-* 屬性,方便后面寫 XPath/CSS 選擇器。
② Network(網絡)面板
刷新頁面,篩選 XHR 或 Fetch 請求:
有沒有 .json 結尾的接口?
請求參數里是否有 page、size、token?
看響應頭:
Content-Type: application/json → 純接口,直接抓。
Content-Type: text/html → 服務端渲染,用 HTML 解析。
Content-Type: image/* → 二進制流,用 requests.get().content 保存。
看響應體(Preview/Response 標簽):
是 HTML 片段?還是 JSON 數組?還是 base64 圖片?
③ Sources(源碼)面板
全局搜索關鍵字(Ctrl+Shift+F):
搜接口關鍵詞:api/v1/list、/search?keyword=。
搜加密/混淆字段:token、sign、_t。
定位 JS 變量:數據是否藏在 window.INITIAL_STATE 或某個全局變量?
④ Application(應用)面板
看 Cookies/LocalStorage/SessionStorage:
有沒有身份令牌(sessionid、jwt)?
看 IndexedDB 是否緩存了離線數據。
3. 常見數據藏身方式及獲取手段對照表
數據呈現方式 | 數據真實位置 | 獲取方式 |
---|---|---|
普通網頁列表 | HTML 標簽中 | requests.get() + BeautifulSoup 解析 |
下拉加載更多 | 異步 JSON 接口 | 直接 requests.get(api_url) 拿 JSON |
圖片懶加載 | data-src 屬性 | 提取真實地址再下載 |
加密參數 | JS 生成 sign | ① 摳算法 ② 用 PyExecJS/Node 復現 ③ 直接 Selenium |
登錄后數據 | Cookie 鑒權 | 先 POST /login 拿 Cookie,后續帶 Cookie 訪問 |
無限滾動 | 分頁 JSON 接口 | 找到 page= 參數循環請求 |
大文件下載 | 二進制流 | stream=True 分塊保存 |
字體反爬 | 自定義字體文件 | 下載字體 → 映射字符 → 替換 |
4. 一句話口訣
“先 F12 看 Network,接口優先,HTML 兜底,JS 加密就拆算法。”
不確定類型?把 Response 內容復制到 JSON.cn 在線校驗,看是否合法 JSON。
需要批量測試?用 Postman 或 curl 手動調接口,確認參數和返回格式。
遇到 403/401?檢查 Headers 里的 User-Agent、Referer、Authorization 是否缺失。