Как анализировать электронные письма в формате HTMLCSS

Разбираемся в CSS
Ответить
Anonymous
 Как анализировать электронные письма в формате HTML

Сообщение Anonymous »

У меня возникли проблемы с анализом полученного мной электронного письма в формате HTML. Я хотел бы извлечь название продукта, цену и URL-адрес изображения продукта из HTML-кода электронных писем.Мне нужно получить селекторы css/html, а затем добавить их в следующую функцию:

Код: Выделить всё

def parse_email_content(html_content, order_date=None):
soup = BeautifulSoup(html_content, 'html.parser')

company_name = extract_company_name(soup)
product_info = extract_product_info(soup)
order_number = extract_order_number(soup)

return {
'company_name': company_name,
'products': product_info,
'order_number': order_number,
'order_date': order_date
}

def extract_company_name(soup):
selectors = [
'h1.shop-name__text',
'h1.x_shop-name__text',
'h1.company-name',
'td.x_logo img'  # Amazon logo
# New selector for a different email format
]
for selector in selectors:
company_name_tag = soup.select_one(selector)
if company_name_tag:
return company_name_tag.get_text(strip=True)

return "Unknown Company"

def extract_order_number(soup):
order_number_selectors = [
'h2:contains("Order:") + a', # Amazon order number
'a.x_inline-block', # Amazon order number
]
for selector in order_number_selectors:
order_number_tag = soup.select_one(selector)
if order_number_tag:
return order_number_tag.get_text(strip=True)

return "Unknown Order Number"

def extract_product_info(soup):
product_info = []
product_selectors = [
('.order-list__item', '.order-list__item-title', '.order-list__item-price', 'img'),
('.x_order-list__item', '.x_order-list__item-title', '.x_order-list__item-price', 'img'),
('.product-item', '.product-name', '.product-price', 'img'),
('table#x_itemDetails tr', 'td.x_name ul li a', 'td.x_price strong', 'td.x_photo img'),  # Amazon Details
('a[title]', 'a img[alt]', 'span.x_rio_15_grey', 'img')
# New selectors for a different email format
]
for item_selector, name_selector, price_selector, image_selector in product_selectors:
for item in soup.select(item_selector):
product_name = item.select_one(name_selector).get_text(strip=True) if item.select_one(name_selector) else "Unknown Product"
product_price = item.select_one(price_selector).get_text(strip=True) if item.select_one(price_selector) else "Unknown Price"
product_image = item.select_one(image_selector)['src'] if item.select_one(image_selector) else "No Image"
product_image = modify_image_url(product_image)
product_info.append({
'product_name': product_name,
'product_price': product_price,
'product_image': product_image,
})
if product_info:
break  # Stop if products were found with current selectors

return product_info
Целью этого является возможность отслеживать покупки продуктов.
Вот пример фрагмента HTML того, что я хочу проанализировать:
р>

Код: Выделить всё







[url=https://www.amazon.co.uk/gp/r.html?C=139N1T2SKF371&K=24P3B4B2QNYP8&M=urn:rtn:msg:2024022217045437e2313c7ab74cb7b1d7a35834e0p0eu&R=1TDDA7WUV1JHP&T=C&U=https%3A%2F%2Fwww.amazon.co.uk%2Fdp%2FB09FY1WF94%2Fref%3Dpe_27063361_485629781_TE_item_image&H=ONMQCUPSXYOXDUDCAEVGGCNOET8A&ref_=pe_27063361_485629781_TE_item_image]
[img]https://m.media-amazon.com/images/I/21JZPXNafXL._SY115_SX115_.jpg[/img]
[/url]




[url=https://www.amazon.co.uk/gp/r.html?C=139N1T2SKF371&K=24P3B4B2QNYP8&M=urn:rtn:msg:2024022217045437e2313c7ab74cb7b1d7a35834e0p0eu&R=3M0V3VL8DIFEU&T=C&U=https%3A%2F%2Fwww.amazon.co.uk%2Fdp%2FB09FY1WF94%2Fref%3Dpe_27063361_485629781_TE_item&H=2HWV0AI5SGMYLFCHRG7RMGRUR8KA&ref_=pe_27063361_485629781_TE_item]Hawksbill
Paper 160GSM Multi-Purpose... [/url]

Sold
by: Amazon EU S.a.r.L. 

Qty:
1 

£4.11



Где Hawksbill Paper 160G... — название продукта, Изображение — изображение, а £4,11 — цена. .
Обратите внимание, что это часть более крупного HTML-кода, который представляет собой все электронное письмо:

Код: Выделить всё



 P {margin-top:0;margin-bottom:0;} 




From:[/b] Amazon.co.uk <auto-confirm@amazon.co.uk>[b]
Sent:[/b] Thursday, February 22, 2024 9:04 AM[b]
To:[/b] willmyles@icloud.com <willmyles@icloud.com>[b]
Subject:[/b] Your Amazon.co.uk order of "Chiltern Arts 8 Tubes of..." and 2 more item(s)
 






""" More Code """

Я пробовал включать такие селекторы, как «a[title]», «a img[alt]», «span.x_rio_15_grey», «img», но он захватывает только URL-адрес изображения и все такое. остальная информация остается незаполненной. Любые рекомендации будут оценены.

Подробнее здесь: https://stackoverflow.com/questions/785 ... tml-emails
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «CSS»