python - Beautiful Soup 在现有元素上返回 None
问题描述
我试图刮掉产品的价格。这是我的代码:
from bs4 import BeautifulSoup as soup
import requests
page_url = "https://www.falabella.com/falabella-cl/product/5311682/Smartphone-iPhone-7-PLUS-32GB/5311682/"
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
}
uClient = requests.get(page_url, headers=headers)
print(uClient)
page_soup = soup(uClient.content, "html.parser") #requests
test = page_soup.find("p", {"class":"fb-price"})
print(test)
但我得到以下响应而不是期望的价格
<Response [200]>
None
我已经使用 Chrome 开发者工具检查了该元素是否存在。网址:https ://www.falabella.com/falabella-cl/product/5311682/Smartphone-iPhone-7-PLUS-32GB/5311682/
解决方案
如果你去network tab
你会得到以下链接,它以 json 格式检索数据。你可以在没有 Selenium 和 Beautifulsoup 的情况下做到这一点
Url="https://www.falabella.com/rest/model/falabella/rest/browse/BrowseActor/fetch-item-details?{%22products%22:[{%22productId%22:%225311634%22}, {%22productId%22:%225311597%22},{%22productId%22:%225311505%22},{%22productId%22:%226009874%22},{%22productId%22:%225311494%22},{% 22productId%22:%225311510%22},{%22productId%22:%226009845%22},{%22productId%22:%226009871%22},{%22productId%22:%226009868%22},{%22productId% 22:%226009774%22},{%22productId%22:%226782957%22},{%22productId%22:%226009783%22},{%22productId%22:%226782958%22},{%22productId%22: %228107608%22},{%22productId%22:%228107640%22},{%22productId%22:%226009875%22},{%22productId%22:%226782967%22},{%22productId%22:%226782922 %22}]}"
试试下面的代码。
import requests
page_url = "https://www.falabella.com/rest/model/falabella/rest/browse/BrowseActor/fetch-item-details?{%22products%22:[{%22productId%22:%225311634%22},{%22productId%22:%225311597%22},{%22productId%22:%225311505%22},{%22productId%22:%226009874%22},{%22productId%22:%225311494%22},{%22productId%22:%225311510%22},{%22productId%22:%226009845%22},{%22productId%22:%226009871%22},{%22productId%22:%226009868%22},{%22productId%22:%226009774%22},{%22productId%22:%226782957%22},{%22productId%22:%226009783%22},{%22productId%22:%226782958%22},{%22productId%22:%228107608%22},{%22productId%22:%228107640%22},{%22productId%22:%226009875%22},{%22productId%22:%226782967%22},{%22productId%22:%226782922%22}]}"
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
}
response=requests.get(page_url, headers=headers)
res=response.json()
for item in res['products'][0]['product']['prices']:
print(item['symbol'] + item['originalPrice'])
输出:
$ 379.990
$ 569.990
获取产品名称:
print(res['products'][0]['product']['displayName'])
输出:
Smartphone iPhone 7 PLUS 32GB
如果您只寻找value $ 379.990
打印此
print(res['products'][0]['product']['prices'][0]['symbol'] +res['products'][0]['product']['prices'][0]['originalPrice'] )
推荐阅读
- java - 无法解析方法(
) - apache-spark - Pyspark - 通过用户定义的聚合函数和旋转创建数据框
- unit-testing - 无法读取未定义的属性“getters” - 带有笑话的 VueJS 单元测试
- c - -flto 使用 gcc 5.1.0 标记段错误
- python-3.x - 无法将 py2neo v3 与 neo4j 3.4.1 连接
- c# - C# 授予对文件夹的临时读/写访问权限
- javascript - React Redux,将存储连接到 1000 个微型组件
- r - 如何将数据帧的内容写回范围?
- sql - 在Sql中将水平表转换为垂直表
- angular - 使用 iis 的 Visual Studio 中的 npm 脚本“启动”错误