我目前正在做一个googleplay商店刮刀,从一个特定的应用程序刮评论,并写评论到一个文件。为此,我使用Python Selenium在这里搜索所有评论:https://play.google.com/store/apps/details?id=com.grabtaxi.passenger&showAllReviews=true,然后提取出所有评论。你知道吗
所有评论都被确定在一个特定的类zc7KVe
中,因此我为获取所有评论而确定的XPath是:
//div[@class='zc7KVe']
。你知道吗
这是Python中的一行代码,用于使用上述XPath查找此类元素,这是在while循环中完成的:
reviews = driver.find_elements(By.XPATH, '//div[@class=\'zc7KVe\']'
问题是当我继续向下滚动页面时,reviews
变量的长度会越来越大。这是因为上面的XPath搜索满足条件的所有元素。这会导致刮取操作所用的时间成倍增加(例如,向下滚动页面80次后,刮取240个新的评论集所用的时间超过了20分钟,而我第一次开始时只花了30秒)。你知道吗
为了加快速度,我正在探索在XPath中包含position()
,这样就不需要提取出满足条件的所有元素。我研究了this,并尝试在Chrome开发工具(如//div[contains(@class,'zc7KVe') and (position() >= 100) and not (position > 200)]
)中测试XPath,但没有结果。你知道吗
是否有一个XPath可以满足特定类和范围的搜索?你知道吗
添加
在DevTools中检查时,HTML的结构如下所示:
<div jscontroller="..." jsmodel="..." jsdata="..." ...>
<div class="zc7KVe">
<!-- One review -->
<div jscontroller="..." jsmodel="..." jsdata="..." ...>
<div class="zc7KVe">
<!-- One review -->
<!-- and so on -->
有多种不同的方法可以提高性能:
让HTML解析器执行HTML解析,这样可以减少JSON over HTTPselenium命令的数量以及通过selenium webdriver查找元素的其他开销。您可以获取review部分的内部/外部HTML,并使用^{} 等工具对其进行解析。大致如下:
而且,如果您仍在使用XPath方法,并使用
position()
按“范围”筛选内容,那么您可以在容纳评论的容器的范围内进行操作:相关问题 更多 >
编程相关推荐