首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3.6,使用Selenium的web爬虫,无法从Google获取用户评论的日期和评级

Python 3.6,使用Selenium的web爬虫,无法从Google获取用户评论的日期和评级
EN

Stack Overflow用户
提问于 2021-02-08 02:08:45
回答 1查看 243关注 0票数 0

我正在进行一个使用SeleniumPython 3.6Jupyter Notebook中使用web爬虫的项目。

其目标是获取应用程序的评论以及相应的日期和评级。

目标网页是

US&gl=US&showAllReviews=true

我可以得到评论,但我没有抓住他们的日期和评分。

我用来获取评论的代码如下所示:

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url = 'https://play.google.com/store/apps/details?id=io.silvrr.installment&hl=en_US&gl=US&showAllReviews=true' 
path = r"D:\Term 1\Cloud Computing\Session 4-5\CC_ETL\chromedriver"
browser = webdriver.Chrome(path) #Obrir un navegador Chrome
browser.get(url)

content = browser.find_elements_by_class_name('UD7Dzf')
User_Review = []  #Create an empty list to store the user reviews

for i in (range(0,40)):  
    first = {'Review -{}'.format(i+1):content[i].text}
    User_Review.append(first)
User_Review

然后,我尝试用类名"p2TkOb"获取日期。

代码语言:javascript
复制
date = browser.find_elements_by_class_name('p2TkOb')

但是它没有返回具体的日期。相反,它返回了如下一些web元素:

代码语言:javascript
复制
[<selenium.webdriver.remote.webelement.WebElement (session="b0e4c4f85a982c03a64302931a3474d1", element="dd95dfb2-c8da-47fc-8d5e-16a0ce010db7")>,
 <selenium.webdriver.remote.webelement.WebElement (session="b0e4c4f85a982c03a64302931a3474d1", element="7fd1ab9a-b654-4ec0-b6c7-e8bd5260d0db")>,

另外,还有两种日期,一种是用户的日期,另一种是开发人员的日期,类名相同。然而,的目标只是获取用户评论的日期.

我在定位收视率方面也遇到了麻烦,比如div aria-label="Rated 1 stars out of five stars"

有人能帮帮我吗?非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2021-02-08 04:29:48

搜索分离的content和分离的date不是一个好主意。

您应该得到div,它同时保留了contentdate,然后使用相对find_element_by_...div中获取contentdate。这样,您就可以获得这个datecontent,并且可以控制它。

我使用'd15Mdf bAhLNe'获取contentdate (每个div组都在一次评审中)的div。后来,我在每个contentdate中分别搜索--使用item.find...而不是browser.find... --我得到了单身的content和singel date,我确信这个date是针对这个content的。

代码:

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url = 'https://play.google.com/store/apps/details?id=io.silvrr.installment&hl=en_US&gl=US&showAllReviews=true' 

path = r"D:\Term 1\Cloud Computing\Session 4-5\CC_ETL\chromedriver"
#browser = webdriver.Chrome(path) #Obrir un navegador Chrome
browser = webdriver.Firefox()

browser.get(url)

cards = browser.find_elements_by_class_name('d15Mdf.bAhLNe')  # it has to be `dot` in place of `space`

user_reviews = []  # Create an empty list to store the user reviews

for number, item in enumerate(cards, 1):  
    review = item.find_element_by_class_name('UD7Dzf').text
    date = item.find_element_by_class_name('p2TkOb').text
    user = item.find_element_by_class_name('X43Kjb').text
    rated = item.find_element_by_xpath('.//div[@class="pf5lIe"]/div').get_attribute('aria-label').split(' ')[1]

    user_reviews.append({
               'number': number, 
               'review': review, 
               'date': date, 
               'user': user,
               'rated': rated,
    })

for item in user_reviews:  
    print('---', item['number'], '---')
    print('date:', item['date'])
    print('user:', item['user'])
    print('rated:', item['rated'])
    print('review:', item['review'][:50], '...')

结果:

代码语言:javascript
复制
--- 1 ---
date: January 9, 2021
user: NICASIO NICOSIA
rated: 1
review: I used to love this app because of the payment ter ...
--- 2 ---
date: February 3, 2021
user: Shitta Soewarno
rated: 1
review: After I updated the application I could no longer  ...
--- 3 ---
date: January 25, 2021
user: Jennifer Jones
rated: 2
review: Used to love this alot and i always pay back on ti ...
--- 4 ---
date: February 5, 2021
user: Noy D Junior
rated: 3
review: Applications that helped out so much. But now I'm  ...
--- 5 ---
date: January 31, 2021
user: Syuhada Husni
rated: 1
review: it suddenly logged me out and now i cannot log in  ...

BTW: Selenium在开始时将find_element_by_class_name('name')转换为带有dotcss selector -- .name --但是它有多个名称find_element_by_class_name('name1 name2')的问题。它应该将dot放在每个名称之前,并创建.name1.name2,但是它只在.name1 name2开头添加dot,所以我在

代码语言:javascript
复制
find_elements_by_class_name('d15Mdf.bAhLNe')

BTW:创建唯一的键Review-1Review-2不是个好主意,因为后来得到review是个问题--你必须知道在Review-{}中使用哪个数字。最好在所有项目中使用相同的键review

BTW: xpathdot (.//div)开始,创建仅在item中搜索的相对xpath。

我把它放在GitHub furas/python-示例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66095101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档