如何使用Python提取动态HTML页面中的全部目标数据
Python提取HTML数据不全的解决方案
问题根因
- 目标站点商品列表采用懒加载机制,初始页面请求仅返回第一屏约20条商品,剩余商品需要下滑页面触发接口请求才会加载,
requests库只能获取初始静态页面内容,因此只能拿到部分数据 - 现有代码存在语法错误,
select_one方法传入参数不符合规范,会导致价格字段提取异常
修复方案
这里推荐直接抓后端商品接口获取全量数据,比模拟浏览器效率更高,完整代码如下:
import requests import pandas as pd headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36', 'Referer': 'https://m.pcone.com.tw/store/0670386?ref=d_item_store' } output = [] page = 1 # 循环翻页直到无商品返回 while True: # 店铺商品接口,替换page参数翻页 api_url = f"https://m.pcone.com.tw/store/api/v1/store/getStoreProducts?storeId=0670386&page={page}&sort=default" resp = requests.get(api_url, headers=headers).json() product_list = resp['data']['products'] if not product_list: break for product in product_list: productname = product['name'] productprice = product['price'] ordercount = product.get('order_count_format', '').replace('已售出', '') if product.get('order_count_format') else None output.append([productname, productprice, ordercount]) page +=1 df = pd.DataFrame(output, columns=['商品名稱', '價格', '購買人數']) df.to_excel('松果-瑞昌.xlsx', index=False)
如果你一定要用HTML解析的方案,需要用selenium库模拟浏览器滚动加载全量内容后再用BeautifulSoup解析,修改要点如下:
- 安装selenium和对应浏览器驱动
- 启动浏览器后打开目标页面,循环执行下滑JS代码,等待页面加载完成,直到没有新的商品加载后再获取页面源码解析
原有代码错误修复
如果你只需要修复现有代码的提取错误,把价格提取的代码改成以下任意一种即可:
# 方案1:用find方法 productprice= product.find("span",class_='symbol-price').string # 方案2:正确使用select_one productprice= product.select_one("span.symbol-price").string
内容的提问来源于stack exchange,提问作者鄭鼎彥
相关产品推荐
相关产品推荐

