python爬蟲(chóng)將js轉(zhuǎn)化成json實(shí)現(xiàn)示例
正文
有一個(gè)優(yōu)秀的庫(kù)可以使用————demjson
示范鏈接
http://fcd.5173.com/commondat...
請(qǐng)求上面鏈接,會(huì)得到如下圖的一個(gè)js文件
我們需要把這個(gè)js文件轉(zhuǎn)成為dict,方便提取其中需要的字段(這在爬蟲(chóng)任務(wù)中非常常見(jiàn))
失敗的方法
傳統(tǒng)方法
通常轉(zhuǎn)js文件為dict的過(guò)程:
1.先通過(guò)切片掐頭去尾,去掉頭部的 “callarea(” 和尾部的 “)” 。
2.再次導(dǎo)入json這個(gè)庫(kù),使用loads,json.loads(resposne.text[9:-1])
,實(shí)現(xiàn)json轉(zhuǎn)dict。
但是,這個(gè)方法在這里行不通。
import requests import json url = 'http://fcd.5173.com/commondata/Category.aspx?type=area&cache=&id=20c8bbc1b9794fc98bd96859624d4769&jsoncallback=callarea' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36', } resposne = requests.get(url, headers=headers) print(json.loads(resposne.text[9:-1]))
錯(cuò)誤原因
js文件并不一定是json的超集,這此處的js文件key不包含雙引號(hào),value中的內(nèi)容是單引號(hào)。
上訴方法行得通的前提是這個(gè)js需要時(shí)json的超集,key和value都由雙引號(hào)包圍。
天無(wú)絕人之路
通過(guò)demjson可以一步到位
import requests import demjson url = 'http://fcd.5173.com/commondata/Category.aspx?type=area&cache=&id=20c8bbc1b9794fc98bd96859624d4769&jsoncallback=callarea' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36', } resposne = requests.get(url, headers=headers) for item in demjson.decode(resposne.text[9:-1]): id = item.get('id') name = item.get('name') print(id, name)
得到如下結(jié)果
寫(xiě)代碼千萬(wàn)不要睡著了
以上就是python爬蟲(chóng)將js轉(zhuǎn)化成json實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于python將js轉(zhuǎn)化成json的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
keras實(shí)現(xiàn)VGG16方式(預(yù)測(cè)一張圖片)
這篇文章主要介紹了keras實(shí)現(xiàn)VGG16方式(預(yù)測(cè)一張圖片),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07Python中的getter與setter及deleter使用示例講解
這篇文章主要介紹了Python中的getter與setter及deleter使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01Python爬蟲(chóng)獲取數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中的超詳細(xì)教程(一看就會(huì))
使用爬蟲(chóng)爬數(shù)據(jù),總要涉及到數(shù)據(jù)持久化,也就是數(shù)據(jù)存儲(chǔ)的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Python爬蟲(chóng)獲取數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中的超詳細(xì)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06Python保留指定位數(shù)小數(shù)的5種方法總結(jié)
很多小伙伴在學(xué)習(xí)python的時(shí)候可能會(huì)遇到對(duì)數(shù)據(jù)進(jìn)行格式化輸出的需求,其中最常見(jiàn)的需求為保留幾位小數(shù),這篇文章主要給大家介紹了關(guān)于Python保留指定位數(shù)小數(shù)的5種方法,需要的朋友可以參考下2023-08-08Python的Django框架中自定義模版標(biāo)簽的示例
這篇文章主要介紹了Python的Django框架中自定義模版標(biāo)簽的示例,標(biāo)簽的用處比過(guò)濾器更多,需要的朋友可以參考下2015-07-07Python Numpy計(jì)算各類(lèi)距離的方法
這篇文章主要介紹了Python Numpy計(jì)算各類(lèi)距離的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Python利用matplotlib實(shí)現(xiàn)制作動(dòng)態(tài)條形圖
說(shuō)到用 Python 制作動(dòng)態(tài)圖,首先想到的肯定是一些直接拿來(lái)就用的庫(kù),雖然我沒(méi)做過(guò),但是我相信一定有且不止一個(gè),搜了一圈后發(fā)現(xiàn)有個(gè)bar chart race庫(kù)看起來(lái)不錯(cuò),感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-10-10Python利用3D引擎寫(xiě)一個(gè)Pong游戲
之前,我們嘗試過(guò)用pygame做了一個(gè)2D的Pong游戲。本文將利用強(qiáng)大的3D引擎Ursina制作一個(gè)3D版的Pong游戲。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-01-01Python報(bào)錯(cuò)TypeError: object of type ‘gener
在Python開(kāi)發(fā)的復(fù)雜世界中,報(bào)錯(cuò)信息就像神秘的謎題,困擾著開(kāi)發(fā)者和環(huán)境配置者,其中,TypeError: object of type ‘generator’ has no len()這個(gè)報(bào)錯(cuò),常常在不經(jīng)意間打亂我們的開(kāi)發(fā)節(jié)奏,本文讓我們一起深入探究這個(gè)報(bào)錯(cuò)問(wèn)題,為Python開(kāi)發(fā)之路掃除障礙2024-10-10