第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Python3將網(wǎng)頁中的一堆JavaScript變量抓取到python dict對象中

Python3將網(wǎng)頁中的一堆JavaScript變量抓取到python dict對象中

SMILET 2021-05-13 17:17:43
我正在使用請求和BeautifulSoup4從網(wǎng)頁下載和抓取信息,我成功地將其范圍縮小到了我要從中獲取數(shù)據(jù)的特定<script>標(biāo)記內(nèi)的所有內(nèi)容。為了使這部分代碼正常工作,我跳過了所有請求和BS4的內(nèi)容,只是在代碼的開頭添加了這個(gè)字符串,如下所示:Content = '''// <![CDATA[devicetype = "computer";isios = false;videocdn = "media";videopath = "updates/na/vid01";poster = {    "file": "preview/vidsplash.jpg",    "st": "1557499029",    "et": "1557502629",    "hs": "f3ad16f42fec5224d323915cdfbf43ed"};attachname = "some-video-00001234";videos[0] = {    "wmv": {        "file": "wmv/01.wmv",        "name": "01",        "duration": 502,        "size": "195.1MB",        "wid": 854,        "hgt": 480,        "st": "1557499029",        "et": "1557502629",        "hs": "a0cfdef3b8b9e3dea576368a5bfbaef9",        "caps": []    },    "h264": {        "file": "h264/01.mp4",        "name": "01",        "duration": 502,        "size": "73.9MB",        "wid": 854,        "hgt": 480,        "st": "1557499029",        "et": "1557502629",        "hs": "32901a1870d0b32458b465ac9c3d6cad",        "caps": [{            "file": "001.jpg",      另請注意,這是美化的。通常,“ poster”和“ videos [0]”變量將分別位于其自己的行中,而不是多行,并且像這樣縮進(jìn)。這不是來自<script>標(biāo)記的完整數(shù)據(jù)集,我只是剝離了重復(fù)的部分,以使大家都能對數(shù)據(jù)的結(jié)構(gòu)有所了解。另請注意,“ videos [0]”將類似的數(shù)據(jù)結(jié)構(gòu)重復(fù)到“ videos [1]”中,依此類推。我想做的是將那個(gè)大的多行字符串以某種方式轉(zhuǎn)換為正確的字典,我可以在我的python代碼中進(jìn)行操作以提取所需的位print(NewContent)輸出:{'devicetype' = 'computer', 'isios' = False, "videocdn" = "media"}等等。我一直在糾結(jié)于js2py,試圖讓它做我需要做的事情,但是到目前為止,我得到的最遠(yuǎn)就是這個(gè)代碼:splitrawlines = CONTENT.splitlines()rawvars = []for line in splitrawlines:    # need to add the videos declaration in case it gets to a line where it expects it to already be declared.    rawvars.append(js2py.eval_js("videos = [];\n" + line))print(rawvars)唯一的問題是它不會(huì)將其輸出為dict,而是將其輸出為列表,我可能仍然可以使它工作,但是它甚至不是python可以操縱的列表,從技術(shù)上講它還是一個(gè)js2py.base.JsObjectWrapper對象。我可以將該對象轉(zhuǎn)換為字符串,但是將字符串轉(zhuǎn)換為列表的唯一方法是用空格分隔字符串中的所有內(nèi)容,并將每個(gè)單獨(dú)的部分丟入列表中自己的條目中。我基本上有一個(gè)已經(jīng)格式化的列表,就在一個(gè)字符串中。我可能用那個(gè)代碼走錯(cuò)了方向,但這是到目前為止我得到的最接近的代碼。因此,我需要找到一種方法來將基本上已經(jīng)格式化為完整列表的字符串轉(zhuǎn)換為實(shí)際的列表對象,或者更可取的是,找到一種不同的方式來將隨機(jī)JavaScript代碼中的所有變量轉(zhuǎn)換為本機(jī)python變量可以操縱。
查看完整描述

1 回答

?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

JavaScript數(shù)據(jù)大多為JSON格式,因此您可以使用python模塊json將其轉(zhuǎn)換為python s dictionary。


作為示例數(shù)據(jù),在"videos[0] = "創(chuàng)建正確的JSON數(shù)據(jù)之后,您可以data = json.loads(stringg)用來創(chuàng)建字典-然后可以獲取ie。data['wmv']['size']


data = '''{

    "wmv": {

        "file": "wmv/01.wmv",

        "name": "01",

        "duration": 502,

        "size": "195.1MB",

        "wid": 854,

        "hgt": 480,

        "st": "1557499029",

        "et": "1557502629",

        "hs": "a0cfdef3b8b9e3dea576368a5bfbaef9",

        "caps": []

    },

    "h264": {

        "file": "h264/01.mp4",

        "name": "01",

        "duration": 502,

        "size": "73.9MB",

        "wid": 854,

        "hgt": 480,

        "st": "1557499029",

        "et": "1557502629",

        "hs": "32901a1870d0b32458b465ac9c3d6cad",

        "caps": [{

            "file": "001.jpg",

            "fs": {

                "st": "1557499029",

                "et": "1557502629",

                "hs": "5b328642a84fa6406bda527c18e46c27"

            },

            "tn": {

                "st": "1557499029",

                "et": "1557502629",

                "hs": "0a4ad7d0edf1b92538b8127f8e297c41"

            }

        }, {

            "file": "002.jpg",

            "fs": {

                "st": "1557499029",

                "et": "1557502629",

                "hs": "4390c0d9b321b5e86c88cb8ca5e56ede"

            },

            "tn": {

                "st": "1557499029",

                "et": "1557502629",

                "hs": "9cf83158268379df660d6d01750a047c"

            }

        }]

    }

}'''


import json


data = json.loads(data)


print(data['wmv']['size'])


# 195.1MB

如果每個(gè)變量都是一行,則可以用于split('\n')獲取行,然后用于split('=')獲取鍵和值。


然后,你必須要是值僅開始檢查用{或[在使用json。其他值可以是普通字符串,因此不需要json-它可能只需要?jiǎng)h除"。


Content = '''// <![CDATA[

devicetype = "computer";

isios = false;

videocdn = "media";

videopath = "updates/na/vid01";

poster = {"file": "preview/vidsplash.jpg","st": "1557499029","et": "1557502629","hs": "f3ad16f42fec5224d323915cdfbf43ed"};

attachname = "some-video-00001234";'''


import json


results = {}


for line in Content.split('\n'):

    if ' = ' in line:

        line = line[:-1]  # remove `;`


        key, val = line.split(' = ', 1)


        if val.startswith( ('[', '{') ):

            results[key] = json.loads(val)

        elif val.startswith('"'):

            val = val[1:-1] # remove `"`

            results[key] = val

        elif val == 'false':

            results[key] = False

        elif val == 'true':

            results[key] = True


print(results['devicetype'])

print(results['isios'])

print(results['videocdn'])

print(results['poster']['file'])


# computer

# False

# media

# preview/vidsplash.jpg


查看完整回答
反對 回復(fù) 2021-05-27
  • 1 回答
  • 0 關(guān)注
  • 295 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號