如何使用Python和BeautifulSoup提取网页JavaScript内的图片URL
解决方法
目标图片URL未写入静态HTML DOM节点,而是存储在页面内嵌JavaScript的window.INITIAL_REDUX_STATE全局变量中,因此用BeautifulSoup解析普通DOM节点无法获取,你注释的代码思路是可行的,补全缺失的步骤即可实现需求。
调整步骤
- 导入正则模块
re,用于匹配JS代码中的JSON片段 - 给正则匹配添加
re.DOTALL修饰符,确保可以匹配带换行的JSON内容 - 解析JSON结构,提取商品图片字段
完整可运行代码
import json import re import requests from bs4 import BeautifulSoup headers = { 'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148' } testlink = 'https://lapa.co.za/kinder-en-tienerboeke/leer-my-lees-vlak-1-grootboek-9-tippie-en-die-vis' r = requests.get(testlink, headers=headers) # 匹配JS中的JSON数据块 match = re.search(r'window.INITIAL_REDUX_STATE=(\{.*?\});', r.text, re.DOTALL) if match: json_str = match.group(1) data = json.loads(json_str) # 提取商品图片列表 product_images = data['product']['product']['images'] # 筛选700x700规格的目标图片 target_img_url = None for img in product_images: if '700x700' in img['url']: target_img_url = img['url'] break print(target_img_url)
运行说明
执行代码后会输出你需要的700x700规格的目标商品图片URL,若需要其他尺寸的图片,直接遍历product_images列表获取对应url属性即可。
内容的提问来源于stack exchange,提问作者Schalk Joubert
相关产品推荐
相关产品推荐

