Информация о продукте загружается через Ajax с другого URL-адреса.
Этот скрипт загружает все технические параметры по имени / URL-адресу продукта:
import re
import requests
import pandas as pd
from bs4 import BeautifulSoup
url = 'https://www.respshop.com/cpap-masks/nasal/'
product_info_url = 'https://www.respshop.com/product_info.php'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0'}
soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')
all_data = []
for item in soup.select('td.name a'):
s = BeautifulSoup(requests.get(item['href'], headers=headers).content, 'html.parser')
sku = s.select_one('[itemprop="mpn"]').text
print(item.text, sku)
products_id = re.search(r'p-(\d+)\.html', item['href'])[1]
s = BeautifulSoup(requests.post(product_info_url, data={'products_id': products_id, 'tab': 3}, headers=headers).content, 'html.parser')
row = {'Name': item.text, 'SKU': sku, 'URL': item['href']}
for k, v in zip(s.select('#cont_3 td.main:nth-child(1)'),
s.select('#cont_3 td.main:nth-child(2)')):
row[k.get_text(strip=True)] = v.get_text(strip=True)
all_data.append(row)
df = pd.DataFrame(all_data)
df.to_csv('data.csv')
Печать:
ComfortGel Blue Nasal CPAP Mask - Philips Respironics 1070038, 1070037, 1070039, 1070040, 1070050, 1070051, 1070052, 1070049
Wisp Nasal Mask - Philips Respironics 1094051, 1094050, 1109298
Dreamwear Nasal Mask - Philips Respironics 1116700, 1116680, 1116681, 1116682, 1116683, 1116685, 1116686, 1116687, 1116688, 1116690, 1116691, 1116692, 1116693
Airfit N20 Nasal CPAP Mask by ResMed w/ 5 Free Cushions 63536, 63538, 63539
Airfit N30i - ResMed Nasal Mask 63800, 63801
New Respironics DreamWear Nasal Mask With Headgear Arm FitPack 1142376
ResMed AirFit N30 CPAP Nasal Cradle Mask 64222, 64223, 64224
...etc.
Создает data.csv
(снимок экрана из LibreOffice):
введите описание изображения здесь