python-2.7 - BeautifulSoup 无法获取内部标签
问题描述
我目前正在尝试在下面的代码中使用 bs4 从 lazada.sg 刮取产品数据。
from bs4 import BeautifulSoup
import requests
url = "https://www.lazada.sg/shop-mobiles/"
page = requests.get(url)
content = page.text #read html
soup = BeautifulSoup(content, 'html.parser')
products = soup.find_all("div", {"class" : "c16H9d"}) #find div tags containing product details
with open("test.txt", 'w') as f:
f.write(str(products))
然而输出test.txt
只是[]
. 我发现上面的类在<div id="root">
,我提取并得到了这个结果。
我将如何访问“内部 div 标签”? 这是页面源代码的片段。
解决方案
数据是从脚本标签动态加载的。您可以正则表达式并使用 json 库来查看。您大概需要为 2.7 调整打印线
import requests, re, json, pprint
r = requests.get('https://www.lazada.sg/shop-mobiles/')
p = re.compile(r'window.pageData=(.*)<')
data = json.loads(p.findall(r.text)[0])
for item in data['mods']['listItems']:
pprint.pprint(item)
break # delete me later
推荐阅读
- c++ - SDL 渲染黑屏 C++
- swiftui - 出现键盘时,带有部分 Texteditor 的 SwiftUI 表单向上移动
- .net-core - 在 .net 核心应用程序中同时使用 SQS 消息
- spring-boot - 基于 SSL 的 RestTemplate
- assembly - mov dword ptr [eax], 5 和 mov dword [eax], 5 有什么区别?
- c# - 具有 Graph API 分页调用的持久函数?
- python - 如何从输入框中获取自定义输入以形成特定的超链接?
- python - 我正在尝试使用 Django_tables2 将应用程序部署到 Heroku 并收到“ImportError: cannot import name 'FieldDoesNotExist'”
- python - 在 Python 中将人类可读时间转换为纪元时间戳
- ruby-on-rails - 未知验证器:Ruby on Rails 上的“InValidator”