【发布时间】:2020-06-14 05:14:23
【问题描述】:
背景
我正在尝试抓取这个page。基本上得到每个产品的名称,它的价格和形象。我期待在汤中看到包含该产品的 div,但我没有。所以我所做的是我在我的 chrome 浏览器中打开了 url,并在我的网络选项卡中执行检查元素后,我发现它正在进行的 GET 调用直接到这个page 以获取所有与产品相关的信息。如果您打开该 url,您将基本上看到一个 JSON 对象,并且其中有 html 字符串,其中包含产品和价格的 div。我的问题是我将如何解析这个?
尝试的解决方案
我认为一种明显的方法是将汤转换为 JSON,因此为了做到这一点,汤需要是一个字符串,而这正是我所做的。现在的问题是我的json_data 变量基本上有一个字符串。所以当我尝试做这样的事情json_data['Results'] 它给了我和错误说我只能传递整数。我不确定如何进一步进行。
如果我做错了什么,我希望得到建议和任何指示。
以下是我的代码
from bs4 import BeautifulSoup
from random_user_agent.user_agent import UserAgent
from random_user_agent.params import SoftwareName, OperatingSystem
import requests
import json
import sys
sys.stdout = open('output.html', 'wt')
page_to_scrape = 'https://shop.guess.com/en/catalog/browse/men/tanks-t-shirts/view-all/?filter=true&page=1'
software_names = [SoftwareName.CHROME.value]
operating_systems = [OperatingSystem.WINDOWS.value, OperatingSystem.LINUX.value]
user_agent_rotator = UserAgent(software_names=software_names, operating_systems=operating_systems, limit=100)
page = requests.get(page_to_scrape, headers={'User-Agent': user_agent_rotator.get_random_user_agent()})
soup = BeautifulSoup(page.content, "html.parser")
json_data = json.dumps(str(soup))
print(json_data)
【问题讨论】:
-
您在代码中抓取的 URL 会生成一个常规产品页面,而不是我的 JSON。您确定您的考试正确反映在您的问题和代码中吗?
-
如果我运行您的代码,
json_data会打印出空白。而soup是一个普通的网页。 -
你安装了bs4吗? @petezurich 你还能看到汤里的任何产品 div 吗??
-
是的,我已经安装了 bs4。您的代码运行良好。我只是得到一个空的
json_data。而soup是常规页面,但不是 JSON。
标签: python json beautifulsoup