【发布时间】:2020-04-27 03:13:18
【问题描述】:
我有一个类型元素,bs4.element.Tag,是网络抓取的产物,我通常这样做:json.loads (soup.find ('script', type = 'application / ld + json'). Text),但在此页面上它只出现在:<script> </script>,所以我不得不这样做:scripts = soup.find_all ('script'),直到我找到我感兴趣的:script = scripts [18]。
有问题的变量是script。我的问题是我想访问它的属性,例如script ['goodsInfo'],显然是一个元素类型bs4.element.Tag,尝试做:script.attrs 并返回我{}。然后我尝试将其转换为json: json.loads (str (script)) 类型,它抛出了异常:'JSONDecodeError: Expecting value: line 1 column 1 (char 0)'
这是我的代码:
import json
from bs4 import BeautifulSoup
import requests
url_aux = 'https://www.shein.com/Mock-neck-Brush-Stroke-Print-Bodycon-Dress-p-941649-cat-1727.html?scici=navbar_2~~tab01navbar04~~4~~real_1727~~~~0~~0'
response = requests.get(url_aux)
soup = BeautifulSoup(response.content, "html.parser")
scripts = soup.find_all('script')
script = scripts[18]
print(json.loads(str(script)))
#output: JSONDecodeError: Expecting value: line 1 column 1 (char 0)
print(type(script))
#output: bs4.element.Tag
print(str(json.loads(str(script))))
【问题讨论】:
-
var gbProductDetailsSsrData后面的结构是否总是相同的?因为在这种情况下您可以使用re包来检索数据。 -
你需要找到第一个
{和最后一个}加上1。然后将whitespace和\n替换为空白""然后就可以开始加载了!
标签: python json beautifulsoup