.findAll() ничего не находит на веб-странице

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

from urllib.request import urlopen
from bs4 import BeautifulSoup as soup
my_url = 'https://play.google.com/store/apps/details?id=com.playstudios.popslots&showAllReviews=true'
uclient = urlopen(my_url)
page_html = uclient.read()
uclient.close()
page_soup = soup(page_html, "html.parser")
reviews = page_soup.findAll("div",{"class":'d15Mdf bAhLNe'})
len(reviews)

Выход 0.

Что мне делать, чтобы это исправить?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Потому что класса, который вы ищете, нет.

curl 'https://play.google.com/store/apps/details?id=com.playstudios.popslots&showAllReviews=true' | grep 'd15Mdf bAhLNe'

Почти все <body> создается с помощью JavaScript, работающего в браузере, включая, я полагаю, все интересные фрагменты, которые вы ищете.

Если вы хотите попробовать очистить такую ​​страницу, поищите парсеры, которые действительно запускают JavaScript (обычно в Chrome, работающем в автономном режиме).

Классическая библиотека Python requests поддерживает рендеринг js. Дать ему шанс!

maslak 30.05.2019 20:12

Спасибо! что вы подразумеваете под «рендерингом» и почему я должен его рендерить?

Moran Reznik 30.05.2019 20:27

Вам нужно прокрутить, чтобы получить все обзоры, которые требуют автоматизации браузера, например. selenium (запрос POST, который выполняет пакетные обновления, не выглядит простым для копирования.

Если вам нужна только страница 1 , перед прокруткой обзоры вы можете использовать их регулярно (мое регулярное выражение недостаточно хорошо, чтобы получить его за один раз)

import requests
import re

url = "https://play.google.com/store/apps/details?id=com.playstudios.popslots&showAllReviews=true"
r = requests.get(url)
p = re.compile(r'gp:AOqpTOH5kmss3scHG0QoYWgIF-BGIBxKlo-1-KRNg2GEzHXfpccogYalrSCBLbjLp-Y4h-T69r-4nFVYuea8Zg",(.*)\);</script><script aria-hidden = "true"', re.DOTALL)
data = p.findall(r.text)[0]
p2 = re.compile(r'"(.*?)",|\d{21}')
items = p2.findall(data)
x = 0
for i in items:
    if re.search(r'(\d{21})', i):
        #print(i)
        print( items[x-2], ' : ' , items[x-1])
    x+=1

Другие вопросы по теме