Парсинг изображений или title с помощью bs4
есть сайт в котором цены в HTML указываются как img файлы
<img src="https://winauto.ua/index.php?dispatch=products.show_price&pr=YmI0Y2JiYzMxNmE1NzE5NjExN2JlZGM4YzNmYzUzYTcToyOntpOjA7ZDo2NjAzO2k6MTthOjI6e2k6MDtzOjEwOiJkaXNjb3VudGVkIjtpOjE7czo1OiJwcmljZSI7fX0%3D" alt="6670 грн." title="Цена: 6670 грн.">
и в нем есть alt и title, где находятся нужные мне данные. Как можно было бы вывести эти данные? Через item.find не работает, вытягивает только None, пробовал через item.get, не вышло.
<span class="ty-price" id="line_discounted_price_99870">
<bdi><img src="https://winauto.ua/index.php?dispatch=products.show_price&pr=YmI0Y2JiYzMxNmE1NzE5NjExN2JlZGM4YzNmYzUzYTcToyOntpOjA7ZDo2NjAzO2k6MTthOjI6e2k6MDtzOjEwOiJkaXNjb3VudGVkIjtpOjE7czo1OiJwcmljZSI7fX0%3D" alt="6670 грн." title="Цена: 6670 грн."></bdi>
</span>
Вот фрагмент кода, нужно цену запихнуть в product_price
def collect_data(pages_count):
with open(f"parcerWinAuto_{cur_date}.csv", "w") as file:
writer = csv.writer(file)
writer.writerow(
(
"Артикул",
"Ссылка",
"Цена"
)
)
data = []
cur_date = datetime.now().strftime("%d_%m_%Y")
for page in range (1, pages_count):
with open (f'data/page_{page}.html') as file: src = file.read()
soup = BeautifulSoup(src,'lxml')
items_card = soup.find_all('div', class_='ut2-gl__body')
for item in items_card:
product_article = item.find('div',class_='ut2-gl__name').text.strip()
el = soup.select('span')
product_price=el.get('title')
product_url = item.get('a',"href")
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Шаги:
- Использовал
request.Session, это на случай, если запросов будет много и они будут последовательные (например, перебор страниц), это позволит сохранить куки - Использовал парсер из коробки
html.parser - Для поиска использовал css-селекторы
import requests
from bs4 import BeautifulSoup
session = requests.Session()
session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0'
url = 'https://winauto.ua/index.php?match=all&subcats=y&pcode_from_q=y&pshort=y&pfull=y&pname=y&pkeywords=y&search_performed=y&q=gazer&dispatch=products.search&items_per_page=128&search_id=37901&page=1'
rs = session.get(url)
root = BeautifulSoup(rs.content, 'html.parser')
for product in root.select('#products_search_pagination_contents .ut2-gl__body'):
title = product.select_one('.product-title').get_text(strip=True)
price = product.select_one('.ty-price-update img[title]')
if not price:
print(f'[#] Не удалось найти цену для {title!r}!')
continue
print(title, price['title'], sep=" | ")
Результат:
Видеорегистратор Gazer F155 c GPS, Wi-Fi, LTE с охранным режимом | Цена: 5999 грн.
Видеорегистратор Gazer F750w | Цена: 9999 грн.
Блок для подключения к CAN-шине Gazer MA011 для Volkswagen, Skoda, Seat | Цена: 970 грн.
Блок для подключения к CAN-шине Gazer MA025 для Hyundai | Цена: 1628 грн.
Кабель питания Gazer MA120 для Hyundai | Цена: 304 грн.
Штатное зеркало Gazer MUW7000 с видеорегистратором, Wi-Fi, автозатемнением, заменяемое | Цена: 8999 грн.
Штатное зеркало Gazer MM507 для BMW, Citroen, Ford, Peugeot, Volvo, заменяемое | Цена: 2230 грн.
Штатное зеркало Gazer MM504 для Hyundai, Kia, заменяемое | Цена: 2230 грн.
...
Штатная магнитола Gazer CM6007-QV для Kia Mohave (QV) 2007-2012 | Цена: 8487 грн.
Штатная магнитола Gazer CM6008-V40 для Toyota Camry (V40) 2007-2011 | Цена: 21990 грн.
Штатная магнитола Gazer CM6006-SC11 для Nissan Tiida(SC11), Qashqai, X-Trail, Patrol 2004-2010 | Цена: 15992 грн.
Штатная магнитола Gazer CM5008-XW50 для Toyota Prius (XW50) 2014-2017 | Цена: 7109 грн.
Штатная магнитола Gazer CM6509-QL для Kia Sportage (QL) 2015-2017 | Цена: 21990 грн.