Найти - Пользователи
Полная версия: Нужно спарсить названия всех товаров с сайта
Начало » Python для новичков » Нужно спарсить названия всех товаров с сайта
1
pisarev70
Помогите пожалуйста спарсить все названия товаров с сайта. Сайт не большой всего 4 стр.
Дан сайт
НУЖНО:
Извлечь названия товара с каждой страницы (всего 4х страниц)
Данные с каждой страницы должны хранится в списке.
По итогу работы должны получится 4 списка которые хранятся в списке(список списков)
Пример ожидаемого списка
[, , , ]
Я смог написать только половину када, дальше не знаю как.

 from bs4 import BeautifulSoup
import requests
url = 'https://parsinger.ru/html/index3_page_1.html'
response = requests.get(url=url)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'lxml')
pagen = [item['href'] for item in soup.find('div', class_='pagen').find_all('a')]
item = []
for i in range(4):
    item.append(f'https://parsinger.ru/html/index3_page_1.html={i}')
print(item)
robisho
pisarev70
Помогите пожалуйста спарсить все названия товаров с сайта. Сайт не большой всего 4 стр. Дан сайт НУЖНО:Извлечь названия товара с каждой страницы (всего 4х страниц)Данные с каждой страницы должны хранится в списке.По итогу работы должны получится 4 списка которые хранятся в списке(список списков)Пример ожидаемого спискаЯ смог написать только половину када, дальше не знаю как.

список названий предметов со страницы
 import lxml.html as html
html_body = html.fromstring(response)
elements = html_body.xpath("//div[@class='item_card']//a[@class='name_item']/text()")

в цикле нужно перебрать ссылки, подставляя цифры от 1 до 4 вместо index
 f'https://parsinger.ru/html/index3_page_{index}.html'
xam1816
  
from bs4 import BeautifulSoup
import requests
url = 'https://parsinger.ru/html/index3_page_1.html'
 
def get_html(url):
    resp = requests.get(url)
    if resp.status_code == 200:
        return resp.content.decode('utf-8')
 
def get_product_info(block):
    out = dict.fromkeys(['img', 'name', 'description', 'price'])
    img_box = block.find(class_='img_box')
    if img_box:
        img = img_box.find('img')
        if img:
            out['img'] = img['src']
        name_item = img_box.find(class_='name_item')
        if name_item:
            out['name'] = name_item.text.strip()
    description = block.find(class_='description')
    if description:
        data = (i.split(':', 1) for i in description.text.strip().splitlines())
        out['description'] = {k.lower().strip(): v.lower().strip() for k, v in data}
    price = block.find(class_='price')
    if price:
        v, n = price.text.split()
        out['price'] = int(v), n
    return out
 
def get_data_from_html(html):
    soup = BeautifulSoup(html, 'lxml')
    out = []
    items = (i for i in soup.find_all('div', class_='item'))
    for i in items:
        out.append(get_product_info(i))
    return out
 
html = get_html(url)
result = get_data_from_html(html)
 
print(result[0])
print("============")
print([i['name'] for i in result if i['description']['тип'] == 'мышь проводная'])
print("============")
print([i['name'] for i in result if i['description']['тип'] == 'мышь беспроводная'])
print("============")
print([i['name'] for i in result if i['price'][0] < 600])

 
{'img': 'https://parsinger.ru/img/3/1.jpg', 'name': 'Vampire RGB,9 кнопок', 'description': {'бренд': 'defender', 'тип': 'мышь проводная', 'подключение к компьютеру': 'usb', 'игровая': 'да'}, 'price': (1610, 'руб')}
============
['Vampire RGB,9 кнопок', 'Defender Halo Z GM-430L', 'Defender sTarx GM-390L', 'Defender Skull GM-180L', 'Defender Killer GM-170L', 'Defender Ghost GM-190L', 'Defender Witcher GM-990']
============
['Defender Shark 2']
============
['Defender Halo Z GM-430L', 'Defender Skull GM-180L', 'Defender Killer GM-170L']

Process finished with exit code 0
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB