我试过这样抓取网页。我想从网站上的产品获得价格和名称。
和我不知道如何提取特定的脚本包括"产品详细信息jason inline script." " script type="application/ld+json>">
所以使用beautifulsoup提取所有的Jason内联脚本数据我把它分配给脚本。我尝试了很多方法来提取特定的一个脚本,但它不起作用。所以我尝试像列表一样切片。
我使用索引来提取我想要的特定脚本。我选择index[6]来隔离具体的脚本。我将变量赋值给name "product script。">
后,我使用一些技术拆分并提取价格和产品名称。
但我想用另一种方式从json内联脚本中提取数据。
我的代码:
def function_glomark_name(url_glomark):
global product_name_glomark
req2 = requests.get(url_glomark)
product_request(req2)
head_part = soup.find('head')
scripts = head_part.find_all('script')
product_script = scripts[6]
#Remove tags
pd_list = product_script.contents
for item in pd_list:
product_des = item
# make Dictionary
product_glomark= json.loads(product_des)
#Assign product_name_glomark
product_name_glomark = (product_glomark['name'])
print(product_name_glomark)
return product_name_glomark
glomark_coconut = 'https://glomark.lk/coconut/p/11624'
#after call function
function_glomark_name (glomark_coconut)
function_lauli_name (lauli_coconut)
输出:椰子
要解析特定<script>
的内容,您可以使用以下示例:
import json
import requests
from bs4 import BeautifulSoup
url = "https://glomark.lk/coconut/p/11624"
soup = BeautifulSoup(requests.get(url).content, "html.parser")
s = soup.select_one('script[type="application/ld+json"]')
data = json.loads(s.text)
for key, value in data.items():
print(f"{key=} {value=}")
print("-" * 80)
print(f'Name is {data["name"]}')
打印:
key='@context' value='https://schema.org'
key='@type' value='Product'
key='productID' value='11624'
key='name' value='Coconut'
key='description' value='Coconut'
key='url' value='/coconut/p/11624'
key='image' value='https://objectstorage.ap-mumbai-1.oraclecloud.com/n/softlogicbicloud/b/cdn/o/products/310310--01--1555692325.jpeg'
key='brand' value='GLOMARK'
key='offers' value=[{'@type': 'Offer', 'price': '92', 'priceCurrency': 'LKR', 'itemCondition': 'https://schema.org/NewCondition', 'availability': 'https://schema.org/InStock'}]
--------------------------------------------------------------------------------
Name is Coconut