首页 > 解决方案 > 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 标签”? 是页面源代码的片段。

标签: python-2.7web-scrapingbeautifulsoup

解决方案


数据是从脚本标签动态加载的。您可以正则表达式并使用 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

推荐阅读