【问题标题】:.findAll() finds nothing from webpage.findAll() 从网页中找不到任何内容
【发布时间】:2019-05-30 17:47:40
【问题描述】:

为了从谷歌商店拉出评论,我正在努力学习图书馆美汤。我写了一个代码,应该让我获得所有评论(包括星级、日期和评论者的姓名),但输出只是一个空列表。这个问题可能是一些非常基本的问题,我只是太缺乏经验而无法知道。

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 web-scraping beautifulsoup


【解决方案1】:

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

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

几乎整个 <body> 都是由在浏览器中运行的 JavaScript 生成的,我想包括您正在寻找的所有有趣的部分。

如果您想尝试抓取此类页面,请寻找实际运行 JavaScript 的抓取工具(通常在 Chrome 中以无头模式运行)。

【讨论】:

  • python经典库requests支持js渲染。试一试!
  • 谢谢! “渲染”是什么意思,我为什么要渲染它?
【解决方案2】:

您需要滚动以获取所有需要浏览器自动化的评论,例如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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多