首页 > 解决方案 > BeautifulSoup 提取脚本变量数据

问题描述

我正在尝试提取这只股票的名称。

该变量从 var followObjTitle 中读取。

网址:https ://www.nasdaq.com/symbol/aapl

from bs4 import BeautifulSoup
import requests
import re
import json

with requests.Session() as c:

      nasdaq_baseurl = 'https://www.nasdaq.com/symbol/'
      nasdaq_url = nasdaq_baseurl.__add__("AAPL")


      url_fetch = c.get(nasdaq_url)
      soup = BeautifulSoup(url_fetch.text, 'html.parser')

      pattern = re.compile("var followObjTitle = '(.*?)';", re.MULTILINE | re.DOTALL)
      script = soup.find_all("script", text=pattern, type="text/javascript")
      name = soup.select('script')[]
      print(name)

我的预期输出是“Apple Inc.”。

如何选择该特定变量来提取其内容?

标签: pythonpython-3.xbeautifulsoup

解决方案


一般来说,BS 并不打算解析 JavaScript。使用纯re. 在您的特定情况下,您要查找的行是var followObjTitle = "Apple Inc.";. 请注意,它使用双引号,但您的正则表达式会尝试匹配单引号。最后, remove re.MULTILINE | re.DOTALL,它们在您的正则表达式中没有任何业务。

pattern = re.compile("var followObjTitle = \"(.*?)\";")
pattern.findall(soup.text)
#['Apple Inc.']

推荐阅读