Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
5 / 5 / 2
Регистрация: 26.03.2015
Сообщений: 68

Парсинг

08.07.2021, 13:09. Показов 2085. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru