亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用請求和 buetifulsoup 抓取 javascript 元素

如何使用請求和 buetifulsoup 抓取 javascript 元素

人到中年有點甜 2023-05-23 16:03:52
如何抓取元素 (series: ~~~~ until ~~~~ data: [[90, 63000],[91, 68000]]}] 并將其轉換為 dict 或 list 類型?這是網站中的javascript:<script type="text/javascript">                    var chart;            var screenWidth = window.innerWidth * 0.935 * 1;                $(document).ready(function() {                                                        series: [{                                        name: 'Water',                    data: [[90, 50000],[91, 53000]]                  },{                                        name: 'Tea',                    data: [[90, 47000],[91, 53000]]                  },{                                        name: 'Tonic',                    data: [[90, 63000],[91, 68000]]                  }]                });                                            });                        </script>這是我的錯誤python代碼:    s=requests.get(url,params = data,headers)    data= BeautifulSoup(s.text,'lxml')    jsons= data.find_all('script')[1].text    datas= jsons.find('series:')    last= jsons.find(']]')    new=''    for x in range(datas+6,last+2):        new+=jsons[x]    newdata = eval(new)
查看完整描述

1 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

問題是數據不是 json,它是一個 javascript 對象。即使您選擇 json 并應用json.loads它也會失敗。因此,您將需要可以將 javascript 對象轉換為 json 的第 3 方庫。

我使用demjson-?

from bs4 import BeautifulSoup

import demjson


html = """<script type="text/javascript">

? ? ? ??

? ? ? ? ? ? var chart;

? ? ? ? ? ? var screenWidth = window.innerWidth * 0.935 * 1;? ??

? ? ? ? ? ? $(document).ready(function() {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? series: [{

? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? name: 'Water',

? ? ? ? ? ? ? ? ? ? data: [[90, 50000],[91, 53000]]

? ? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? name: 'Tea',

? ? ? ? ? ? ? ? ? ? data: [[90, 47000],[91, 53000]]

? ? ? ? ? ? ? ? ? },{

? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? name: 'Tonic',

? ? ? ? ? ? ? ? ? ? data: [[90, 63000],[91, 68000]]

? ? ? ? ? ? ? ? ? }]

? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ??

? ? ? ? ? ? });

? ? ? ? ? ? ? ??

? ? ? ? </script>"""


script = soup.find("script").text.strip()

data = demjson.decode(script[script.index("{"):script.index("});")] + "}")


print(type(data))

print("-" * 10)

print(data)

輸出:


<class 'dict'>

----------

{'series': [{'name': 'Water', 'data': [[90, 50000], [91, 53000]]}, {'name': 'Tea', 'data': [[90, 47000], [91, 53000]]}, {'name': 'Tonic', 'data': [[90, 63000], [91, 68000]]}]}



查看完整回答
反對 回復 2023-05-23
  • 1 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號