Python 如何从沃尔玛网站获取产品的营养数据?

Python 如何从沃尔玛网站获取产品的营养数据?,python,beautifulsoup,urllib,Python,Beautifulsoup,Urllib,我用Beautifulsoup试过urllib。通过使用soup.select和相关标记,我总是得到一个空结果。 我是Python新手。非常感谢您事先的帮助 所附代码仅供参考 import urllib.request, urllib.parse, urllib.error from bs4 import BeautifulSoup import pandas as pd url="https://www.walmart.com/ip/Twin-Pack-Kellogg-s-Frosted-Mi

我用Beautifulsoup试过urllib。通过使用soup.select和相关标记,我总是得到一个空结果。 我是Python新手。非常感谢您事先的帮助

所附代码仅供参考

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import pandas as pd
url="https://www.walmart.com/ip/Twin-Pack-Kellogg-s-Frosted-Mini-Wheats-Breakfast-Cereal-48-Oz/940504168"
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, "html.parser")
name_box = soup.select('div.nutrition-facts-all-facts-servingSize.div.span')
print(name_box)

您选择了一个相当笨拙的页面来开始使用web抓取,因为您试图获取的页面有很多javascript呈现。因此,您不能简单地将信息传递给BeautfulSoup并获得所需的信息。i、 你得到的HTML将不同于你在浏览器中查看源代码时看到的HTML

您可以研究使用selenium之类的工具通过浏览器获得最终HTML,并使用BeautifulSoup解析。或者,最快的方法是查看您想要的信息是否已经隐藏在您所拥有的信息中。在本例中,您可以在返回的一个部分中找到它作为JSON

可以使用以下代码提取JSON:

import urllib.request
from bs4 import BeautifulSoup
import json
import re

url = "https://www.walmart.com/ip/Twin-Pack-Kellogg-s-Frosted-Mini-Wheats-Breakfast-Cereal-48-Oz/940504168"
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html, "html.parser")

for script in soup.find_all('script'):
    if '_setReduxState' in script.text:
        re_json = re.search('__WML_REDUX_INITIAL_STATE__ = ({.*\});}', script.text)
        data = json.loads(re_json.group(1))
        product_id = data['product']['midasContext']['productId']
        print(data['product']['idmlMap'][product_id]['modules']['NutritionFacts'])
这将为您提供包含非常深的JSON结构的数据,其中包含您可能需要的所有信息。我建议打印数据以查看所有可用信息

例如,数据['product']['idmlMap'][product_id]['modules']['NutritionFacts']为您提供所有营养信息,但您可能需要更具体一点才能获得所需的确切信息


此结构中的某些元素包含页面上使用的HTML,因此您可能需要进一步解析其中的一些元素以提取所需的位。

您是否尝试过soup.findallys,我尝试过。谢谢发布一些代码会很好,这样我们就可以看到哪里出了问题。我上传了一些我测试过的代码。非常感谢您事先的帮助!我没有时间检查你的代码,但是你可以看看这个