python怎樣抓取js生成的頁面
之前我們爬取的網頁,多是HTML靜態生成的內容,直接從HTML原始碼中就能找到看到的資料和內容,然而並不是所有的網頁都是這樣的。
有一些網站的內容由前端的JS動態生成,由於呈現在網頁上的內容是由JS生成而來,我們能夠在瀏覽器上看得到,但是在HTML原始碼中卻發現不了。比如今日頭條:
瀏覽器呈現的網頁是這樣的:
檢視原始碼,卻是這樣的:
網頁的新聞在HTML原始碼中一條都找不到,全是由JS動態生成載入。
遇到這種情況,我們應該如何對網頁進行爬取呢?有兩種方法:
1、從網頁響應中找到JS指令碼返回的JSON資料;2、使用Selenium對網頁進行模擬訪問
一、從網頁響應中找到JS指令碼返回的JSON資料
即使網頁內容是由JS動態生成載入的,JS也需要對某個介面進行呼叫,並根據介面返回的JSON資料再進行載入和渲染。
所以我們可以找到JS呼叫的資料介面,從資料介面中找到網頁中最後呈現的資料。
就以今日頭條為例來演示:
1、從找到JS請求的資料介面
F12開啟網頁除錯工具
選擇“網路”選項卡後,發現有很多響應,我們篩選一下,只看XHR響應。
(XHR是Ajax中的概念,表示XMLHTTPrequest)
然後我們發現少了很多連結,隨便點開一個看看:
我們選擇city,預覽中有一串json資料:
我們再點開看看:
原來全都是城市的列表,應該是載入地區新聞之用的。
現在大概瞭解了怎麼找JS請求的介面的吧?但是剛剛我們並沒有發現想要的新聞,再找找看:
有一個focus,我們點開看看:
與首頁的圖片新聞呈現的資料是一樣的,那麼資料應該就在這裡面了。
看看其他的連結:
這應該是熱搜關鍵詞
這個就是圖片新聞下面的新聞了。
我們開啟一個介面連結看看:http://www.toutiao.com/api/pc/focus/
返回一串亂碼,但從響應中檢視的是正常的編碼資料:
有了對應的資料介面,我們就可以仿照之前的方法對資料介面進行請求和獲取響應了
2、請求和解析資料介面資料
先上完整程式碼:
# coding:utf-8 import requests import json url = 'http://www.toutiao.com/api/pc/focus/' wbdata = requests.get(url).text data = json.loads(wbdata) news = data['data']['pc_feed_focus'] for n in news: title = n['title'] img_url = n['image_url'] url = n['media_url'] print(url,title,img_url)
返回出來的結果如下:
程式碼分為四部分
第一部分:引入相關的庫
# coding:utf-8 import requests import json
第二部分:對資料介面進行http請求
url = 'http://www.toutiao.com/api/pc/focus/' wbdata = requests.get(url).text
第三部分:對HTTP響應的資料JSON化,並索引到新聞資料的位置
data = json.loads(wbdata) news = data['data']['pc_feed_focus'
第四部分:對索引出來的JSON資料進行遍歷和提取
for n in news: title = n['title'] img_url = n['image_url'] url = n['media_url'] print(url,title,img_url)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/430/viewspace-2836637/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Laravel 配合 puppeteer 抓取 SPA 頁面Laravel
- Python爬蟲二:抓取京東商品列表頁面資訊Python爬蟲
- js 怎樣判斷使用者是否在瀏覽當前頁面JS
- 【Python】Python抓取分享頁面的原始碼示例Python原始碼
- python怎樣執行js語句PythonJS
- js設定頁面TR 的屬性 背景顏色 樣式JS
- 例項:使用puppeteer headless方式抓取JS網頁JS網頁
- 使用 Beautiful Soup 在 Python 中抓取網頁Python網頁
- Python爬蟲之js加密破解,抓取網易雲音樂評論生成詞雲Python爬蟲JS加密
- 列印頁面時怎樣自定義列印頁首頁尾或者去掉眉頁尾?
- 怎樣使用iframe重新整理父級頁面?
- js頁面跳轉的問題(跳轉到父頁面、最外層頁面、本頁面)JS
- 怎麼建立屬於自己的網址,教你怎樣建網頁,裝修頁面內容網頁
- 如何用Python爬資料?(一)網頁抓取Python網頁
- 編寫web2.0爬蟲——頁面抓取部分Web爬蟲
- Java爬蟲系列二:使用HttpClient抓取頁面HTMLJava爬蟲HTTPclientHTML
- Flutter 路由——頁面表及頁面引數繫結的自動生成Flutter路由
- 怎樣實現每次頁面開啟時都清除本頁快取?快取
- Python中使用mechanize庫抓取網頁上的表格資料Python網頁
- 前端頁面水印生成實現前端
- JS是怎樣執行的JS
- js/jquery禁止頁面回退JSjQuery
- 如何檢測前端頁面的安全性?怎樣避免web頁面攻擊?前端Web
- js 進入頁面載入的方法JS
- 使用代理抓取網頁的原因網頁
- 網站頁面內的內容結構怎樣佈局才合理?網站
- 怎樣生成分散式的流水ID分散式
- 怎樣生成一個好的詞向量
- Python求職怎麼樣?面試成功的關鍵技巧分享Python求職面試
- uni-app 頁面樣式APP
- 搭建谷歌瀏覽器無頭模式抓取頁面服務,laravel->php->python->docker !!!谷歌瀏覽器模式LaravelPHPPythonDocker
- JS 怎樣模擬類的特性JS
- fastadmin: 避免引入頁面同名jsASTJS
- 原生js頁面事件詳解JS事件
- PbootCMS網站後臺登入頁面樣式怎麼修改boot網站
- Python頁面載入的等待方式Python
- Next.js頁面渲染的優化方案JS優化
- js返回頁面頂部的實現(layui)JSUI