.findAll()从网页上找不到任何内容

时间:2019-05-30 17:47:41

标签: python web-scraping beautifulsoup

为了从Google商店中提取评论,我正在尝试学习图书馆的美味汤。我编写了一个代码,该代码应该让我获得所有评论(包括星级,评论者的姓名和日期),但是输出只是一个空列表。这个问题可能是我非常缺乏经验的非常基本的东西。

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 个答案:

答案 0 :(得分:1)

因为您要查找的课程不存在。

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

几乎所有<body>都是由运行在浏览器中的JavaScript生成的,其中包括我想找到的所有有趣的内容。

如果要尝试抓取此类页面,请查找实际运行JavaScript(通常在无头模式下运行的Chrome中)的抓取器。

答案 1 :(得分:0)

您需要滚动以获取所有需要浏览器自动化的评论,例如硒(执行批处理更新的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