【问题标题】:How to scrape the data of nutrition facts for products from walmart.com?如何从 walmart.com 抓取产品的营养成分数据?
【发布时间】:2018-07-15 02:16:04
【问题描述】:

我已经用 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)

【问题讨论】:

  • 你试过soup.findAll()
  • 是的,我做到了。谢谢!
  • 发布你的一些代码会很好,这样我们就可以看到哪里出了问题
  • 我上传了一些我测试过的代码。非常感谢您提前提供的帮助!
  • 我没有时间看你的代码,但你可以看看this和这个tutorial

标签: python beautifulsoup urllib


【解决方案1】:

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

您可以使用 selenium 之类的东西进行调查,以通过浏览器获取最终的 HTML,并使用 BeautifulSoup 进行解析。或者,最快的方法是查看你想要的信息是否已经隐藏在你所拥有的某个地方。在这种情况下,您可以在返回的 <script> 部分之一中找到它作为 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'])

这将为您提供data,其中包含一个非常深的 JSON 结构,其中包含您可能需要的所有信息。我建议打印data 以查看您可用的所有信息。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多