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

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

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

Author24 — интернет-сервис помощи студентам
Добрый день, дорогие форумчане! Начинаю изучать 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2022, 12:06
Ответы с готовыми решениями:

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

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

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

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

8
Эксперт по компьютерным сетям
5901 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,009
11.06.2022, 19:37 2
после
Python
1
response = requests.get(url)
выведите
Python
1
print(response.text)
1
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 7
12.06.2022, 00:04  [ТС] 3
Насколько я понимаю это позволяет посмотреть структуру страницы
0
Эксперт по компьютерным сетям
5901 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,009
12.06.2022, 00:05 4
Все верно. Что там?
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 7
12.06.2022, 01:42  [ТС] 5
Там солидное полотно, за межстраничные переходы, насколько я понимаю отвечает вот эта часть
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
Эксперт по компьютерным сетям
5901 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,009
12.06.2022, 01:46 6
Это из кода или со страницы?

Добавлено через 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  [ТС] 7
Из кода на аналогичный запрос. Шапка вот с этого начинается.
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
Эксперт по компьютерным сетям
5901 / 3358 / 1036
Регистрация: 03.11.2009
Сообщений: 10,009
12.06.2022, 14:21 8
Ну а через запрос из питона у Вас получилось эту же информацию получить? Если то да, то как? Если нет, то какой смысл парсить html, который можно только в браузере получить?
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 7
13.06.2022, 16:30  [ТС] 9
Не до конца понял вопрос если честно) Решил проблему примерно вот так:
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
13.06.2022, 16:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2022, 16:30
Помогаю со студенческими работами здесь

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

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

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

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

Видеоуроки простого интернет-магазина на Node js на www.youtube.com? Или код интернет магазина с GitHub c коментами?
Искал видеоуроки по написанию сайта на node js, с толкового нашел только видеуроки Алексея Лущенко:...

Web scraping и переменные
Добрый ден, я начал изучать программирование и так как приходилось наблюдать за работой людей на...

HtmlUnit financial website web scraping
Нужна помощь с вытаскиванием таблицы из сайта:...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru