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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python爬蟲-抓取騰訊招聘資訊頁面Python爬蟲
- 如何使用angularjs實現抓取頁面內容AngularJS
- Laravel 配合 puppeteer 抓取 SPA 頁面Laravel
- python抓取網頁Python網頁
- Python爬蟲二:抓取京東商品列表頁面資訊Python爬蟲
- java抓取HTML頁面的資料(淘寶頁面),JavaHTML
- java抓取有驗證的頁面內容Java
- NodeJS使用PhantomJs抓取網頁NodeJS網頁
- 使用PHP的正則抓取頁面中的網址PHP
- Excel怎樣連結到word文件中指定的頁面Excel
- php 生成靜態頁面PHP
- PHP生成靜態頁面PHP
- js設定頁面TR 的屬性 背景顏色 樣式JS
- PHP模擬登陸抓取頁面內容PHP
- SAP BSP和JSP頁面裡UI元素的ID生成邏輯JSUI
- 用github Pages生成的網頁沒有樣式,怎麼破?Github網頁
- JSP頁面動態生成表格併為表格新增事件JS事件
- js頁面跳轉的問題(跳轉到父頁面、最外層頁面、本頁面)JS
- 怎麼建立屬於自己的網址,教你怎樣建網頁,裝修頁面內容網頁
- Flutter 路由——頁面表及頁面引數繫結的自動生成Flutter路由
- 前端頁面水印生成實現前端
- Java爬蟲系列二:使用HttpClient抓取頁面HTMLJava爬蟲HTTPclientHTML
- 編寫web2.0爬蟲——頁面抓取部分Web爬蟲
- python怎樣執行js語句PythonJS
- 【Python】Python抓取分享頁面的原始碼示例Python原始碼
- js頁面彈窗JS
- js頁面跳轉JS
- 如何檢測前端頁面的安全性?怎樣避免web頁面攻擊?前端Web
- uni-app 頁面樣式APP
- 網站頁面內的內容結構怎樣佈局才合理?網站
- Python爬蟲之js加密破解,抓取網易雲音樂評論生成詞雲Python爬蟲JS加密
- 小豬的Python學習之旅 —— 5.使用Selenium抓取JavaScript動態生成資料的網頁PythonJavaScript網頁
- 使用 Beautiful Soup 在 Python 中抓取網頁Python網頁
- Python爬蟲使用代理proxy抓取網頁Python爬蟲網頁
- Python網頁抓取工具Beautiful Soup面面觀!Python網頁
- js/jquery禁止頁面回退JSjQuery
- JSP註冊頁面JS
- SSH之jsp頁面JS