Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 7

WEB-Scraping Интернет-магазина

11.06.2022, 12:06. Показов 987. Ответов 8

Студворк — интернет-сервис помощи студентам
Добрый день, дорогие форумчане! Начинаю изучать Python, поэтому буду благодарен вам за любую помощь. Пытаюсь спарсить ряд параметров с интернет магазина "Citilink" (раздел мобильные телефоны), но никак не могу сделать цикл прохода по всем страницам в рамках раздела. Мой код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import requests
from bs4 import BeautifulSoup
 
url = 'https://www.citilink.ru/catalog/smartfony/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')
items = soup.find_all('div', class_='product_data__gtm-js product_data__pageevents-js ProductCardHorizontal js--ProductCardInListing js--ProductCardInWishlist')
for n, i in enumerate(items, start=1):
    itemName = i.find('div', class_='ProductCardHorizontal__header-block').find('a', class_='ProductCardHorizontal__title Link js--Link Link_type_default').get('title')
    itemName1 = i.find('span', class_='ProductCardHorizontal__properties_value').text.strip()
    itemPrice = i.find('span', class_='ProductCardHorizontal__price_current-price js--ProductCardHorizontal__price_current-price').text.strip()
    print(f'{n}:{itemName1} {itemName} на базе {itemName1} за {itemPrice} ')
 
pages = soup.find('div', class_='PaginationWidget__wrapper-pagination')
urls = []
links = pages.find_all('a', class_='PaginationWidget__page js--PaginationWidget__page PaginationWidget__page_next PaginationWidget__page-link PaginationWidget__page_desktop')
for link in links:
    pageNum = int(link.text) if link.text.isdigit() else None
    if pageNum != None:
        hrefval = link.get('href')
        urls.append(hrefval)
 
for slug in urls:
    newUrl = url.replace('?=2', slug)
    response = requests.get(newUrl)
    soup = BeautifulSoup(response.text, 'lxml')
    items = soup.find_all('div', class_='product_data__gtm-js product_data__pageevents-js ProductCardHorizontal js--ProductCardInListing js--ProductCardInWishlist')
    for n, i in enumerate(items, start=n):
        itemName = i.find('div', class_='ProductCardHorizontal__header-block').find('a',
                                                                                    class_='ProductCardHorizontal__title Link js--Link Link_type_default').get(
            'title')
        itemName1 = i.find('span', class_='ProductCardHorizontal__properties_value').text.strip()
        itemPrice = i.find('span',
                           class_='ProductCardHorizontal__price_current-price js--ProductCardHorizontal__price_current-price').text.strip()
        print(f'{n}:{itemName1} {itemName} на базе {itemName1} за {itemPrice} ')
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2022, 12:06
Ответы с готовыми решениями:

Scraping
Подскажите пожалуйста как вытащить информацию с data-phone-number <span title="Перевірений телефон" class="phone...

Xpath and Scraping
Вот страница http://econpy.pythonanywhere.com/ex/001.html хочу получить два списка,закупщик и цена, есть несколько вопросов, как...

Web-Scraping Python
https://sbis.ru/contragents?p=contragents Есть сайт компаний, не могу понять как получить ссылку на компанию, нахожу div'ы ячейки, но там...

8
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
11.06.2022, 19:37
после
Python
1
response = requests.get(url)
выведите
Python
1
print(response.text)
1
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 7
12.06.2022, 00:04  [ТС]
Насколько я понимаю это позволяет посмотреть структуру страницы
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
12.06.2022, 00:05
Все верно. Что там?
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 7
12.06.2022, 01:42  [ТС]
Там солидное полотно, за межстраничные переходы, насколько я понимаю отвечает вот эта часть
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class=" PaginationWidget js--PaginationWidget"
            data-current-page-number="1"
        ><div class="PaginationWidget__wrapper"><button
                type="button"
        class="PaginationWidget__show-more PaginationWidget__show-more_mobile js--PaginationWidget__show-more Button  jsButton Button_theme_primary Button_size_m"
        data-label="Показать ещё"
                 data-page="2"     ><span class="Button__text jsButton__text">
                Показать ещё
            </span></button><div class="PaginationWidget__wrapper-pagination"><span class="PaginationWidget__page js--PaginationWidget__page PaginationWidget__page_current">
                                1
                            </span><a href="https://www.citilink.ru/catalog/smartfony/?p=2"
                               class="PaginationWidget__page js--PaginationWidget__page PaginationWidget__page_next PaginationWidget__page-link"
                               data-page="2"
                                
                            >
                                2
                            </a><a href="https://www.citilink.ru/catalog/smartfony/?p=3"
                               class="PaginationWidget__page js--PaginationWidget__page PaginationWidget__page_next PaginationWidget__page-link PaginationWidget__page_desktop"
                               data-page="3"
                                
                            >
                                3
                            </a><a href="https://www.citilink.ru/catalog/smartfony/?p=3"
                                   class="PaginationWidget__page js--PaginationWidget__page PaginationWidget__page_next PaginationWidget__page-link PaginationWidget__page_mobile"
                                   data-page="3"
                                    
                                >
                                    ...
                                </a><a href="https://www.citilink.ru/catalog/smartfony/?p=4"
                               class="PaginationWidget__page js--PaginationWidget__page PaginationWidget__page_next PaginationWidget__page-link PaginationWidget__page_desktop"
                               data-page="4"
                                
                            >
                                4
                            </a><a href="https://www.citilink.ru/catalog/smartfony/?p=5"
                               class="PaginationWidget__page js--PaginationWidget__page PaginationWidget__page_next PaginationWidget__page-link PaginationWidget__page_desktop"
                               data-page="5"
                                
                            >
                                5
                            </a><a href="https://www.citilink.ru/catalog/smartfony/?p=6"
                               class="PaginationWidget__page js--PaginationWidget__page PaginationWidget__page_more PaginationWidget__page-link PaginationWidget__page_desktop"
                               data-page="6"
                                
                            >
                                ...
                            </a><a href="https://www.citilink.ru/catalog/smartfony/?p=13"
                               class="PaginationWidget__page js--PaginationWidget__page PaginationWidget__page_last PaginationWidget__page-link"
                               data-page="13"
                                
                            >
                                13
                            </a><a class="js--PaginationWidget__page PaginationWidget__arrow js--PaginationWidget__arrow PaginationWidget__arrow_right"
                           data-page="2"
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
12.06.2022, 01:46
Это из кода или со страницы?

Добавлено через 2 минуты
потому что солидное полотно у меня выглядит вот так

Python
1
2
3
4
5
6
import requests
 
url = 'https://www.citilink.ru/catalog/smartfony/'
response = requests.get(url)
 
print(response.text)
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<html>
 <head>
  <title>Загрузка...</title>
  <script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
 
  <script>
   document.addEventListener("DOMContentLoaded", function() {
    var value = '';
    var value2 = 'eW';
    value = value + value2;
    var value2 = 'i5';
    value2 = value2.split("").reverse().join("")
    value = value + value2;
    var value2 = 'pR';
    value = value + value2;
    var value2 = '1q';
    value2 = value2.split("").reverse().join("")
    value = value + value2;
    var value2 = 'RM';
    value = value + value2;
    var value2 = 'aB';
    value = value + value2;
    var value2 = 'BA';
    value = value + value2;
    var value2 = '==';
    value = value + value2;
    var config = document.getElementById('el12206').dataset;
    Cookies.set(config.name, value, {
     domain: config.domain,
     expires: new Date(new Date().getTime() + 60 * 60 * 1000),
    });
    document.location.reload()
   });
  </script>
 
 </head>
 <body>
  <div id="el12206" data-name="_pcl" data-domain=".citilink.ru"></div>
 </body>
</html>
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 7
12.06.2022, 12:54  [ТС]
Из кода на аналогичный запрос. Шапка вот с этого начинается.
HTML5
1
2
3
4
5
6
7
8
9
10
11
 Операционная система 
                            </span><span class="ProductCardHorizontal__properties_value">
                               Android 10 HMS (без сервисов Google)
                            </span></li><li class="ProductCardHorizontal__properties_item"><span class="ProductCardHorizontal__properties_name">
                                Дисплей 
                            </span><span class="ProductCardHorizontal__properties_value">
                               5.45&quot;, IPS
                            </span></li><li class="ProductCardHorizontal__properties_item"><span class="ProductCardHorizontal__properties_name">
                                Разрешение дисплея 
                            </span><span class="ProductCardHorizontal__properties_value">
                               1440x720
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
12.06.2022, 14:21
Ну а через запрос из питона у Вас получилось эту же информацию получить? Если то да, то как? Если нет, то какой смысл парсить html, который можно только в браузере получить?
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 7
13.06.2022, 16:30  [ТС]
Не до конца понял вопрос если честно) Решил проблему примерно вот так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for page in range(1, 30):
    response = requests.get(url + '?p=' + str(page + 1))
    soup = BeautifulSoup(response.text, 'lxml')
    items = soup.find_all('div', class_='product_data__gtm-js product_data__pageevents-js ProductCardHorizontal js--ProductCardInListing js--ProductCardInWishlist')
    for n, i in enumerate(items, start=1):
       itemName = i.find('div', class_='ProductCardHorizontal__header-block').find('a', class_='ProductCardHorizontal__title Link js--Link Link_type_default').get('title')
       oper_system = i.find('span', class_='ProductCardHorizontal__properties_value').text.strip()
       try:
          itemPrice = i.find('span', class_='ProductCardHorizontal__price_current-price js--ProductCardHorizontal__price_current-price').text.replace(" ","")
          nalichie_status='V nalichie'
       except:
          itemPrice=0
          nalichie_status = 'Ne v nalichii'
       dateforstring = date.today().isoformat()
       values = (itemName, oper_system, int(itemPrice), dateforstring, nalichie_status)
       cur = con.cursor()
       cur.execute(
           "INSERT INTO SMARTFONY(name,operation_system,price,date_insert,status_nalichie) VALUES (%s, %s, %s, %s, %s)",values)
       print(f'{n}:{itemName} на базе {oper_system} за {itemPrice}, {dateforstring}', {nalichie_status})
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.06.2022, 16:30
Помогаю со студенческими работами здесь

Задача 6. Web scraping
Задача 6. Web scraping Что нужно сделать Дан несложный пример HTML-страницы: Sample Web Page. Изучите код этой страницы и...

База данных о продажах некоторого интернет-магазина
Здравствуйте. Помогите, пожалуйста, решить данную задачу без использования подключаемых модулей. Дана база данных о продажах...

Добавление товара в корзину интернет-магазина Python Djago
Подскажите, пожалуйста, не могу понять, прописал шаблоны и файлы, но товар не добавляется в корзину и не могу понять почему. Создано 2...

Web scraping - извлечение данных с web-страницы
Добрый день всем! помогите написать скрипт который будет извлекать email, телефоный номер и адрес фирмы с web-странцы. Заранее...

Web service интернет магазина
Всем добрый день Появилась у меня проблема. Нужно написать &quot;web service интернет магазина для оптовых покупателей&quot;. Зачем? Тема...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru