在每个应用下的Google play store下(例如this one),有一长串评论。
但只展示了其中的一部分,而其他部分只有在您点击" next"箭头。
如何有效抓取所有应用的所有评论?
我试过的代码:
import bs4
from urllib.request import urlopen
url = "https://play.google.com/store/apps/details?id=com.google.android.youtube.tv&hl=en&pli=1"
response = urlopen(url)
html = response.read().decode("utf-8")
或
import bs4
from urllib.request import urlopen
from selenium import webdriver
# simulate the javascript
driver = webdriver.PhantomJS()
driver.get("https://play.google.com/store/apps/details?id=com.google.android.youtube.tv&hl=en&pli=1")
答案 0 :(得分:0)
抓取谷歌可能是针对ToS的,但它在某些圈子里是一项全国性的运动。 (见youtube-dl。)我不会详细说明,因为我不相信我会在那里做一些好事,但我仍然想告诉你我会接近这个之类的事情。 (执行JavaScript和模拟按钮点击可能更容易实现,更易于维护,但效率更低。)
执行此操作后,您将复制整个请求,包括Google Cookie(整个-H 'Cookie: ...'
,在我的情况下是几百个字符),所以首先删除它。不要与任何人分享。事实上,你也可以摆脱大多数其他标题。重要的部分是URL和--data
参数。
数据参数是URL编码的,因此您可能希望将其粘贴到https://www.urldecoder.org/之类的内容中以获得更好的概述。
生成的--data
参数以[[[136880256,[{"136880256":[null,null,[2,null,[40,
开头。在此之后我们不知道long base64字符串是什么,所以我们只删除它。 (但是,事实证明这个字符串可能实现了分页。)所以我们继续""]],["com.google.android.youtube.tv",7]]}],null,null,0]]]
,并删除&at=...
参数。一些探索向我们表明40
意味着我们要求40条评论,将其更改为100条似乎可以获得100条评论。设置高于199
的数字会给我们一个错误,但是这个特定的应用似乎只有150条评论(无论如何都是英文?)(或者至少评论页面只显示150条)。
这是你将要获得的摘录:
)]}'
96917
[["af.adr",0,{"136880256":[[["gp:AOqpTOE...
]
]
,1,null,"What a waste of a perfectly good app. The bloody awful bold font...