繁体   English   中英

使用 Selenium 和 ZE2ABFAA61AB9F983ZFEFA1DEE6BC78CB9 解析 JavaScript Output

[英]Parsing JavaScript Output Using Selenium and Beautifulsoup

使用 Selenium 提取了 JavaScript 数据,可以看到我需要的数据(“meeting_summary_reference”)包含在字典类型“结构”中。 Python json 不解析此类数据,test2_text 和 test33 均为空白。 所以标签不会转换为文本。 漂亮的汤串也不适合我。 不精通复杂的正则表达式。 不知道接下来要尝试什么。

from urllib.parse import urlparse
from bs4 import BeautifulSoup
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(executable_path='C:/A38/chromedriver_win32/chromedriver.exe')

driver.implicitly_wait(30)
driver.maximize_window()
# Navigate to the application home page
driver.get("https://www.sportinglife.com/racing/results/2020-11-23")

innerHTML = driver.execute_script("return document.body.innerHTML")
print("\nJS PAGE SOURCE:", "\n", driver.page_source)

j_str = driver.page_source
html = j_str
bsObj = BeautifulSoup(html, "html.parser")
print("\nBSOBJ:", "\n", bsObj.prettify())

test2 = bsObj.find('script', attrs={'id': '__NEXT_DATA__'})
print("\nTEST2: \n", test2)
print("\nTYPE TEST2: \n", type(test2))
print("\nLENGTH TEST2: \n", len(test2))
test2_text = bsObj.find('script', attrs={'id': '__NEXT_DATA__'}).getText()
print("\nTEST2_TEXT: \n",test2_text)

test33 = test2.find(text = "meeting_summary_reference")
print("\nTEST33: \n", test33)

我不确定您是否可以使用beautifulsoup提取该信息,但您可以使用此正则表达式:

import re
...
test2_text = bsObj.find('script', attrs={'id': '__NEXT_DATA__'}) # I edited this line also
pattern = r'\"meeting_summary_reference\":\{(.*?)(\{.*\})?\},'
test33 = re.findall(pattern, str(test2_text), re.M)

它将找到所有名为meeting_summary_reference的嵌套对象,然后您可以将其转换为 python 字典并提取所需信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM