gpt4 book ai didi

python - 使用 BeautifulSoup 在脚本标签内查找键

转载 作者:太空宇宙 更新时间:2023-11-04 11:08:41 25 4
gpt4 key购买 nike

我想做的是从 HTML 文档中的脚本标记获取产品 ID。不幸的是,StockX 不提供公共(public) API,因此我必须从 HTML 文档中抓取数据。这是我的尝试(都有效):

尝试 1

import requests

PRODUCT_URL = 'https://stockx.com/supreme-steiff-bear-heather-grey'
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}

response = requests.get(url=PRODUCT_URL, headers=HEADERS).text
PRODUCT_ID = response[response.find('"product":{"id":"')+17:].partition('"')[0]
PRODUCT_NAME = response[response.find('<title>')+7:].partition('<')[0]

尝试 2

from bs4 import BeautifulSoup
import requests

# Gets HTML document
PRODUCT_URL = 'https://stockx.com/supreme-steiff-bear-heather-grey'
HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}
html_content = requests.get(url=PRODUCT_URL, headers=HEADERS)

# Make BeautifulSoup parser from HTML document
soup = BeautifulSoup(html_content.text, 'html.parser')

# Get product name
PRODUCT_NAME = soup.title.text

# Get script tag data with product ID
js_content = soup.find_all('script', type='text/javascript')[9].text
PRODUCT_ID = js_content[50:86]

print(PRODUCT_ID)

输出:884861d2-abe6-4b09-90ff-c8ad1967ac8c

但是,我觉得有更好的方法来解决这个问题,而不仅仅是在查找 ID 的位置“硬编码”。

如果您查看产品 URL 的页面源代码并搜索 "product":{"id":,您会发现该 ID 在分配给对象和标签内。

有没有更好的方法从 HTML 文档中获取产品 ID?

编辑:这是 html_content 的内容:https://gist.github.com/leecharles50/9b6b11fb458767cabcfc0ed4f961984d

最佳答案

我的第一个想法是解析标签内的 JavaScript。有一个名为 slimit 的包可以做到这一点。参见示例 this answer .

但是,对于您的情况,有一个更简单的解决方案。我在 DOM 中搜索了您提供的 ID (884861d2-abe6-4b09-90ff-c8ad1967ac8),并在以下标记中找到了一个实例:

<script type="application/ld+json">
{
[...]
"sku" : "884861d2-abe6-4b09-90ff-c8ad1967ac8c",
[...]
}
</script>

其中包含有效的 JSON。只需使用 BeautifulSoup 找到标签:

tag = soup('script', {'type': 'application/ld+json'})[-1]

并解码其中的 JSON:

import json
product_id = json.loads(tag.text)['sku']

关于python - 使用 BeautifulSoup 在脚本标签内查找键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58828471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com