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

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

如何使用 Beautiful Soup 從 HTML 中提取特定的腳本元素

如何使用 Beautiful Soup 從 HTML 中提取特定的腳本元素

喵喵時光機 2023-08-08 09:51:00
我正在使用 BS4 從足球統計頁面提取信息。我是這樣開始的:from bs4 import BeautifulSoup as bsimport requestsres = requests.get(url)soup = bs(res.content, 'lxml')scripts = soup.find_all('script')scripts = [script for script in scripts]這成功地將所有腳本元素作為列表返回。我需要提取特定的腳本元素具體來說,其開頭如下: <script>    var teamsData = JSON.parse('\x7B\x2271\x22\x3A\x7B\x22id\x22\x3A\x2271\x22,\x22title\x22\x3A\x22Aston\x20Villa\x22,\x22history\x22\x3A\x5B\x5D\x7D,\x2272\x22\x3A\x7B\x22id\x22\x3A\x2272\x22...</script>我嘗試了以下代碼的各種迭代,但輸出始終打印為空白:for script in scripts:     if 'teamsData' in script.text:         print(script)我總是可以簡單地使用“print(scripts[2])”,但我想知道為什么我最初的努力失敗了。
查看完整描述

2 回答

?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

顯然,.text腳本標簽始終為空字符串。但是,您可以從以下位置獲取標簽的內容.children


from bs4 import BeautifulSoup

from io import StringIO


html = """

<script>

let a = "Hello";

</script>

"""

b = StringIO(html)

soup = BeautifulSoup(b, 'lxml')


for e in soup.find_all('script'):

    print(repr(e.text))

    print(repr(''.join(e.children)))


查看完整回答
反對 回復 2023-08-08
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

您可以使用以下方式.string訪問<script>字符串:


import re

import json

from bs4 import BeautifulSoup



html_doc = '''<script>

    var teamsData = JSON.parse('\x7B\x2271\x22\x3A\x7B\x22id\x22\x3A\x2271\x22,\x22title\x22\x3A\x22Aston\x20Villa\x22,\x22history\x22\x3A\x5B\x5D\x7D,\x2272\x22\x3A\x7B\x22id\x22\x3A\x2272\x22\x7D\x7D');

</script>'''


soup = BeautifulSoup(html_doc, 'html.parser')


script_string = soup.find('script').string

print(script_string)

印刷:


var teamsData = JSON.parse('{"71":{"id":"71","title":"Aston Villa","history":[]},"72":{"id":"72"}}');

要解析JSON數據,可以使用re/ jsonmodules。例如:


data = re.search(r"JSON\.parse\('(.*?)'\);", script_string).group(1)

data = json.loads(data)


for k, v in data.items():

    print(k, v)

印刷:


71 {'id': '71', 'title': 'Aston Villa', 'history': []}

72 {'id': '72'}


查看完整回答
反對 回復 2023-08-08
  • 2 回答
  • 0 關注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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