繁体   English   中英

如何使用 Python 的 BeautifulSoup 提取 Javascript 标记中的数据

[英]How To Extract Data Within a Javascript Tag Using Python's BeautifulSoup

我正在尝试提取进行“系列:”的数据,如下所示。

 }
        },
        series: [{ name: '', showInLegend: false, animation: false, color: '#c84329', lineWidth: 2, data: [[1640926800000,164243],[1638248400000,224192],[1635566400000,143606],[1632974400000,208461],[1630382400000,85036],[1627704000000,25604],[1625025600000,44012],[1622433600000,111099],[1619755200000,53928],[1617163200000,12286],[1614488400000,12622],[1612069200000,4519],[1609390800000,12665],[1606712400000,314],[1604116800000,3032],[1601438400000,4164],[1598846400000,3302],[1596168000000,22133],[1593489600000,8098],[1590897600000,-1385],[1588219200000,43165],[1585627200000,427],[1582952400000,175],[1580446800000,174],[1577768400000,116],[1575090000000,196],[1572494400000,215],[1569816000000,418],[1567224000000,375],[1564545600000,375],[1561867200000,179],[1559275200000,132],[1556596800000,146],[1554004800000,163],[1551330000000,3],[1548910800000,49],[1546232400000,-29],[1543381200000,108],[1540958400000,35],[1538280000000,159],[1535688000000,287],[1533009600000,1152],[1530331200000,1306]] }],
        navigation: { menuItemStyle: { fontSize: '9px' } }
    });      

更具体地说,我正在尝试提取data ,其中包含 unix 时间戳和整数的列表。 这是我目前所拥有的......

url = "https://socialblade.com/twitter/user/twitter"
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0'}
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
soup = bs(response.read(), 'html.parser')

soup = soup.find_all('script', {"type": "text/javascript"})
script = soup[6].text

有什么想法吗?

脚本的数据类型是字符串,因此我们可以使用“re”模块查找脚本中所有出现的“data”,然后我们可以观察到脚本中的每个数据都以“}”结尾,这样我们就可以找出数据后的第一个“}”现在使用“数据”substring 的开始索引和数据后第一个“}”的索引,我们可以使用字符串切片来查找数据。 您可以看到下面给出的代码和 output。

import re
sub = "data"
res = re.finditer(sub, script)
for i in res:
  k = script.find("}",i.start())
  print(script[i.start():k])

Output 是: 在此处输入图像描述

所需数据的完整脚本

import requests
from bs4 import BeautifulSoup

url = "https://socialblade.com/twitter/user/twitter"

s = requests.Session()

r = requests.get(
    url,
    headers={
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36",
    },
)

soup = BeautifulSoup(r.text, "html.parser")
req = soup.find_all("script", {"type": "text/javascript"})
script = req[6].contents[0]
data = script[2447: 3873]

print(data)

暂无
暂无

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

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