【问题标题】:Get the image url inside Javascript with Python and BeautifulSoup使用 Python 和 BeautifulSoup 在 Javascript 中获取图像 url
【发布时间】:2021-12-16 06:00:17
【问题描述】:

我正在尝试使用 Python 和 BeautifulSoup 从下面的页面获取产品图片。图像在 javascript 中。我正在使用 lxml。我创建了一个简化版本的代码,只关注图像。

我要的图片地址是https://lapa.co.za/pub/media/catalog/product/cache/image/700x700/e9c3970ab036de70892d86c6d221abfe/l/e/learn_to_read_l3_b05_tippie_fish_cover.jpg

import json
from bs4 import BeautifulSoup
import requests

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)
soup = BeautifulSoup(r.content, 'lxml')

title = soup.find('h1', class_='page-title').text.strip()
images = soup.find('div', class_='product-img-column')

# html_data = requests.get(testlink).text
# data = json.loads(re.search(r'window.INITIAL_REDUX_STATE=(\{.*?\});', html_data))

print(images)

【问题讨论】:

  • 你不能,你需要一些东西来呈现 javascript 的外观到 webdrivers,我通常选择 selenium

标签: python web-scraping beautifulsoup lxml screen-scraping


【解决方案1】:

json 在<script> 标签中。只需要把它拉出来。

import json
from bs4 import BeautifulSoup
import requests
import re

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)
soup = BeautifulSoup(r.content, 'lxml')

title = soup.find('h1', class_='page-title').text.strip()
images = soup.find('div', class_='product-img-column')

script = images.find('script', {'type':'text/x-magento-init'})

jsonStr = re.search(r'<script type=\"text/x-magento-init\">(.*)</script>', str(script), re.IGNORECASE | re.DOTALL).group(1)
data = json.loads(jsonStr)

image_data = data['[data-gallery-role=gallery-placeholder]']['mage/gallery/gallery']['data'][0]
image_url = image_data['full']

# OR 
#image_url = image_data['img']

print(image_url)

输出:

print(image_url)
https://lapa.co.za/pub/media/catalog/product/cache/image/e9c3970ab036de70892d86c6d221abfe/9/7/9780799377347_1.jpg

【讨论】:

  • 这是完美的,谢谢。还有一件事,如何只获得图像名称,作为完整的网址?
  • 这会产生图像名称:image_name = (basename(image_url)) 但是我如何获得扩展名呢?
  • 什么意思?
  • 我希望能够将 Finename.jpg 拆分为“文件名”和“.jpg”我用这个来管理:image_name, image_extension = os.path.splitext(image_url)
  • 你可能想要这个:image_name, image_extension = image_url.split('/')[-1].split('.') 会给你['9780799377347_1', 'jpg'] 而不是https:// 和完整的域
猜你喜欢
  • 2019-10-25
  • 2017-09-17
  • 2021-01-26
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
相关资源
最近更新 更多