5 / 5 / 2
Регистрация: 26.03.2015
Сообщений: 68

Парсинг

08.07.2021, 13:09. Показов 2120. Ответов 6

Студворк — интернет-сервис помощи студентам
Добрый день!
Есть такой урл
https://www.tesco.com/grocerie... issues/all
с которого надо спарсить товары и отзывы к этим товарам с помощью scrapy.
Для парса товаров есть такой код:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
    def parse_product(self, response, p_url, p_id):
        item = TescoComItem()
 
        product_url = p_url
        product_id = p_id
        product_image_url = (response.xpath
                             ("//div[@class='product-image__container']/img/@src").extract_first().split("?")[0])
        product_title = (response.xpath
                         ("//div[@class='product-details-tile__title-wrapper']//h1//text()").extract_first())
        product_category = response.xpath("//div[@class='breadcrumbs__content']//span//text()").extract()[-1]
        product_price = (response.xpath
                         ("//div[@class='price-control-wrapper']//span[@class='value']//text()").extract_first())
        product_description = response.xpath("//div[@id='product-marketing']//text()").extract_first()
        name_and_address = response.xpath("//div[@id='manufacturer-address']//ul//text()").extract()
        return_address = response.xpath("//div[@id='return-address']//ul//text()").extract()
        net_contents = response.xpath("//div[@id='net-contents']//p//text()").extract()
 
        # Usually Bought Next Products
        ubnps = response.xpath("//div[@class='recommender__wrapper']//div[@class='product-tile-wrapper']")
        ubnps_dict = {}
        for ubnp in ubnps:
            ubnp_product_uri = ubnp.xpath("div//a[@class='product-image-wrapper']/@href").extract_first()
            ubnp_product_url = response.urljoin(ubnp_product_uri)
            ubnp_product_title = ubnp.xpath("div//h3//text()").extract_first()
            ubnp_image_url = (ubnp.xpath
                              ("div//img[@class='product-image']/@src").extract_first())
            ubnp_product_price = (ubnp.xpath
                                  ("div//span[@class='value']//text()").extract_first())
 
            dict_key = product_title + "__ubnp" + str(len(ubnps_dict) + 1)
            ubnps_dict.update({dict_key: {
                                            "ubnp product url": ubnp_product_url,
                                            "ubnp product title": ubnp_product_title,
                                            "ubnp product image url": ubnp_image_url,
                                            "ubnp product price": ubnp_product_price
                                           }
                               })
        ubnps_json = json.dumps(ubnps_dict)
 
        # Reviews
        reviews = {}
        reviews = self.parse_reviews(response, reviews_dict=reviews)
        reviews_json = json.dumps(reviews)
 
        item['product_url'] = product_url
        item['product_id'] = product_id
        item['product_image_url'] = product_image_url
        item['product_title'] = product_title
        item['product_category'] = product_category
        item['product_price'] = product_price
        item['product_description'] = product_description
        item['name_and_address'] = "".join(name_and_address).encode("utf-8")
        item['return_address'] = "".join(return_address).encode("utf-8")
        item['net_contents'] = "".join(net_contents).encode("utf-8")
        item['reviews'] = reviews_json
        item['ubnps'] = ubnps_json
 
        yield item
Код парсит хар-ки товаров.
А вот функция для парсинга комментов:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    def parse_reviews(self, response, reviews_dict=dict()):
        reviews = response.xpath("//article/section")
        for review in reviews:
            review_title = review.xpath("h4//text()").extract_first()
            review_stars_count = review.xpath("div//span//text()").extract_first()
            review_author = review.xpath("p//text()").extract()[0]
            review_date = review.xpath("p//text()").extract()[1]
            review_text = review.xpath("p//text()").extract()[2]
            reviews_dict[len(reviews_dict)+1] = [review_title,
                                                 review_stars_count,
                                                 review_author,
                                                 review_date,
                                                 review_text]
 
        next_page_reviews = response.urljoin(response.xpath("//a[contains(@class, 'beans-link__anchor')]/@href").extract()[-1])
        if next_page_reviews:
            pass
        return reviews_dict
Помогите, пжлст, разобраться. Как правильно парсить комменты, которые подгружаются второй, третьей и т.д. страницей? Урл такой страницы, например, такой:
https://www.tesco.com/grocerie... eview-data
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.07.2021, 13:09
Ответы с готовыми решениями:

Парсинг
Добрый вечер, нужно взять атрибут href из тега <a>, который находится в div с классом - 'bt-slide-content' <div...

Парсинг
Доброго дня. Делаю парсинг на Python, пытаюсь сделать пагинацию на странице, но не могу понять, как вытащить номера страниц. Пожалуйста,...

Парсинг
Как ошибку исправить. Подскажите что не так и желательно объясните :D import urllib.request from bs4 import BeautifulSoup def...

6
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
12.07.2021, 13:00
APlayer, видимо каменты подгружаются динамически, значит вам нужно выловить скрипт который их подгружает. Это можно сделать прямиком в браузере.
0
5 / 5 / 2
Регистрация: 26.03.2015
Сообщений: 68
13.07.2021, 13:11  [ТС]
Damenikx,
Цитата Сообщение от Damenikx Посмотреть сообщение
видимо каменты подгружаются динамически,
Если в ссылке
https://www.tesco.com/grocerie... eview-data
менять параметр page, то подгружается новая "порция" камментов. Т.е. всё-таки к камментам можно получить доступ по урлу.
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
14.07.2021, 09:32
APlayer, сайт довольно-таки хитрый, он отправляет гет-запрос. Но при переходе по ссылке мы попадаем не туда, куда хотим. Надо рыть дальше.
Миниатюры
Парсинг  
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
14.07.2021, 09:34
При этом в самой строке браузера мы имеем вот такой урл:

https://www.tesco.com/grocerie... eview-data

Если перебором менять page то можно вынуть все коменты, однако, это костыль.
0
5 / 5 / 2
Регистрация: 26.03.2015
Сообщений: 68
14.07.2021, 10:12  [ТС]
Цитата Сообщение от Damenikx Посмотреть сообщение
он отправляет гет-запрос
Да. Отправляет GET-запрос

Цитата Сообщение от Damenikx Посмотреть сообщение
Если перебором менять page то можно вынуть все коменты, однако, это костыль
Ну так scrapy и есть тот инструмент, который позволяет перебирать такие урлы, предоставляя костыль. Или не так?
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
14.07.2021, 10:38
APlayer, в теории то да, но лучше уже высасывать конкретно через get-запрос. Правда в нашем с Вами случае запрос не хочет перенаправлять нас на страницу со всем коментами а просто открывает главную. Так что да. Перебирайте страницы через юрлу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.07.2021, 10:38
Помогаю со студенческими работами здесь

Парсинг
import argparse parser = argparse.ArgumentParser() parser.add_argument("arg", nargs="+") parser.add_argument("--sort", type=str) ...

Парсинг
Здарова, столкнулся с такой проблемой, грамотно сформулировать не смогу, а потому лучше объясню на примере. ...

Парсинг JS в HTML
При помощи bs4 спарсил html страницу и в ней есть строка для примера var Variable =...

Парсинг страницы
Здравствуйте! Столкнулся с такой проблемой, что не могу спарсить страницу. Я использовал BeautifulSoup для парсинга, но суть проблемы в...

Парсинг html
Здравстувуйте. Начинаю изучать python. В качестве тренировочной задачи делаю такую Есть html страница. В ней есть столбец имя...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru