我正在学习自己的网络抓取工作,而我正试图取消评论者对Yelp的评分作为一种练习。通常,我可以使用CSS选择器或XPath方法来选择我感兴趣的内容。但是,这些方法不适用于选择审阅者的评级。例如,在以下页面中:https://www.yelp.com/user_details_reviews_self?userid=0S6EI51ej5J7dgYz3-O0lA。第一个评级的CSS选择器是“.stars_2”。但是,如果我在RSelenium代码中使用此选择器,如下所示:
ratings=remDr$findElements('css selector','.stars_2')
ratings=unlist(lapply(ratings, function(x){x$getElementText()}))
我得到了NULL。我认为原因是评级实际上是一个图像。我在这里粘贴了一小部分页面源:
<div class="review-content">
<div class="review-content">
<div class="biz-rating biz-rating-very-large clearfix">
<div>
<div class="rating-very-large">
<i class="star-img stars_2" title="2.0 star rating">
<img alt="2.0 star rating" class="offscreen" height="303" src="//s3-media4.fl.yelpcdn.com/assets/srv0/yelp_styleguide/c2252a4cd43e/assets/img/stars/stars_map.png" width="84">
</i>
</div>
</div>
基本上,如果我可以从class =“stat-img stars_2”或title =“2.0 star rating”中提取文本,那么我很好。谁可以帮我这个事?拜托,我真的很想知道。
答案 0 :(得分:1)
如何在页面的html上使用正则表达式,例如:
>>> import requests
>>> url = 'http://www.yelp.com/user_details_reviews_self?userid=0S6EI51ej5J7dgYz3-O0lA'
>>> html = requests.get(url).text
>>> import re
>>> rating_pattern = re.compile(r'\d.\d star rating">')
>>> for rating in re.findall(rating_pattern, html):
... print(rating)
...
2.0 star rating">
4.0 star rating">
5.0 star rating">
5.0 star rating">
5.0 star rating">
5.0 star rating">
5.0 star rating">
2.0 star rating">
4.0 star rating">
2.0 star rating">
答案 1 :(得分:0)
这会满足吗?
source = driver.page_source # gets page source of current page
images = source.split("<img")[1:]
for image in images:
if "star rating" in image:
rating = image.split('''alt="''')[1]
rating = rating.split("star")[0]
rating = float(rating)
print rating
break