.findAll () ничего не находит на веб-странице - PullRequest
0 голосов
/ 30 мая 2019

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

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.

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

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Потому что нужного вам класса нет.

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

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

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

0 голосов
/ 30 мая 2019

Вам нужно прокрутить, чтобы получить все обзоры, для которых требуется автоматизация браузера, например, селен (запрос 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...