我试图从这个网页中获取特定状态的存储位置,我只能检索content_type : text/html
,我如何才能获得JSON部分,因为我知道它在那里查看html文件?
import requests
import json
headers = {
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36',
'accept-language': 'en-US,en;q=0.9',
'Content-type': 'application/json',
'Accept': 'text/plain'
}
response = requests.get('https://www.sephora.com/happening/storelist', headers=headers)
其结果如下
200
text/html; charset=UTF-8
现在当然我尝试了respone.json()
,它抛出了一个异常,
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
阅读输出full = json.dumps(response.text)
会导致一个非常混乱的文本,其中一部分仅作为字典编写<script id=\"linkStore\" type=\"text/json\" data-comp=\"PageJSON \">{\"page\": ....etc
编辑文章:工作代码
它的工作原理是使用bs 4解析html,然后根据text/json下的标签获取dict
soup = BeautifulSoup(response.text, 'html.parser')
script_tag = soup.find('script', {'type': 'text/json'})
if script_tag:
specific_content = script_tag.text
json_data = json.loads(specific_content)
else:
print("Script tag not found.")
1条答案
按热度按时间r1wp621o1#
您所请求的网址(URL)没有返回
json
的响应。相反,它返回一个plaintext/html
。因此,您会得到错误。您可以使用
.content
属性访问响应的内容。您可以在此处参考文档:https://requests.readthedocs.io/en/latest/user/quickstart/#binary-response-content