1. python爬蟲怎麼抓取ajax返回的json
網頁提交的數據吧? 網頁或者外界提交過來的數據都是字元串格式的。需要用json.loads()轉成json格式 你試試: import jsonprint json.loads(request.body)
2. Pytho怎樣自學
我是真正零基礎開始學Python的,從一開始的一竅不通,到3個月後成功搭建了一個動態網站(沒有用任何框架)。相比於計算機大牛,我更加知道一個小白將會遇到什麼坑,遇到哪些難點。我把我的學習過程寫在下面,並附上在每個階段的學習資料,希望對零基礎的Python學習者有所幫助。
SQL書籍:Sams Teach Yourself MySQL in 21 Days
Python:Python核心編程(第二版)
Github上的優質Python資源:CodementorIO/Python-Learning-Resources
過程中還牽涉到部署,我的網站是跑在Linux上的。關於部署網上有非常多的優質教程,一搜一大把。這里就不再贅述。
這些是我學習大致路線,當然過程中充滿著小的磕磕絆絆,雖然網站上線了,貌似運行還比較順利,但是如果以一個程序員的標准來要求自己,自己依然非常菜鳥。不過我並沒有以前那樣懼怕技術了,就像你明白魔術的背後的原理後,會更多的思考原理本身。
3. python從requests.get獲取的json格式文件中解析數據
我記得 res.json 可以直接獲得 json 數據
4. Python 爬蟲爬坑路(二)——B站圖片,咸魚的正確 GET 姿勢
昨天在寫完 入門級爬蟲之後 ,馬上就迫不及待的著手開始寫 B站的圖片爬蟲了,真的很喜歡這個破站呢 (〜 ̄△ ̄)〜
這里不涉及到 Python 爬蟲的高級技巧,沒有使用框架,沒有考慮反爬機制,沒有使用非同步IO技術,因為這些,我都不會!
我們選定 B站的 動畫區 進行測試,打開後我們發現有好多好多圖....
但當我們使用 F12 查看這些圖片的時候,發現並沒有圖片的地址...
這就是目前大多網站使用的 Ajax 技術動態載入數據的鍋,可遇到這種情況這么辦呢?別急別急,我們知道這些圖片的地址一定是需要載入的,而目前常見WEB傳輸數據的基本就是方式 XML 和 Json (其實是我就知道這兩種...),那好我們去看看請求的 XML 和 Json 文件。
以下省略查找過程....
我們發現 B站的圖片地址是保存在 Json 裡面的,ok,我們保存好這個 json 地址:
https://api.bilibili.com/x/web-interface/dynamic/region?callback=jQuery172071087417824369_1505783866149&jsonp=jsonp&ps=15&rid=24&_=1505783866453
這個是 MAD·AMV 最新動態的 Json 文件,利用上面相同的方法,我們找到 3D區、短片·配音區、綜合區 以及 右邊排行部分 的相應 json 地址。
好在 Chrome 瀏覽器提供了一個 Preview 功能,自動幫我們整理好 數據,如下
這樣就很清晰啦,我們只需要一層層解析拿到 pic 即可。於是我們這樣寫:
我們利用 requests 內置的 json 解碼器,很不幸,報錯:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
它提示說:解碼 Json 數據的時候出了問題,可能是在 第一行 第一列,咦?好奇怪,剛才不是用瀏覽器看過結構了嗎,沒毛病啊,怎麼還在報錯:Σ(  ̄□ ̄||)
別急別急,我們先看看原始的 Json 數據長啥樣?用 瀏覽器打開上面的 json 鏈接就可以了。
(/TДT)/ 前面的那些字母是幹嘛的呀,為什麼還有括弧啊!
所以我們知道了 Json 解析錯誤 的原因啦:後面在處理的時候把前面的這部分刪掉就好啦,另外我們也發現了 archives 這個關鍵字,我們在上一張圖看見過的哦,有印象嗎?啊,你說沒有呀,沒關系,這里你只需要記著它是一個 List 的數據類型就好了呀!
為了防止被當作是 惡意訪問 從而被封 IP,這里我們選擇犧牲時間,取巧使用 sleep(x) ,讓其等待一段時間之後再發出請求。
你可能會問我,呀,你這個,根本沒有代理、沒有混淆IP防止反爬、也沒有模擬 Ajax 請求動態抓取雲雲~
那我可以很負責的告訴你,你!走錯地方了!你要找的技術貼出門右拐!( ̄へ ̄)
我們恰巧使用的是 B站的 Ajax 技術,只要哪個視頻有了最新評論(或者是一下其它的條件),就會使用 Ajax 將最新的數據取出來。就像下面這樣:
所以可能在訪問人數多的時候,更新越快,越有可能獲得更多不同的圖片啦!
之後你就可以在吃飯的時候,把它掛起,然後吃飯回來就會發現有好多好多的圖片!(=・ω・=)
之後會陸續的更新自己爬蟲的爬坑過程,希望能夠找到小夥伴一起學習呀!
5. python和ajax和json
ajax是屬於template裡面的一個非同步請求而已,如果你在views裡面傳回來是你說的「實體對像(models)」的話,我就有點搞不明白了。。。
不知道你在那個view方法直接return的是什麼?
如果使用json處理對象的話請使用:
from django.http import HttpResponse
from models import mymodels
import simplejson
...
def ajax(request):
a = mymodels.objects.all()[0]
'''
此處假設a中有name、age參數
model對象是不能直接作為json可以處理,必須先轉換為dict類型
'''
result = {}
result['name'] = a.name
result['age'] = a.age
result = simplejson.mps(result)
return HttpResponse(result)
此時用ajax訪問這個試圖返回的內容就是:
{"name":"Jim Green","age":"14"}
上面這種辦法不是很好,建議先寫一個template模板專門來顯示此model內容。
假設模板ajax.html的內容為:
===================ajax.html===============
name: {{a.name}}<br />
age: {{a.age}}
=======================================
views視圖如下:
from django.http import HttpResponse
from models import mymodels
from django.shortcuts import render_to_response
...
def ajax(request):
a = mymodels.objects.all()[0]
return render_to_response("ajax.html",{"a":a})
此時用ajax訪問這個視圖返回的內容就是:
name: Jim Green
age: 14
以上的代碼可能會有錯誤,因為是隨手寫的,希望能夠幫到你
====修改了一下====
模板文件名打錯了。。。
修改了一下就到了樓上的下面了,樓上你也太沒水準了。直接復制
=====修改=====
使用model.__dict__屬性可以獲得字典,希望能幫到你
6. json是什麼
JSON(JavaScriptObject Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基於ECMAScript(歐洲計算機協會制定的js規范)的一個子集,採用完全獨立於編程語言的文本格式來存儲和表示數據。
簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。簡單來說:json就是一種在各個編程語言中流通的數據格式,負責不同編程語言中的數據傳遞和交互。
(6)pythonajaxjson擴展閱讀
注意事項:
1,json的鍵值對的鍵部分,必須用雙引號"包裹,單引號都不行(所以如果在鍵中出現了關鍵字,也被字元化了),而js中對象沒有強制要求(所以在鍵中不允許出現關鍵字)。
2,json的鍵值對的值部分,不允許出現函數function,undefined,NaN,但是可以有null,js中對象的值中可以出現。
3,json數據結束後,不允許出現沒有意義的逗號,如:{"name":"admin","age":18,},注意看數據結尾部分18的後面的逗號,不允許出現。
7. 前端js 後端python 如何用ajax下載文件
前端js改成這樣試試:
var form = $("<form></form>").attr("action", "/cgi-bin/rpt_data_toExcel.py").attr("method", "post");
form.append($("<input></input>").attr("type", "hidden").attr("name", "fileName").attr("value", "results.xls"));
form.appendTo('body').submit().remove();